一次calico-node無法啟動問題記錄


集群中兩個節點的calico-node無法啟動

問題

生產集群中node-4及node-9兩個節點的calico-node無法啟動一直處於crashloopbackoffcalicoctl node status中的INFO列這兩個節點顯示為Active Socket: Connection refusedkubectl describe發現Event中有報錯:

Liveness probe failed: Get http://127.0.0.1:9099/liveness: dial tcp 192.168.99.7:9099: getsockopt: connection refused

追蹤


嘗試將兩個pod重啟

$ kubectl get pods -n kube-system --no-headers --field-selector=status.phase !=Running  | grep "calico-node" | awk '{print $1}' | xargs kubectl delete pod -n kube-system

重啟完成后pod仍然處於crashloopbackoff狀態,失敗。


進入Github搜索相關issue,基本都是因為calico自動獲取的ip不是目前在用的ip,但檢查日志發現日志中獲取的ip就是本地bond0網卡的地址。失敗。


檢查日志發現日志很短,並且兩個節點的calico-node都是這種情況:執行到Using node name就結束了。比對正確節點的calico-node啟動日志,與正常節點沒有區別。

2020-12-30 12:50:55.337 [INFO][10] startup.go 256: Early log level set to info 
2020-12-30 12:50:55.337 [INFO][10] startup.go 272: Using NODENAME environment for node name 
2020-12-30 12:50:55.337 [INFO][10] startup.go 284: Determined node name: node-4
2020-12-30 12:50:55.436 [INFO][10] startup.go 97: Skipping datastore connection test 
2020-12-30 12:50:55.438 [INFO][10] startup.go 476: Using IPv4 address from environment: IP=172.16.200.103
2020-12-30 12:50:55.440 [INFO][10] startup.go 509: IPv4 address 172.16.200.103 discovered on interface bond0
2020-12-30 12:50:55.440 [INFO][10] startup.go 647: No AS number configured on node resource, using global value
2020-12-30 12:50:55.440 [INFO][10] startup.go 149: Setting NetworkUnavailable to False
2020-12-30 12:50:55.639 [INFO][10] startup.go 530: FELIX_IPV6SUPPORT is false through environment variable
2020-12-30 12:50:55.644 [INFO][10] startup.go 181: Using node name: node-4

靈感:在某個github issue中提到雖然就緒探針readinessProbe不會導致crashloopbackoff,但是livenessProbe可能。檢查calico-node的配置文件中有關探針的部分

$ kubectl get daemonsets.apps -n kube-system calico-node -o yaml
...
        livenessProbe:
          httpGet:
            host: 127.0.0.1
            path: /liveness
            port: 9099
            scheme: HTTP
          initialDelaySeconds: 5
          periodSeconds: 10
          successThreshold: 1
          failureThreshold: 6
          timeoutSeconds: 1
...
  • liveness探針自pod啟動后5s后開始探測
  • 每隔10s進行一次探測
  • 檢查失敗后進入成功狀態最少連續探測次數為1次
  • 檢查成功后進入失敗狀態最少連續探測次數為6次
  • 探測檢測超時為1s

如果是配置文件有問題,那么所有的calico-node都會有問題,但現在只有node-4及node-9上的calico-node有問題。會不會是這兩個節點異常導致calico-node啟動后5s沒有pod並沒有啟動完成,存活探針無法訪問9099端口觸發pod自動重啟,不斷反復導致pod處於crashloopbackoff?登錄node-4及node-9發現兩個節點的負載竟然比正常節點高了幾十倍。原因就顯而易見了:高負載導致pod啟動緩慢,存活探針判斷失敗觸發pod不斷自動重啟引發pod狀態異常。

解決

驅逐node-4及node-9上的pod

$ kubectl drain node-4 --delete-local-data --ignore-daemonsets --force
$ kubectl drain node-9 --delete-local-data --ignore-daemonsets --force

重啟兩個節點

$ reboot

重啟完成后兩個節點上的calico-node處於Running狀態


免責聲明!

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



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