AWS EKS 部署更新现有部署

AWS EKS Deployment updating the existing deployment

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

提前致谢!

从 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.

匹配 pods

可以参考官方文档: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 地址,因为它不会被重新创建。

再次测试

具有新应用程序版本的 Web 浏览器的输出:

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

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