來源:K8S中文社區
node
概述:因爲不當心在K8S惟一的master上誤執行kubeadm reset產生的一系列問題。
web
公司準備遷移一個K8S集羣,當前集羣是kubeadm+外部etcd的架構,準備把若干原來的虛擬機節點和etcd,移到新買的高配物理機上。
因爲沒有足夠的機器,打算用恢復快照的方式起新etcd。
遷移並不順利,用恢復快照的方式發現配置項kubeadmin-config數據有誤,(時間緊迫沒有深追緣由)只好經過把整個文件/var/lib/etcd拷貝還有證書(server、server-key、ca)到新機器上,而後在啓動選項中加入--initial-cluster-state=new強行啓動etcd服務。
發現僅在配置中更換etcd的地址不能成功,由於原etcd自簽證書並不包括新機器IP,因此重簽證書,而後下發到舊master上,而後修改/etc/kubernetes/manifests/kube-apiserver.yaml中etcd地址爲新IP
首先在舊master上生成token、cert和它們的hash值
kubeadm init phase upload-certs --upload-certs
獲得--certificate-key的hash值
kubeadm token create --print-join-command
獲得token和 --discovery-token-ca-cert-hash值
kubeadm join <API_HA_IP:6443> --token <TOKEN> --discovery-token-ca-cert-hash <TOKEN-HASH> --certificate-key <certificate-key> control-plane
中間在執行的過程當中,出了幾回麻煩,因此會時不時執行kubeadm reset操做重置節點。忽然不當心在舊master上執行了reset,崩潰!這下新master還沒進來,惟一的舊master被重置,apiserver失去通信。。。整個k8s至關於掛了。
所幸etcd在外部,而且正常運行,這意味着只要恢復master和apiserver,那集羣的數據應該還在
但是初始化後,kubectl get node 發下只有master在線,其餘節點所有notready
把已有的flannel相關資源所有刪除(serviceaccount、configmap、daemonsets)
而後,每一箇舊worker節點執行reset並再次join到集羣,這波操做後貌似正常了
可是次日發現全部proxy、coredns、flannel都crash,集羣仍是垮的
flannel報鏈接:
10.0.96.1 time out
1.說明apiserver的service訪問超時
2.apiserver由kube-proxy建立的endpoint不存在
3.kube-proxy報認證失敗 Failed to list *v1.Service: Unauthorized
認證失敗的緣由是:etcd保存的serviceaccount產生的secret數據是舊master的ca,而新master的ca已經變化,因此認證失敗
1.刪除全部現有proxy、cordns的serviceaccount
kubectl get sa -n kube-system|grep -E "kube-proxy|coredns"|awk '{print "kubectl delete sa",$1,"-n kube-system"}'|/bin/bash
2.從新初始化master,讓K8S自動生成和ca匹配的serviceaccount和secret,該secret是proxy的認證依據。
kubeadm init --config <yourconfig.yaml>
kubectl delete -f <kube-fannel.yaml>
kubectl applay -f <kube-fannel.yaml>
kubeadm join <API_HA_IP:6443> --token <TOKEN> --discovery-token-ca-cert-hash <CERT-HASH>
所有操做後,proxy、coredns、flannel均正常運行了,繼續觀察中
其中有個statefulset一直報錯,查看日誌,發現仍是認證失敗
經查,也是由於啓用了serviceaccount致使etcd保存的secret仍是舊值,刪除該secret
kubect get pod -A -o wide | more
結語:此次故障最萬幸的是採起了外部etcd,而且etcd正常遷移了。若是是默認kubeadm捆綁式etcd,那master被reset後,從新搭建集羣事小,關鍵是全部配置還得從新創建,損失就大了.
後臺回覆「加羣」,帶你進入高手如雲交流羣api
推薦閱讀:bash
一次成功的ARP黑客欺騙攻擊
微信
幾個使用GitHub的正確姿式
網絡
從理論到實踐,全方位認識 DNS架構
淺談互聯網那些防不勝防的人肉搜索技巧
併發
阿里雙11,億級流量高併發是怎麼抗住的?app
9 個問題進一步熟悉 HTTPSide
一文看懂DevOps,再不懂來打我
Linux 下 4 種實時監控日誌文件的方法
一文理解TCP、UDP協議及二者的區別
爲何 TCP 創建鏈接須要三次握手
10T 技術資源大放送!包括但不限於:雲計算、虛擬化、微服務、大數據、網絡、Linux、Docker、Kubernetes、Python、Go、C/C++、Shell、PPT 等。在公衆號內回覆「1024」,便可免費獲取!!