CentOS7环境安装Kubernetes
通过Rancher安装Kubernetes的文章前面已经写过,但那时是需要科学上网才能安装成功(下载gcr.io/google_containers/XXXXX的镜像),本次实战依旧是用Rancher来安装Kubernetes,但是会做一些设置,使得不用也能成功安装K8S环境,另外,在CentOS7环境下,有些设置如果处理不当也会导致安装失败或者加入节点失败,所以也会在本文中交代清楚;
1. 标准化机器准备,不论是master还是node节点,都要先做一些同样的设置,本章会将这些步骤列出,请参照本章对每一台机器做同样的设置;
2. 安装master,配置模板;
3. 在K8S环境加入机器,并快速部署一个应用作为体验;
4. 安装kubectl工具;
本次涉及到的重要软件的版本信息如下:
1. 操作系统:CentOS Linux 7 (3.10.0)
2. Docker:1.12.3
3. Kubernetes:v1.8.3
整个环境由两台CentOS7的机器组成,如下:
hostname IP地址 作用 内存大小
master 192.168.119.129 主控制节点 2G
node1 192.168.119.130 业务节点 4G
接下来的操作是通用的,在master和node1两台机器上都要一模一样的做一遍;
建议以root身份来执行以下操作,或者通过sudo su -命令获取root权限;
检查文件/etc/hostname,确保master和node1的不一样,我这边master的hostname就叫master,node的hostname叫node1;
修改后需要重启机器;
检查hosts
检查文件/etc/hosts,确保有hostname和本机IP的配置:
1. 对于master应该有这么一行:192.168.119.129 master
2. 对于node1应该有这么一样:192.168.119.130 node1
IP和DNS
IP地址不能冲突;
能正常解析域名,执行curl www.baidu.com,可以返回网站的html内容;
防火墙
如果是测试环境就关闭防火墙,如果是生产环境需要做详细的设置,关闭防火墙的方法如下:
1. 查看当前防火墙状态:systemctl status firewalld.service
2. 禁止开机启动:systemctl disable firewalld.service
3. 关闭防火墙:systemctl stop firewalld.service
关闭SELinux
打开文件/etc/selinux/config,找到SELINUX=xxxxx这行,改为SELINUX=disabled;
修改后需要重启机器;
开启IPV4转发
打开文件/etc/sysctl.conf,检查是否有net.ipv4.ip_forward = x这样的配置;
如果有就保证x等于1,如果没有就加一行:net.ipv4.ip_forward = 1
修改并保存后,执行命令sysctl -p使配置生效;
执行命令sysctl -a|grep “ip_forward”,查看最新的配置,应该有如下内容:
1. net.ipv4.ip_forward = 1
2. net.ipv4.ip_forward_use_pmtu = 0
重启
做完上述步骤后,如果有改动,最好重启机器,以免有设置未能生效;
关闭Swap交换分区
执行命令swapoff -a关闭Swap交换分区;
安装Docker1.2.3版本
什么版本的Docker才能适配Rancher和Kubernetes?rancher的官网给出了一份列表,请参考:http://rancher.com/docs/rancher/v1.6/zh/hosts/#docker,本文我们使用推荐的1.2.3版本,以下是安装步骤:
1. 执行命令:
mkdir -p ~/_src \
&& cd ~/_src \
&&wgethttp://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-selinux-1.12.3-1.el7.centos.noarch.rpm \
&& wget http://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-1.12.3-1.el7.centos.x86_64.rpm \
&& wget http://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-debuginfo-1.12.3-1.el7.centos.x86_64.rpm \
&& yum localinstall -y docker-engine-selinux-1.12.3-1.el7.centos.noarch.rpm docker-engine-1.12.3-1.el7.centos.x86_64.rpm docker-engine-debuginfo-1.12.3-1.el7.centos.x86_64.rpm
systemctl enable docker
启动docker:
systemctl start docker
执行docker version命令,看到如下信息:
Client:
Version: 1.12.3
API version: 1.24
Go version: go1.6.3
Git commit: 6b644ec
Built:
OS/Arch: linux/amd64
Server:
Version: 1.12.3
API version: 1.24
Go version: go1.6.3
Git commit: 6b644ec
Built:
OS/Arch: linux/amd64
设置Docker镜像加速
此时如果用docker pull命令下载镜像,本地会连接hub.docker.com网站去下载,耗时较长,因此我们可以设置docker镜像加速,使得本地连接去国内镜像仓库下载,镜像加速的设置有很多种,本章以阿里云的设置为例,步骤如下:
创建目录:
mkdir -p /etc/docker
设置镜像仓库地址:
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xwx6wxd1.mirror.aliyuncs.com"]
}
EOF
重新加载配置:
systemctl daemon-reload
重启docker服务:
systemctl restart docker
至此,机器的标准化准备工作已经完成了,经过了上述操作的机器可以直接拿来安装master,或者作为node加入到kubernetes环境;
在master机器执行以下命令,即可安装rancher:
docker run -d --restart always --name rancher-server -p 8080:8080 rancher/server:v1.6.11-rc3 && docker logs -f rancher-server
以上命令会下载rancher镜像再启动容器,并且会输出容器控制台的信息,等到控制台信息不再滚动时,在浏览器访问192.168.119.129:8080,可以看到初始页面,在页面的右下角选择“简体中文”后,页面如下所示:
至此,rancher安装成功,接下来就是kubernetes的搭建工作了;
搭建kubernetes之前,我们先创建一个环境模板用来给环境配置基本信息:
1. 如下图,选择“环境管理”:
2. 点击下图红框中的“添加环境模板”:
3. 如下图,在新的页面上,输入模板名称、选择”Kubernetes”、点击”编辑设置”:
4. 如下图,下拉菜单只有一个选择,请选中:
5. 会出现一个配置参数的页面,只需要修改其中的三个参数,如下图:
上图四个红框填入的内容如下表所示:
名称 |
值 |
Private Registry for Add-Ons and Pod Infra Container Image |
registry.cn-shenzhen.aliyuncs.com |
Image namespace for Add-Ons and Pod Infra Container Image |
rancher_cn |
Image namespace for kubernetes-helm Image |
rancher_cn |
Pod Infra Container Image |
rancher_cn/pause-amd64:3.0 |
6. 将页面拖动到最底部,点击“设置”按钮,如下图:
7. 再将页面拖动到最底部,点击“创建”按钮,如下图:
这样我们就完成了环境模板的配置,这里面的参数帮助rancher寻找国内的镜像仓库,从而避免了无法从google仓库下载镜像的问题,在以往这个问题是通过科学上网来解决的;
1.点击“创建环境”按钮,如下图红框:
2. 在创建环境的页面中,输入新的环境的名称,选择我们刚才创建的环境模板,在点击底部的“创建”按钮,如下图:
3. 如下图红框所示,在左上角位置选择刚刚创建的环境,可以看到目前环境已经OK,正在等待node的加入:
至此,Kubernetes的master已经搭建完毕;
整个环境由两台CentOS7的机器组成,如下:
hostname |
IP地址 |
作用 |
内存大小 |
master |
192.168.119.129 |
主控制节点 |
2G |
node1 |
192.168.119.130 |
业务节点 |
4G |
至此,我们已经完成了节点机器加入K8S环境的操作,接下来我们快速体验在K8S环境创建Pod和Service的操作;
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: tomcat001
spec:
replicas: 1
template:
metadata:
labels:
name: tomcat001
spec:
containers:
- name: tomcat001
image: tomcat:7.0.82-jre7
tty: true
ports:
- containerPort: 8080
2. 在dashboard页面上传这个tomcat.yaml文件,操作如下图所示:
3. 等镜像下载和容器创建成功后,在dashboard的部署页面可以看到tomcat001的部署情况,如下图:
4. 创建一个文件tomcat-svc.yaml,内容如下:
apiVersion: v1
kind: Service
metadata:
name: tomcat001
spec:
type: NodePort
ports:
- port: 8080
nodePort: 30018
selector:
name: tomcat001
---------------------
5. 在dashboard页面上传这个tomcat-svc.yaml文件,操作如下图所示:
6. 在dashboard的服务页面,可以看到我们刚刚部署的服务,如下图所示:
7. 业务节点的IP地址是192.168.119.130,所以在浏览器访问192.168.119.130:30018,可以访问刚才创建的tomcat容器,如下图:
至此,添加节点以及快速体验K8S服务的实战就全部完成了,但是仅凭dashboard页面提供的服务,我们无法对K8S做更多操作;
kubectl是个客户端工具,可以安装在任意一台Linux、windows或者Mac电脑上,只要这个电脑能够连接master节点,本次实战我们将kubectl安装在一台全新的CentOS7机器上;
有三种下载方式,您可以选择其中任意一种:
1. 在linux机器上执行以下命令下载:
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
2.在我的GitHub下载,地址是:https://github.com/zq2599/blog_demos/blob/master/k8s_tools/kubectl/linux/kubectl.zip,在这个页面点击”download”按钮即可下载,下载后记得解压;
3. 在csdn下载,地址:https://download.csdn.net/download/boling_cavalry/10297309
1. kubectl文件下载到linux机器后,执行命令chmod +x ./kubectl,给文件可执行权限;
2. 执行以下命令,将kubectl移动到可以全局访问的目录下:mv ./kubectl /usr/local/bin/kubectl
3. 在linux机器的任意目录都能执行kubectl,直接输入kubectl然后回车,可以看到如下信息:
kubectl controls the Kubernetes cluster manager.
Find more information at https://github.com/kubernetes/kubernetes.
Basic Commands (Beginner):
create Create a resource from a file or from stdin.
expose Take a replication controller, service, deployment or pod and expose it as a new Kubernetes Service
run Run a particular image on the cluster
set Set specific features on objects
run-container Run a particular image on the cluster. This command is deprecated, use "run" instead
Basic Commands (Intermediate):
get Display one or many resources
explain Documentation of resources
edit Edit a resource on the server
delete Delete resources by filenames, stdin, resources and names, or by resources and label selector
工具已经准备好,接下来我们把配置做好,使得kubectl可以连接到K8S上执行命令;
3. 在linux机器上,在家目录创建.kube文件夹,命令如下:
#mkdir ~/.kube
4. 在.kube文件夹下新建一个名为config的文件,把刚才复制的配置信息粘贴进来;
至此,kubectl工具的安装配置就完成了,输入命令get service -a -o wide –all-namespaces试试,可以看到当前的服务列表:
[root@v-test-test ~]# kubectl get service -a -o wide --all-namespaces
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
default kubernetes ClusterIP 10.43.0.1
default tomcat001 NodePort 10.43.243.24
kube-system heapster ClusterIP 10.43.157.242
kube-system kube-dns ClusterIP 10.43.0.10
kube-system kubernetes-dashboard ClusterIP 10.43.199.86
kube-system monitoring-grafana ClusterIP 10.43.112.198
kube-system monitoring-influxdb ClusterIP 10.43.200.65
kube-system tiller-deploy ClusterIP 10.43.28.153
至此,《CentOS7环境安装Kubernetes四部曲》就全部结束了,希望能够帮助您快速搭建环境,然后一起开始愉快的K8S之旅;