天天看點

容器服務Kubernetes(ACK)及相關雲環境幾次故障和問題排查記錄

1. 鏡像倉庫被設定為公有,導緻鏡像洩露風險:   

   錯誤現象:

  公有鏡像倉庫可能會被雲上其它使用者拉取,導緻洩露鏡像安全風險;部分運維或者開發同學,因為沒有設定準确的 secret 到 Deployment,為了解決無法拉取鏡像問題,直接開放鏡像倉庫為公有。

   解決方法:

   鏡像倉庫的命名空間一定要設定為私有,準确設定綁定雲效中docker 鏡像賬号,通過雲效釋出應用;

   嚴格設定容器鏡像倉庫的維護權限;

2. 鏡像拉取失敗:

   錯誤現象:

## 檢視 pod 部署日志   
kubectl logs {pod}     
## 錯誤資訊
Failed to pull image "registry-vpc.{region_id}.aliyuncs.com/{app_name}-daily/{app_name}:20190823150817": 
rpc error: code = Unknown desc = Error response from daemon: 
pull access denied for registry-vpc.{region_id}.aliyuncs.com/{app_name}-daily/{app_name}, repository does not exist or may require 'docker login'           

  錯誤原因:   

  • 目前 tag 的鏡像不存在、鏡像位址錯誤、鏡像網絡不通,沒法通路;        

       解決方法:

   隻需修改正确位址或者打通網絡即可;   

  • Deployment 或者 Statefulset 的imagePullSecrets 沒有設定或者設定錯誤 

      解決方法:

  控制台或者使用指令建立保密字典,然後使用 imagePullSecrets 引入,或者自己建立 Secret:       

## deplyment yaml 設定: 
imagePullSecrets:            
    - name: acr-credential-be5ac8be6a88c42ac1d831b85135a585                       

3. SLB被容器服務清除,導緻故障,需要重建和安全配置:

   錯誤現象:

與容器服務關聯配置的負載均衡(SLB)被清除;

   錯誤原因:

   因為有狀态副本或者 Deployment集部署删除,存在級聯删除 Service 情況,開發和運維人員使用重建方式修改自己配置的時候,導緻 service 級聯相應 SLB 被删除,導緻故障,需要緊急重建 SLB 并多方增加通路控制等配置。

   Service 配置任意修改或者删除,比如将 SLB 模式修改為 NodePort 或者 Cluster 模式,導緻 SLB 負載均衡配置被清除。

   解決與防止方法:

   kubernetes 使用 NodePort,再通過手動建立負載均衡(SLB)與 NodePort 關聯,解耦 Service 與 SLB 級聯關系。

   使用 Ingress 暴露服務,Service 使用虛拟叢集 IP,與 Ingress 關聯。

使用此種方式需要注意 SLB 到後端服務的負載均衡,具體參考

負載均衡

中負載均衡請求部分。

4. ECS 添加到叢集失敗:

  叢集增加已有節點或者擴容失敗。

錯誤日志例如下:

2019-07-31 19:44:59cf7c629dbf1dc4088a5a6b316fa5e561a | Wait k8s node i-9dpfd2n6ijvdd5tb642r join cluster timeout  
2019-07-31 19:44:59cf7c629dbf1dc4088a5a6b316fa5e561a | Failed to check instance i-9dpfd2n6ijvdd5tb642r healthy : Wait for cn-north-2-gov-1.i-9dpfd2n6ijvdd5tb642r join to cluster cf7c629dbf1dc4088a5a6b316fa5e561a timeout  
2019-07-31 19:44:59cf7c629dbf1dc4088a5a6b316fa5e561a | Failed to init instance i-9dpfd2n6ijvdd5tb642r, err Wait for cn-north-2-gov-1.i-9dpfd2n6ijvdd5tb642r join to cluster cf7c629dbf1dc4088a5a6b316fa5e561a timeout
2019-07-31 19:44:59cf7c629dbf1dc4088a5a6b316fa5e561a | Failed to attach node i-9dpfd2n6ijvdd5tb642r, err Wait for cn-north-2-gov-1.i-9dpfd2n6ijvdd5tb642r join to cluster cf7c629dbf1dc4088a5a6b316fa5e561a timeout             

   錯誤原因:

  • 單個叢集内節點數量配額達到門檻值,導緻 ECS 幾點沒法加入;
  • 虛拟網絡 VPC中路由表的路由條目達到門檻值,導緻新增節點沒法添加路由條目;
  • kubernetes apiserver 的 SLB 負載均衡設定有通路控制,導緻添加的 ECS 沒法通路 ApiServer;
  • 添加的 ECS 節點自身安全組限制或者底層網絡故障,導緻沒法通路 apiserver;

   解決方法:

  • 聯系阿裡雲同學增加叢集或者路由表門檻值;
  • 配置 SLB 通路控制,增加白名單;
  • 配置安全組,增加白名單,或者重建 ECS,釋放故障 ECS;

5. 叢集中,個别 POD 網絡通路不通:

   個别應用産生一定比例的通路逾時錯誤報告,經過監控系統 sunfire 配置發現特定的A 應用 pod 與另外一個應用B pod 網絡不通;

網絡測試:

  • A pod 通路不通 B pod;
  • B pod 能通路通 A pod;
  • A pod 主控端 ECS 能通路通 B pod主控端 ECS;
  • B pod 主控端 ECS 能通路通 A pod主控端 ECS;
  • A pod 通路通 B pod主控端 ECS;
  • B pod 通路通 A pod主控端 ECS;

    抓包并與阿裡雲同學網絡排查發現, 雲上 VPC 的 NC 網絡控制子產品沒有正确下發路由資訊,導緻網絡故障。

   解決方法:

聯系阿裡雲 vpc 同學,排查 vpc 中 NC 路由下發問題。

6. 部分 ECS 網絡故障,Master 通路Node 的 kube-proxy 端口通路不通: 

新添加一批 ECS 節點,個别 ECS 總是添加失敗,報告逾時,排除 SLB 通路控制等原因;

監控 kubelet-TelnetStatus.Value 報警;

【阿裡雲監控】應用分組-k8s-cbf861623f10144c488813375a8a0d489-worker-1個執行個體發生報警, 觸發規則:kubelet-TelnetStatus.Value   
14:16 可用性監控[kubelet dingtalk-a-prod-node-X06/172.16.6.9] ,狀态碼(631>400 ),持續時間1天3分鐘           

   錯誤原因:

經過觀察和多次測試,失敗的 ECS 網絡很不穩定,經常網絡不通;

該故障排查錯層較長,一直沒懷疑機器問題;

ECS 主控端基礎設施有問題,排除釋放此主控端上的 ECS。

建立 ECS, 釋放故障 ECS,重新加入 kubernetes 叢集。