这是我开始从事EKS AWS工作的一个月,到目前为止,已成功通过代码进行了部署。 下面给出了我要部署的步骤:
"kubectl apply -f projectname.json"
和"kubectl apply -f projectname-svc.json"
。"kubectl delete -f projectname.json"
删除现有部署,而不删除现有服务,然后使用命令{{1}重新部署}。现在,我感到困惑的是,在删除现有部署之后,会有停机时间,直到我再次申请或创建部署。那么,如何避免这种情况呢?因为我实际上不希望停机,所以这就是我开始使用EKS的原因。 还有一件事是,部署过程也有点长。我知道我缺少什么,有人可以正确地指导我吗?
该项目位于.NET Core上,如果有使用Visual Studio进行部署的任何简化方法,请也指导我。
提前谢谢!
答案 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