##版本说明 ##
- kubernetes1.6
- docker1.12.6
环境准备
192.168.0.51 master
192.168.0.52 minion1
192.168.0.53 minion2
##安装docker ##
1 | # 安装yum-utils 管理yum repository及扩展包的工具 |
##系统配置 ##
创建/etc/sysctl.d/k8s.conf文件,内容为:
1 | net.bridge.bridge-nf-call-ip6tables = 1 |
执行
1 | sysctl -p /etc/sysctl.d/k8s.conf |
在/etc/hostname中修改各节点的hostname,在/etc/hosts中设置hostname对应非lo回环网卡ip:1
2
3192.168.0.51 master
192.168.0.52 minion1
192.168.0.53 minion2
##安装kubeadm和kubelet ##
安装kubeadm和kubelet需要技术梯子,添加以下
1、通过修改/etc/hosts文件添加IP *.google.com,比如
1 | 216.58.200.33 gcr.io |
2、:1
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
输入如下内容:
1 | [kubernetes] |
安装kubelet,kubeadm,kubectl
1 | yum -y install socat kubelet-1.6.1 kubeadm-1.6.1 kubectl-1.6.1 |
##初始化集群 ##
上面的步骤每个node都需要执行,此步骤只在Master Node 执行。选择192.168.0.51这台作为Master Node,在此机器上1
kubeadm init --kubernetes-version=v1.6.1 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.0.51
选择flannel作为网络插件,所以上面的命令指定–pod-network-cidr=10.244.0.0/16。初始化遇到问题时,使用下面的命令清理然后再初始化:
1 | kubeadm reset |
不出意外Master Node 已初始化成功。此时查看节点状态 kubectl get nodes 会报 The connection to the server localhost:8080 was refused - did you specify the right host or port? 我们查看kube-apiserver的监听端口
1 | [root@kube-master ~]# netstat -nltp | grep apiserver |
我们发现apiserver只监听了6443端口,但是我们需要使用kubectl访问apiserver,so 在~/.bash_profile追加下面的环境变量
1 | export KUBECONFIG=/etc/kubernetes/admin.conf |
现在再试试kubectl get nodes 吧!
##安装Pod Network ##
安装flannel network add-on
分两种情况
1、只有一张网卡
直接执行
1 | kubectl create -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel-rbac.yml |
2、有多张网卡
执行
1 | kubectl create -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel-rbac.yml |
执行第二步有所不同,下载https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml ,flanneld启动参数加上–iface=[iface-name]
1 | ...... |
eth1这里换成自己的网卡名即可。创建flanneld
1 | kubectl create -f {修改后的kube-flannel.yml路径} |
##使Master Node 参与工作负载 ##
一般不建议将Master Node参与负载,此时只为测试环境方便。
1 | # 使Master Node参与工作负载 |
##测试 ##
1 | kubectl run curl --image=radial/busyboxplus:curl -i --tty |
进入后执行nslookup kubernetes.default确认DNS解析正常。
1 | [ root@curl-57077659-xgckw:/ ]$ nslookup kubernetes.default |
如果正常解析,就大功告成啦!
1 | # 删除curl这个Pod |
##向集群中添加节点 ##
根据上面的步骤安装docker,kubelet套件。
在Master Node节点上执行
1 | # 获取token |
在minion1上执行
1 | # 关闭防火墙 |
看到如下内容就说明我们已经成功向集群中添加节点了!nice
1 | kubeadm join --token a432c6.078b144b659c82b4 192.168.0.51:6443 |
在Master Node上执行kubectl get nodes 确保所有的node是Ready的状态。
##问题总结 ##
Q:Minion Node一直处于notReady状态?
A:主要有两个原因:
1、启动kubelet的时候,会pull两个镜像(gcr.io/**),因为GFW的存在,不能成功pull,所以要自己找到这两个docker镜像1
2gcr.io/google_containers/pause-amd64:3.0
gcr.io/google_containers/kube-proxy-amd64:v1.6.1
2、 使用Kubeadm工具搭建的Kubernetes集群,已经默认集成了安全策略,所以要将Master Node节点/etc/kubernetes/pki下的所有文件复制到Minion Node相同目录下一份。所以在Master Node上执行1
scp /etc/kubernetes/pki/* root@{minion-ip}:/etc/kubernetes/pki
参考:
http://blog.frognew.com/2017/04/kubeadm-install-kubernetes-1.6.html
http://www.iyunv.com/thread-383770-1-1.html
http://www.infoq.com/cn/articles/Kubernetes-system-architecture-introduction