在CentOS7中通过kubeadm安装Kubernetes(k8s) Node
文章目录
Node安装与Master安装会相对简单,会单独说明
1. 故事背景
如果你存下以下情况或者需求,满足一个就可以往下读
- 不想玩单机Master了
- 囊中羞涩
- 穷
- 以上均是
2. 提前准备
- 本次试验是在
CentOS 7.4 64位
系统,root
用户下进行 - 拥有访问
Google
的能力,如果你有科学上网的能力,应用到CentOS7
可以参考 - 拥有
Kubernetes Master
,如果没有可参考 - 本次安装的Kubernetes版本是
1.11.x
3. 安装kubeadm
这步和安装Master基本一致,其中第四部kubelet配置cgroup driver不需要处理。
我🖕原话说过”kubelet配置cgroup driver“,其实是错误的。在某一次测试集群挂掉,重启机器后发现有一个节点,一直是NotReady
的状态,通过查询Kubelet日志journalctl -xeu kubelet
,发现其中错误直指Cgroup driver
,按照Master设置的方式重启Kubelet后,节点处于Ready
状态了。
❗️注意❗️
kubectl可以不用装,管理k8s基本上在Master机器上就可以了
kubeadm、kubelet可以默认安装,但最好与master一致,否则会有版本不兼容的问题。查询对应版本
kubeadm version
和kubelet --version
。安装对应版本如yum install -y kubelet-1.11.2 kubeadm-1.11.2
。docker可以默认安装,但最好也与master一致,否则有可能无法成功加入master。查询对应版本
yum list docker-ce
。安装对应版本如docker install -y docker-ce-18.06.1.ce-3.el7
。
4. 准备k8s的镜像
注意:如果你可以顺利访问google,可以忽略!如果不能,请看
提前准备
的参考
因为装master的时候,相关的k8s镜像已经下过一遍,所以为了版本保持一致,最好先下载好,在master机器上通过docker images
查看。
# master的版本
docker pull k8s.gcr.io/kube-apiserver-amd64:v1.11.0
docker pull k8s.gcr.io/kube-controller-manager-amd64:v1.11.0
docker pull k8s.gcr.io/kube-scheduler-amd64:v1.11.0
docker pull k8s.gcr.io/kube-proxy-amd64:v1.11.0
docker pull k8s.gcr.io/coredns:1.1.3
docker pull k8s.gcr.io/etcd-amd64:3.2.18
docker pull k8s.gcr.io/pause-amd64:3.1
docker pull k8s.gcr.io/pause:3.1
等镜像pull完,你可以把docker的科学上网去掉,你已经基本上不需要他了
加入master
在master初始化完毕后,会输出一段类似于以下的命令
kubeadm join 172.16.224.34:6443 --token fweifx.fs7f8w3f89sfhf --discovery-token-ca-cert-hash sha256:2174a53f2d7c7f59ee3d425e2da069a70c251e2192b3375e1361dcc50f46a066
如果你忘记了,没关系,下面这个命令会告诉你
# 注意:此命令在Master机器上执行,把输出结果在Node机器上执行
kubeadm token create --print-join-command
如果你记录下来了,那可以直接在Node机器上执行,其中token是24小时有效,如果已经过期,可以使用以下命令获取。
# 注意:此命令在Master机器上执行
# 创建token
> kubeadm token create
> kubeadm token list
TOKEN TTL EXPIRES USAGES DESCRIPTION EXTRA GROUPS
lc8imt.grx159aia7115ngk 2h 2018-09-12T20:18:49+08:00 authentication,signing <none> system:bootstrappers:kubeadm:default-node-token
# lc8imt.grx159aia7115ngk 就是你需要的token
所以最终的命令,替换如下
kubeadm join 172.16.224.34:6443 --token lc8imt.grx159aia7115ngk --discovery-token-ca-cert-hash sha256:2174a53f2d7c7f59ee3d425e2da069a70c251e2192b3375e1361dcc50f46a066
顺利的话,会告诉你加入成功,这个时候你在Master机器通过命令kubectl get nodes
可以看到多了一个节点。
一开始可能是not ready
状态,有一些pod是需要同步到新节点上的,同步并启动完成后,就会变成ready
状态。
常见问题
一直处于not ready状态
你需要使用命令journalctl -xeu kubelet
看看日志,具体问题具体分析
[ERROR FileContent–proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1
当kubeadm join
时,发生类似上述的错误。
编辑文件/etc/sysctl.conf,新增或修改如下内容
net.bridge.bridge-nf-call-iptables = 1
执行如下命令生效
sudo sysctl -p
搞乱了,想重新来
- 在master上删除node,
kubectl delete node {NODE_NAME}
- 在worker上重置,
kubeadm reset -f
文章作者 xifan
上次更新 2018-09-14