k8s叢集故障解決思路與方法
阿新 • • 發佈:2018-11-15
目錄
-
熟悉架構
-
HA的架構
- 單master的叢集結構
- 瞭解各元件的作用與基本命令
- etcd/kube-api/kube-controller/kube-scheduler/kube-proxy/kube-dns/kubelet/calico
- 當叢集出現問題,我們會用一些命令或dashboard觀察和獲取到錯誤資訊,有時dashboard也無法使用
- 參考:https://blog.csdn.net/huwh_/article/details/71308171
- https://www.kubernetes.org.cn/kubernetes%E8%AE%BE%E8%AE%A1%E6%9E%B6%E6%9E%84
-
-
常用命令:
- 基礎網路 :
- iptables/nslookup/curl/tracerroute/route/ping/tcpdump/ss -nltp/ip a/等
- etcd叢集狀態:
- etcdctl --cert-file /etc/etcd/ssl/etcd.pem --key-file /etc/etcd/ssl/etcd-key.pem --ca-file /etc/etcd/ssl/ca.pem --endpoints https://$CP1_IP:2379
- etcdctl --cert-file /etc/etcd/ssl/etcd.pem --key-file /etc/etcd/ssl/etcd-key.pem --ca-file /etc/etcd/ssl/ca.pem --endpoints https://$CP1_IP:2379
- calico網路狀態:
- calicoctl node status
- k8s服務與PODS狀態:
- kubectl get pods --all-namespaces -o wide
- kubectl get svc --all-namespaces -o wide
- kubectl describe pods <PODNAME> -n <NAMESPACE>
- 容器狀態與日誌:
- docker ps -a |grep <KEY>
- docker logs <ContainerID>
- 基礎網路 :
-
排查思路與順序
-
基礎網路-->etcd叢集->api->calico網路->cubeDNS->基礎元件->其它SVC與PODS
-
基礎網路的故障,會導致etcd叢集故障,etcd又會導致kube-apiserver故障,apiserver故障導致整個叢集無法訪問;
- 故障現象五花八門,同一種現象解決的辦法不一定相同,不同的版本解決方法不一定相同;
- 在保證叢集基礎元件執行正常的前提下,容器的日誌往往比較準確的反應問題的實質
- 經驗+baidu/google/bing
-
-
-
故障現象
-
容器不斷重啟
-
dashboard無法開啟
- 命令無法執行
- 網路不通
- 域名無法解析
- 。。。
-
-
常見故障例
-
安裝時下載鏡相類問題
-
問題: 下不到calico鏡相,可以用阿里雲轉一下,master上4個全要下,node上只要node/cni
- # 阿里雲鏡相服務https://cr.console.aliyun.com/repository/
- docker pull registry.cn-zhangjiakou.aliyuncs.com/yanghaitao/myhub:3.2.3-1
- docker pull registry.cn-zhangjiakou.aliyuncs.com/yanghaitao/myhub:3.2.3-2
- docker pull registry.cn-zhangjiakou.aliyuncs.com/yanghaitao/myhub:3.2.3-3
- docker pull registry.cn-zhangjiakou.aliyuncs.com/yanghaitao/myhub:3.2.3-4
- docker tag registry.cn-zhangjiakou.aliyuncs.com/yanghaitao/myhub:3.2.3-1 quay.io/calico/kube-controllers:v3.2.3
- docker tag registry.cn-zhangjiakou.aliyuncs.com/yanghaitao/myhub:3.2.3-2 quay.io/calico/cni:v3.2.3
- docker tag registry.cn-zhangjiakou.aliyuncs.com/yanghaitao/myhub:3.2.3-3 quay.io/calico/node:v3.2.3
- docker tag registry.cn-zhangjiakou.aliyuncs.com/yanghaitao/myhub:3.2.3-4 quay.io/coreos/etcd:v3.3.9
-
- 許可權類問題
- kubectl 使用$HOME/.kube/config(即/etc/kubernetes/admin.conf)的配置來訪問叢集
- 網路類問題
- 問題一:calico 網路問題:
- 現象:像單master安裝時一樣apply後,發現calico node一直不正常,重啟,coredns也是;
- 查詢原因:查calico-etcd有三個,member list只有一個,官網只有單master的介紹,etcd.yaml是個daemonset, 會在每個master上啟一個etcd pod, 可導致calico etcd的服務不正常, 連鎖反應是calico node/coredns/dashboard等都不正常;
- 解決方法一:
- 把calico etcd的daemonset 改為deployment, replicas 設為1
- 方法二:
- 把etcd的指向到kubernetes叢集的etcd上去,configmap裡配置好ca驗證
- 參考:http://blog.51cto.com/newfly/2085836
- 方法三:
- 用打標籤的方法讓calico etcd只執行在指定的master上,臨時解決方法,沒法高可用;
- 改etcd.yaml, nodeselector, =master1
- kubectl label nodes master1 node-role.kubernetes.io/master=master1--overwrite
- reboot所有結點或刪除重啟calico相關pods
- 用打標籤的方法讓calico etcd只執行在指定的master上,臨時解決方法,沒法高可用;
- 問題二:kubeadm init 後,無coredns/kube-proxy的pods出現:
- 調通外部網路
- 問題一:calico 網路問題:
- 其它問題:
- 問題三:k8s叢集kubeadm的官方介紹方法有兩種:
- 方法一是使用k8s自身的etcd,安裝起來速度慢,常出現莫名的故障;
- 方法二即自建外部etcd的方法,速度快且穩定,install.sh採用此方法;
- 問題四:重新安裝
- 先執行 sh install.sh reset
- 問題五:etcd備份
- etcd叢集資料:/var/lib/etcd
- calico etcd資料: /var/etcd
- 問題三:k8s叢集kubeadm的官方介紹方法有兩種:
-
-
參考:
- https://www.jianshu.com/p/593c53dbdf7b
- http://dockone.io/article/2247
- http://dockone.io/article/2268
- https://blog.csdn.net/huwh_/article/details/71308301
- https://blog.csdn.net/luckytanggu/article/details/68926330
- https://blog.csdn.net/ljx1528/article/details/81437106
- https://www.kubernetes.org.cn/kubernetes%E8%AE%BE%E8%AE%A1%E6%9E%B6%E6%9E%84
往期連結:
進入公眾號 -> 輸入help或index
Linux命令速查,如lsof