1. 程式人生 > >k8s叢集故障解決思路與方法

k8s叢集故障解決思路與方法

 

目錄

熟悉架構

HA的架構

常用命令:

排查思路與順序

故障現象

常見故障例

參考:


  1. 熟悉架構

  2. 常用命令:

    1. 基礎網路 :
      • 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
        cluster-health
    • 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>
  3. 排查思路與順序

    • 基礎網路-->etcd叢集->api->calico網路->cubeDNS->基礎元件->其它SVC與PODS

      • 基礎網路的故障,會導致etcd叢集故障,etcd又會導致kube-apiserver故障,apiserver故障導致整個叢集無法訪問;

      • 故障現象五花八門,同一種現象解決的辦法不一定相同,不同的版本解決方法不一定相同;
      • 在保證叢集基礎元件執行正常的前提下,容器的日誌往往比較準確的反應問題的實質
      • 經驗+baidu/google/bing
  4. 故障現象

    • 容器不斷重啟

    • dashboard無法開啟

    • 命令無法執行
    • 網路不通
    • 域名無法解析
    • 。。。
  5. 常見故障例

    • 安裝時下載鏡相類問題

      • 問題: 下不到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
        • 方法二:
        • 方法三:
          • 用打標籤的方法讓calico etcd只執行在指定的master上,臨時解決方法,沒法高可用;
      • 問題二:kubeadm init 後,無coredns/kube-proxy的pods出現:
        • 調通外部網路
    • 其它問題:
      • 問題三:k8s叢集kubeadm的官方介紹方法有兩種:
        • 方法一是使用k8s自身的etcd,安裝起來速度慢,常出現莫名的故障;
        • 方法二即自建外部etcd的方法,速度快且穩定,install.sh採用此方法;
      • 問題四:重新安裝
      • 問題五:etcd備份
        • etcd叢集資料:/var/lib/etcd
        • calico etcd資料: /var/etcd

往期連結:

    進入公眾號 -> 輸入help或index

 

 

                                  

                                                   Linux命令速查,如lsof