所有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,或者检查网格实例数量是否已经超出套餐配额。