比如:
现在有1个node了, 我需要在增加一个node
增加node, 要求hostname不能相同. ip不能相同
查看主机名
hostname
修改主机名
vi /etc/hostname
然后重启服务
查询当前ip
ip a
发现当前ip和k8s-nodes节点一样, 因为设置了固定ip
修改固定ip
vi /etc/network/interface
修改静态ip为105
如果没有设置过静态ip, 可以参考我总结的这篇文章: https://cloud.tencent.com/developer/article/1706819
重启网卡:
sudo service networking restart
ssh登录, 报错
解决方法参考: https://blog.csdn.net/wd2014610/article/details/79945424
删除knows_hosts文件中带有192.168.1.105的秘钥
远程登录, 查看hostanme和ip, 都是对的了
Add correct host key in /Users/***/.ssh/known_hosts to get rid of this message.
vi /Users/wangdong/.ssh/known_hosts
在master节点上查看节点状态
kubectl get node
只有两个节点, 刚刚copy的节点没有添加上.
在k8s-nodes2上执行kubeadm reset 可以断开node, 然后重新join
kubeadm reset
然后重新join, join的内容放在https://www.cnblogs.com/ITPower/p/12791615.html里面了
kubeadm join 192.168.1.106:6443 --token vezzap.0w213k8ms11a0v51 \
--discovery-token-ca-cert-hash sha256:4fcac7c487209d7c354351ba6f93110253df4d0440fc68cb23fc4ac0baed4e0c
没有关闭虚拟内存
关闭虚拟内存, 并永久关闭
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
解决方案参考: https://www.jianshu.com/p/f53650a85131
看这个告警WARNING IsDockerSystemdCheck
修改或创建/etc/docker/daemon.json
,加入下述内容:
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
我的文件修改完以后
{
"registry-mirrors": ["https://w52p8twk.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
重启docker
systemctl restart docker
查看修改后的状态
docker info | grep Cgroup
上面三个是warning, 最后一个是error. 什么意思呢? 应该是master生成的节点过期了. 我们需要重新生成
参考文章: https://www.cnblogs.com/tchua/p/10897980.html
1)关于token失效
master集群初始化后,token24小时后就会失效,如果到了token失效时间,node再加入集群,需要重新生产token:
## 查看token状态
### TTL值 就是token生于时间
[root@k8s-master ~]# kubeadm token list
TOKEN TTL EXPIRES USAGES DESCRIPTION EXTRA GROUPS
5ti5kd.o32bm9lofv6zej94 21h 2019-05-22T11:16:31+08:00 authentication,signing The default bootstrap token generated by 'kubeadm init'. system:bootstrappers:kubeadm:default-node-token
## 重新生产token
[root@k8s-master ~]# kubeadm token create
W0511 05:25:48.747429 31569 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
lb2hib.5kf3zjrzkp8e632w
详情请参考我的另一篇文章: https://cloud.tencent.com/developer/article/1706826
error execution phase preflight: couldn't validate the identity of the API Server:
Get https://10.10.0.10:6443/api/v1/namespaces/kube-public/configmaps/cluster-info?timeout=10s: net/http:
request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
注意三个地方:
都对了, 就不会出现这个问题了
初始化成功的信息
kubectl get nodes
从时间上可以看出, 最后一个是刚刚添加的.
状态都NotReady
kubectl get pods -n kube-system
或
kubectl get pod --all-namespaces -o wide
其中有两个是非Running状态
kubectl describe pod kube-flannel-ds-amd64-zfkgl -n kube-system
少了pause:3.2镜像
docker pull registry.cn-hangzhou.aliyuncs.com/dva-1024/pause:3.2
docker tag registry.cn-hangzhou.aliyuncs.com/dva-1024/pause:3.2 k8s.gcr.io/pause:3.2
docker rmi registry.cn-hangzhou.aliyuncs.com/dva-1024/pause:3.2
docker images可以查看镜像
kubectl delete pod kube-flannel-ds-amd64-zfkgl -n kube-system
这里的pod节点删除后, 会自动重新加载.
pod都是running, 但是有一个节点是NotReady, 我们查看日志
journalctl -f -u kubelet.service
查看有问题的节点的pod状态
kubectl get pods -n kube-system -owide | grep ubuntu-nodes
都是running, 但为什么nodes节点是notReady呢? 我将node关机了, 再重启, 就好了