天天看點

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
           

繼續閱讀