timed out waiting for to be synced

        程序操作kubernetes資源時, 沒有等舊的資源刪除完畢就立即創建了同名的新資源, 導致出現了一些錯誤. 

        具體表現爲kubernetes命令行刪除StatefulSet時報錯, timed out waiting for "mysql" to be synced, 刪除多次卡住, 然後報這個超時錯誤.

        查看這個StatefulSet:


root@kub3:~# kubectl -n admin-d2069c get statefulset mysql -o yaml
...
spec:
  podManagementPolicy: OrderedReady
  replicas: 0
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: mysql
      appname: mysql
      name: mysql
  serviceName: mysql
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: mysql
        appname: mysql
        name: mysql
      name: mysql
...

        replicas爲0, 但是查看其下有兩個狀態爲terminating的pod:


statefulsets/mysql                      0         2         19h

po/mysql-0                                   0/1       Terminating   0          19h
po/mysql-1                                   0/1       Terminating   0          19h


        然後使用如下命令再次進行刪除操作:

kubectl -n admin-d2069c delete statefulset mysql --cascade=false
        成功.


        出現這種情況的原因是, 刪除StatefulSet時會級聯刪除其下pod資源, 然而yaml定義中的replica爲0導致了混亂, 使用--cascade=false禁用級聯刪除則成功, 然後單獨刪除其下的兩個pod.


        刪除pod時也要注意, 因爲正常情況下, StatefulSet負責管理其下的pod而不需要人爲干預。所以這裏要使用強制刪除:

        若使用1.5或者更高版本的kubectl強制刪除Pod,請執行以下命令:


kubectl delete pods <pod> --grace-period=0 --force

        如果您使用1.4或者更低版本的kubectl,需要省略--force選項:
kubectl delete pods <pod> --grace-period=0

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章