模块 6 - 更新你的应用
难度: 初级 预计时间: 10 分钟
本场景的目标是使用 kubectl set image 更新已部署的应用程序,并使用 rollout undo 命令回滚。
步骤 1 - 更新应用的版本
要列出你的部署,请运行 get deployments
命令
kubectl get deployments
要列出正在运行的 Pod,请运行 get pods
命令
kubectl get pods
要查看应用程序的当前镜像版本,请运行 describe pods
命令,并查找 Image
字段
kubectl describe pods
要将应用程序的镜像更新到版本 2,请使用 set image
命令,后跟部署名称和新的镜像版本
kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=gcr.io/k8s-minikube/kubernetes-bootcamp:v2
该命令通知部署为你的应用程序使用不同的镜像,并启动滚动更新。 使用 get pods
命令检查新 Pod 的状态,并查看旧 Pod 的终止情况
kubectl get pods
步骤 2 - 验证更新
首先,检查应用程序是否正在运行。 要查找公开的 IP 和端口,请运行 describe service
命令
kubectl describe services/kubernetes-bootcamp
Docker Desktop 用户注意事项: 由于 Docker Desktop 网络限制,默认情况下你无法直接从主机访问 Pod。运行 minikube service kubernetes-bootcamp
,这将创建一个从 Pod 到你主机的 SSH 隧道,并在你的默认浏览器中打开一个连接到服务的窗口。可以通过按 Control-C 终止隧道,然后在 curl $(minikube ip):$NODE_PORT
命令后继续本教程。
创建一个名为 NODE_PORT
的环境变量,其值为分配的节点端口
export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')
echo NODE_PORT=$NODE_PORT
接下来,对公开的 IP 和端口执行 curl
操作
curl $(minikube ip):$NODE_PORT
每次运行 curl
命令时,你都会访问不同的 Pod。 请注意,所有 Pod 都在运行最新版本 (v2)。
你还可以通过运行 rollout status
命令来确认更新
kubectl rollout status deployments/kubernetes-bootcamp
要查看应用程序的当前镜像版本,请运行 describe pods
命令
kubectl describe pods
在输出的 Image
字段中,验证你是否正在运行最新的镜像版本 (v2)。
步骤 3 - 回滚更新
让我们执行另一次更新,并部署标记为 v10
的镜像
kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=gcr.io/k8s-minikube/kubernetes-bootcamp:v10
使用 get deployments
查看部署的状态
kubectl get deployments
请注意,输出未列出所需的可用 Pod 数量。 运行 get pods
命令以列出所有 Pod
kubectl get pods
请注意,某些 Pod 的状态为 ImagePullBackOff
。
要更深入地了解问题,请运行 describe pods
命令
kubectl describe pods
在受影响的 Pod 的输出的 Events
部分中,请注意,存储库中不存在 v10
镜像版本。
要将部署回滚到你上次正常工作的版本,请使用 rollout undo
命令
kubectl rollout undo deployments/kubernetes-bootcamp
rollout undo
命令将部署恢复到先前已知的状态(镜像的 v2)。 更新是版本化的,你可以恢复到部署的任何先前已知状态。
再次使用 get pods
命令列出 Pod
kubectl get pods
四个 Pod 正在运行。 要检查在这些 Pod 上部署的镜像,请使用 describe pods
命令
kubectl describe pods
该部署再次使用应用程序的稳定版本 (v2)。 回滚成功。