Kubernetes 的升级与部署策略
以下将一起介绍Kubernetes的升级与部署策略
1、节点升级和驱逐(Node Upgrade and Eviction)
您将如何升级节点通常取决于您如何设置集群。 如果使用 kubeadm 工具设置,则需要手动升级节点。 为此,您需要在每个节点上升级 kubeadm 和 kubelet 版本。 所以基本上你必须 ssh 到你想要升级的节点,然后:
对于 kubeadm:
apt-get upgrade -y kubeadm=1.23.4
kubeadm upgrade apply v1.23.4
对于 kubelet :
apt-get upgrade -y kubelet=1.23.4
systemctl restart kubelet
这应该在每个节点上重复以上操作,当然包括主(控制平面)节点。 更多信息请参考文档:https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/
在升级期间,我们不希望在该特定节点上调度任何 Pod,因此我们需要将其标记为不可调度。 为此:
kubectl cordon < node name >
但是如果我们想要升级节点并且有 pod 在它们上面运行呢? 然后我们首先需要排空节点。
排空一个节点:
kubectl drain <node name>
这会将 Pod 移动到另一个工作节点(如果它是可调度的,则移动到主节点)并将其标记为不可调度(即 cordon)。
升级后,我们可以通过以下方式再次将其标记为可调度:
kubectl uncordon <node name>
2、部署升级(Deployment Upgrade)
想象一下,我们有一个应用程序,我们最近发布了它的更新版本。 或者在我们的应用程序中,我们正在使用开发人员最近更新的第三方应用程序。 在这两种方式中,在某些时候,我们也希望更新我们的 Kubernetes 部署。
让我们通过一个例子来讨论如何做到这一点。 首先,让我们创建我们的 nginx 部署。
kubectl create deployment nginx --image=nginx:1.14.2
这里我使用了 nginx 1.14.2 镜像。 出于某种原因,我想更新此镜像。 我们可以通过编辑部署的镜像参数来做到这一点。
kubectl set image deployment nginx nginx=nginx:1.16.1
通常,此命令与“ --record ”标志一起使用,以便将其显示在滚动历史(rollout hisotry)记录中。
通过describe 查看最新的镜像
kubectl describe pod nginx
同时,我们也可以查看 deployment历史
kubectl rollout history deployment nginx
如果新映像不能与其他产品无法兼容,或者由于某些其他原因我们想要回滚升级:
kubectl rollout undo deployment nginx