所有Pod是否都配置了app和version標簽
問題描述
Service關聯的所有Pod都必須配置app和version標簽。app標簽在流量監控中用于流量的跟蹤,version標簽在灰度發布中用于區分不同版本。如果存在未配置app或version標簽的Pod,則報此異常。
修復指導
Pod標簽配置在Deployment的spec.template.metadata.labels中,建議配置為:
labels:
app: {serviceName}
version: v1
注意修改或刪除Deployment會觸發Pod滾動升級,可能會導致業務短暫中斷,請根據業務場景選擇適當的時間修改。
步驟 1 復制原有工作負載配置,保存為YAML文件。
kubectl get deployment {deploymentName} -n {namespace} -o yaml > {deploymentName}-deployment.yaml
例如:
kubectl get deployment productpage -n default -o yaml > productpage-deployment.yaml
步驟 2 修改productpage-deployment.yaml內容,如果沒有app和version,需要添加。app的值建議與Service名稱一致,version建議為v1。
步驟 3 刪除原工作負載。
kubectl delete deployment {oldDeploymentName} -n {namespace}
步驟 4 應用新的工作負載配置。
kubectl apply -f productpage-deployment.yaml
注意1.15及以下集群還可以在CCE控制臺直接修改Pod的標簽,但有可能會導致ReplicaSet殘留。
判斷是否存在ReplicaSet殘留的方法如下:
1.查詢Deployment的ReplicaSet。
kubectl get replicaset | grep {deploymentName}
2.找到實例個數大于1的ReplicaSet,如果ReplicaSet個數大于1,可能是修改label導致ReplicaSet殘留。需要刪除舊配置的ReplicaSet。
kubectl delete replicaset {replicaSetName} -n {namespace}
所有Pod的app和version標簽是否都相等
問題描述
Service關聯的所有Pod的app和version標簽必須都相等。app標簽在流量監控中用于流量的跟蹤,version標簽在灰度發布中用于區分不同版本。如果存在app或version標簽不相等的Pod,則報此異常。
修復指導
Pod標簽配置在Deployment的spec.template.metadata.labels中,建議配置為:
labels:
app: {serviceName}
version: v1
修改多個Pod標簽為相等的操作方法如下:
步驟 1 查看Service選擇器(spec.selector)配置的標簽。
kubectl get svc {serviceName} -o yaml
例如,標簽是app: ratings和release: istio-bookinfo。
步驟 2 根據標簽查找Service關聯的Pod。
kubectl get pod -n {namespace} -l app=ratings,release=istio-bookinfo
說明{namespace}和Service的namespace一致。
步驟 3根據Pod名稱,找到其關聯的工作負載。
kubectl get deployment {deploymentName} -n {namespace}
說明
一般Pod名稱格式為{deploymentName}-{隨機字符串}-{隨機字符串}。
如果根據Pod名稱未查詢到工作負載,可能是因為ReplicaSet有殘留,需要將其刪除。
判斷是否存在ReplicaSet殘留的方法如下:
查詢Deployment的ReplicaSet。
kubectl get replicaset | grep {deploymentName}
找到實例個數大于1的ReplicaSet,如果ReplicaSet個數大于1,可能是修改label導致ReplicaSet殘留。需要刪除舊配置的ReplicaSet。
kubectl delete replicaset {replicaSetName} -n {namespace}
步驟 4請參考修復指導修改工作負載中Pod的app和version標簽。
所有Pod是否都注入了sidecar
問題描述
Service管理的所有Pod都必須存在istio-proxy容器,否則,“所有Pod是否都注入了sidecar”檢查結果會失敗。
修復指導
請檢查命名空間是否配置了自動注入sidecar,如果配置后重啟Pod仍然無法注入,請檢查實例數量是否超過了套餐限制。
- 如果網格未開啟命名空間注入,可參考sidecar注入,為命名空間下所有工作負載關聯的Pod注入sidecar。或者只為某個工作負載注入sidecar,方法如下:
a.為工作負載所在命名空間打上istio-injection=enabled標簽。
kubectl label ns
b.在CCE控制臺為工作負載添加annotations字段。
annotations:
sidecar.istio.io/inject: 'true'

您可以單擊Installing the Sidecar了解更多sidecar注入的知識。
- 如果網格已經開啟了命名空間注入,但是Pod未注入sidecar,需要在CCE控制臺手動重啟Pod,或者檢查網格實例數量是否已經超出套餐配額。