从 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
如果此解决方案对您有帮助,请告诉我。