【问题标题】:AWS EKS Deployment updating the existing deploymentAWS EKS 部署更新现有部署
【发布时间】:2020-02-26 19:08:08
【问题描述】:

我正在使用 EKS AWS 并卡住了,因为当我想在进行一些更改后再次部署相同的代码时,我必须删除以前的部署并在 ECR 中拉取新映像(kubectl删除 abcproj.json),它会破坏旧的 Pod(负载均衡器)并在结果中创建新的 Pod,它总是给我新的外部 IP。我想防止这个问题,但在互联网上找不到合适的解决方案。

提前致谢!

【问题讨论】:

  • 您是否尝试在不删除LoadBalancer 的情况下更新您的Deployment。之后,您可以使用相同的 labelsLoadBalancer 指向您的新应用程序版本
  • @DawidKruk 是的,我做了“Kubectl apply -f abc.json”,它返回给我的消息是“..unchanged”。实际上我知道我遗漏了一些东西,但不知道是什么......实际上我正在寻找类似的东西,如果我在 ECR 存储库上上传新图像,我可以做类似“Kubectl UPDATE -f abc.json”的事情.

标签: amazon-web-services kubernetes amazon-eks


【解决方案1】:

从 Kubernetes 的角度来看,您可以尝试执行以下操作:

  • 创建部署
  • 创建一个LoadBalancer单独服务对象类型,它将指向您的应用程序
  • 测试一下
  • 创建一个新部署来代替旧部署
  • 再测试一次

YAML 为例:

创建部署

下面是hello应用的部署示例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello
spec:
  selector:
    matchLabels:
      app: hello
      version: 1.0.0
  replicas: 1
  template:
    metadata:
      labels:
        app: hello
        version: 1.0.0
    spec:
      containers:
      - name: hello
        image: "gcr.io/google-samples/hello-app:1.0"
        env:
        - name: "PORT"
          value: "50001"

具体查看matchLabels 的部分内容。

创建一个LoadBalancer 的服务对象类型,它将指向您的应用程序

以下是可以访问 hello 应用程序的示例服务:

apiVersion: v1
kind: Service
metadata:
  name: hello-service
spec:
  selector:
    app: hello
  ports:
    - port: 50001
      targetPort: 50001
  type: LoadBalancer

再次具体查看selector。它将通过名为app 的标签匹配豆荚,其值为hello

可以参考官方文档:HERE!

测试一下

同时应用YAML 定义并等待分配ExternalIP。之后检查应用程序是否有效。

旧应用程序版本的网络浏览器输出:

Hello, world!
Version: 1.0.0
Hostname: hello-549db57dfd-g746m

创建一个新部署来代替旧部署

在这一步你可以尝试:

  • 在新版本上运行 kubectl apply -f DEPLOYMENT.yaml 以应用差异
  • 首先尝试删除Deployment 并创建一个新的来代替旧的。

在此步骤中不要删除您现有的LoadBalancer

使用上面的示例Deployment,我们可以通过更改以下内容来模拟图像的版本更改:

        image: "gcr.io/google-samples/hello-app:1.0"

到:

        image: "gcr.io/google-samples/hello-app:2.0"

之后,您可以应用它或重新创建部署。

LoadBalancer 不应该更改 IP 地址,因为它没有被重新创建。

再次测试

新应用程序版本的网络浏览器输出:

Hello, world!
Version: 2.0.0
Hostname: hello-84d554cbdf-rbwgx

如果此解决方案对您有帮助,请告诉我。

【讨论】:

  • 是的,它成功了!非常感谢您,我的错误是我在部署时也删除了服务,或者我只是在更改部署文件后才应用新映像,而不是之前删除旧映像。再次感谢欢呼!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-18
  • 2020-05-10
  • 2021-03-16
  • 1970-01-01
  • 2021-07-18
  • 1970-01-01
  • 2020-08-10
相关资源
最近更新 更多