9.3.4 数据平面Sidecar升级

控制平面升级后,已经运行Istio的应用程序仍将使用旧版本的Sidecar。要想升级Sidecar,需要重新注入它。

1.自动Sidecar注入情况下

如果使用自动Sidecar注入,可以通过对所有pod进行滚动升级来升级Sidecar,这样新版本的Sidecar将被自动重新注入。可以使用如下脚本通过patch优雅结束时长来触发滚动更新:


NAMESPACE=$1
DEPLOYMENT_LIST=$(kubectl -n $NAMESPACE get deployment -o jsonpath='{.items[*].
metadata.name}')
echo "Refreshing pods in all Deployments: $DEPLOYMENT_LIST"
for deployment_name in $DEPLOYMENT_LIST ; do
  TERMINATION_GRACE_PERIOD_SECONDS=$(kubectl -n $NAMESPACE get deployment "$deployment_name" -o jsonpath='{.spec.template.spec.terminationGracePeriodSeconds}')
  if [ "$TERMINATION_GRACE_PERIOD_SECONDS" -eq 30 ]; then
    TERMINATION_GRACE_PERIOD_SECONDS='31'
  else
    TERMINATION_GRACE_PERIOD_SECONDS='30'
  fi
  patch_string="{\"spec\":{\"template\":{\"spec\":{\"terminationGracePeriodSeconds\":$TERMINATION_GRACE_PERIOD_SECONDS}}}}"
  kubectl -n $NAMESPACE patch deployment $deployment_name -p $patch_string
done
echo "done."

2.手动Sidecar注入情况下

如果使用手动注入,可以通过执行以下命令来升级Sidecar:


kubectl apply -f <(istioctl kube-inject -f $ORIGINAL_DEPLOYMENT_YAML)

如果Sidecar以前被注入了一些定制的注入配置文件,则需要执行以下命令来升级Sidecar:


kubectl apply -f <(istioctl kube-inject --injectConfigFile inject-config.yaml --filename $ORIGINAL_DEPLOYMENT_YAML)