為什么會有這樣一個操作呢? (備注: 避免采坑的有效方法)
1. 我本人不是運維, 本身不精通運維知識. 在安裝k8s集群的過程中,非常痛苦, 出現各種問題, 也花費了大量的時間. 結果, 突然系統崩潰了
2. 我也快崩潰了
3. 所以,后來我聰明了, 在某個階段, 安裝好以后, 我就進行備份, 這樣出了問題就可以還原了, 避免每次從頭開始
比如:
--------------------------------------
今天要記錄的是如何復制node節點
現在有1個node了, 我需要在增加一個node
增加node, 要求hostname不能相同. ip不能相同
方案一:
1. 選中1. 和k8s-master......然后點擊復制, 復制成功后, 如下圖:
2. 啟動服務, 修改hostname
查看主機名
hostname
修改主機名
vi /etc/hostname
然后重啟服務
3. 修改固定ip地址
查詢當前ip
ip a
發現當前ip和k8s-nodes節點一樣, 因為設置了固定ip
修改固定ip
vi /etc/network/interface
修改靜態ip為105
如果沒有設置過靜態ip, 可以參考我總結的這篇文章: https://www.cnblogs.com/ITPower/p/12806495.html
重啟網卡:
sudo service networking restart
4. 重新配置ssh免密登錄
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
-
將紅線框部分刪除掉
5. 添加k8s節點
在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
ERROR1: 初始化報錯
沒有關閉虛擬內存
關閉虛擬內存, 並永久關閉 swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
ERROR2: 還是有錯誤
解決方案參考: 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
ERROR3: token過期
上面三個是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
## 獲取--discovery-token-ca-cert-hash值 [root@k8s-master ~]# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \ openssl dgst -sha256 -hex | sed 's/^.* //' 4fcac7c487209d7c354351ba6f93110253df4d0440fc68cb23fc4ac0baed4e0c
## 加入集群命令--在node節點執行 [root@k8s-master ~]# kubeadm join 192.168.1.106:6443 --token vezzap.5kf3zjrzkp8e632w \
--discovery-token-ca-cert-hash sha256:4fcac7c487209d7c354351ba6f93110253df4d0440fc68cb23fc4ac0baed4e0c
注意: 替換兩個地方的值
第一個位置替換:lb2hib.5kf3zjrzkp8e632w
第二個位置替換:4fcac7c487209d7c354351ba6f93110253df4d0440fc68cb23fc4ac0baed4e0c
詳情請參考我的另一篇文章: https://www.cnblogs.com/ITPower/p/12866713.html
ERROR4 :
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)
注意三個地方:
1. join的ip地址對不對
2. token設置的對不對
3. hash值設置的對不對.
都對了, 就不會出現這個問題了
初始化成功的信息
六. 查看k8s節點
1. 接下來,在master上查看
kubectl get nodes
從時間上可以看出, 最后一個是剛剛添加的.
狀態都NotReady
2. 查看pod的狀態
kubectl get pods -n kube-system
或
kubectl get pod --all-namespaces -o wide
其中有兩個是非Running狀態
3. 查看pod的狀態
kubectl describe pod kube-flannel-ds-amd64-zfkgl -n kube-system
少了pause:3.2鏡像
4. 下載pause:3.2鏡像
docker pull registry.cn-hangzhou.aliyuncs.com/dva-1024/pause:3.2
5. 修改下載下來的鏡像的tag為k8s.gcr.io的
docker tag registry.cn-hangzhou.aliyuncs.com/dva-1024/pause:3.2 k8s.gcr.io/pause:3.2
6. 刪除對應的阿里雲鏡像
docker rmi registry.cn-hangzhou.aliyuncs.com/dva-1024/pause:3.2
docker images可以查看鏡像
7. 刪除pod節點
kubectl delete pod kube-flannel-ds-amd64-zfkgl -n kube-system
這里的pod節點刪除后, 會自動重新加載.
8. 其他節點也有問題, 參考上面7點, 直到所有節點都Running
pod都是running, 但是有一個節點是NotReady, 我們查看日志
journalctl -f -u kubelet.service
查看有問題的節點的pod狀態
kubectl get pods -n kube-system -owide | grep ubuntu-nodes
都是running, 但為什么nodes節點是notReady呢? 我將node關機了, 再重啟, 就好了