控制平面升级后,已经启用Istio的应用程序仍将使用旧版本的Sidecar代理,因此需要进行升级。本文介绍如何通过自动注入Sidecar和手动注入Sidecar这两种方式升级Sidecar代理。
前提条件
背景信息
自动注入Sidecar
如果使用自动注入Sidecar的方式,可以通过对所有Pod进行滚动升级来升级Sidecar代理,这样新版本的Sidecar将被自动重新注入。建议使用该方式简化升级步骤。
可以使用以下Shell脚本来触发滚动更新。
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
#echo "get TERMINATION_GRACE_PERIOD_SECONDS from deployment: $deployment_name"
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}}}}"
#echo $patch_string
kubectl -n $NAMESPACE patch deployment $deployment_name -p $patch_string
done
echo "done."
例如,将以上脚本存为文件upgradeproxy.sh,并赋予可执行权限,例如在Linux命令行下执行chmod +x upgradeproxy.sh
。
该命令需要指定命名空间名称作为参数,例如更新default命名空间下的Pod,则需要执行 ./upgradeproxy.sh default
。
chmod +x upgradeproxy.sh
./upgradeproxy.sh default
手动注入Sidecar
如果没有使用自动注入Sidecar的方式,则需要执行以下相应的命令手动升级Sidecar。
按照之前手工注入的方式,重新生成一个新的部署YAML文件,并重新执行kubectl apply命令。
kubectl apply -f <(istioctl kube-inject -f <未注入过Sidecar代理配置的原始应用YAML文件>)
在文档使用中是否遇到以下问题
更多建议
匿名提交