7. 復制k8s Node節點 並重新初始化k8s-nodes2節點 (k8s連載)


為什么會有這樣一個操作呢? (備注: 避免采坑的有效方法)

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關機了, 再重啟, 就好了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM