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
如果此解决方案对您有帮助,请告诉我。
我在 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
.
可以参考官方文档: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
如果此解决方案对您有帮助,请告诉我。