弹性Kubernetes服务AWS部署过程可避免停机

时间:2020-03-14 19:15:48

标签: amazon-web-services docker kubernetes eks

这是我开始从事EKS AWS工作的一个月,到目前为止,已成功通过代码进行了部署。 下面给出了我要部署的步骤:

  1. 从docker终端创建映像。
  2. 标记并推送到ECR AWS。
  3. 创建部署“ project.json” 和服务文件“ project-svc.json”
  4. 将以上文件保存在“ kubectl / bin” 路径中,并使用以下命令进行部署。
  5. "kubectl apply -f projectname.json""kubectl apply -f projectname-svc.json"
  6. 因此,如果我想通过更改再次部署相同的项目,则可以将新映像推送到ECR上,并使用"kubectl delete -f projectname.json"删除现有部署,而不删除现有服务,然后使用命令{{1}重新部署}。

现在,我感到困惑的是,在删除现有部署之后,会有停机时间,直到我再次申请或创建部署。那么,如何避免这种情况呢?因为我实际上不希望停机,所以这就是我开始使用EKS的原因。 还有一件事是,部署过程也有点长。我知道我缺少什么,有人可以正确地指导我吗?

该项目位于.NET Core上,如果有使用Visual Studio进行部署的任何简化方法,请也指导我。

提前谢谢!

2 个答案:

答案 0 :(得分:2)

实际上没有必要删除您的部署。只需更新所需的状态(部署配置),然后让K8发挥作用并应用所需的更改,例如部署新版本的容器即可。

如果您的容器只有一个实例,则在应用更改时会遇到短暂的停机时间。如果您的应用程序支持多个副本(HA),则可以享受滚动升级功能。

首先阅读Performing a Rolling Update. 的Kubernetes官方文档

答案 1 :(得分:1)

仅当您更改(并且如果有)附加到部署的ConfigMap时,才需要使用delete / apply。 您所做的唯一更改是部署的“映像”-必须使用“ set-image”命令。

Kubectl允许您更改实际的部署映像,并且它本身可以完成滚动更新,并且使用3个以上的pod可以最大程度地减少停机时间。 而且,如果使用--record标志,则可以毫不费力地“回滚”到先前的图像,因为它可以跟踪更改。

您也可以指定“上下文”,而无需从上下文中跳转。

您可以这样:

kubectl设置映像部署DEPLOYMENT_NAME DEPLOYMENT_NAME = IMAGE_NAME --record -n NAMESPACE

OR 指定集群

kubectl设置图像部署DEPLOYEMTN_NAME DEPLOYEMTN_NAME = IMAGE_NAME_ECR -n NAMESPACE-群集EKS_CLUSTER_NPROD-用户EKS_CLUSTER-记录

例如:

kubectl set image deployment nginx-dep nginx-dep=ecr12345/nginx:latest -n nginx --cluster eu-central-123-prod --user eu-central-123-prod --record

-record是让您跟踪所有更改的内容,如果您想回滚,只需执行以下操作:

kubectl rollout undo deployment.v1.apps/nginx-dep

有关此文件的更多文档:

更新部署 encoded

回滚部署 https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#updating-a-deployment