Administrator
Administrator
发布于 2025-07-08 / 21 阅读
0
0

service蓝绿部署切换标签

Kubernetes 不支持内置的蓝绿部署。目前最好的方式是创建新的 deployment,然后更新应用程序的service 以指向新的 deployment 部署的应用

部署绿色版本环境(充当第一版代码做的镜像运行的Pod)

[root@k8s-master1-60 deployment]# cat tomcat-lv.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-lv
  namespace: default
  labels:
    app: tomcat-lv
spec:
  replicas: 1
  selector:
    matchLabels:
      app: tomcat-lv
  template:
    metadata:
      labels:
        app: tomcat-lv
    spec:
      containers:
      - image: janakiramm/myapp:v2
        imagePullPolicy: IfNotPresent
        name: tomcat-lv
        ports:
        - containerPort: 80
          protocol: TCP
        livenessProbe:
          failureThreshold: 3
          successThreshold: 1
          timeoutSeconds: 1
          periodSeconds: 5
          tcpSocket:
            port: 80
        readinessProbe:
          failureThreshold: 3
          successThreshold: 1
          timeoutSeconds: 1
          periodSeconds: 5 
          tcpSocket:
            port: 80
        resources:
          limits:
            cpu: '2'
            memory: 4Gi
          requests:
            cpu: '1'
            memory: 2Gi
---
apiVersion: v1
kind: Service
metadata:
  name: tomcat-lv
  namespace: default
spec:
  selector:
    app: tomcat-lv
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  type: NodePort

#执行部署
[root@k8s-master1-60 deployment]# kubectl apply -f tomcat-lv.yaml

#查看创建的pod标签
[root@k8s-master1-60 deployment]# kubectl get pod --show-labels
NAME                          READY   STATUS    RESTARTS   AGE     LABELS
tomcat-lv-55f8644f5-j5sjc     1/1     Running   0          5h58m   app=tomcat-lv,pod-template-hash=55f8644f5

#查看service信息
[root@k8s-master1-60 deployment]# kubectl get svc tomcat-lv
NAME        TYPE       CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
tomcat-lv   NodePort   10.99.3.149   <none>        80:31232/TCP   30s

#浏览器访问绿板本:http://集群节点IP:31232 显示如下

部署蓝版本环境(充当第二版代码做的镜像运行的Pod)

[root@k8s-master1-60 deployment]# cat tomcat-lan.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-lan
  namespace: default
  labels:
    app: tomcat-lan
spec:
  replicas: 1
  selector:
    matchLabels:
      app: tomcat-lan
  template:
    metadata:
      labels:
        app: tomcat-lan
    spec:
      containers:
      - image: janakiramm/myapp:v1
        imagePullPolicy: IfNotPresent
        name: tomcat-lan
        ports:
        - containerPort: 80
          protocol: TCP
        livenessProbe:
          failureThreshold: 3
          successThreshold: 1
          timeoutSeconds: 1
          periodSeconds: 5
          tcpSocket:
            port: 80
        readinessProbe:
          failureThreshold: 3
          successThreshold: 1
          timeoutSeconds: 1
          periodSeconds: 5 
          tcpSocket:
            port: 80
        resources:
          limits:
            cpu: '2'
            memory: 4Gi
          requests:
            cpu: '1'
            memory: 2Gi
---
apiVersion: v1
kind: Service
metadata:
  name: tomcat-lan
  namespace: default
spec:
  selector:
    app: tomcat-lan
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  type: NodePort

#执行部署
[root@k8s-master1-60 deployment]# kubectl apply -f tomcat-lan.yaml
[root@k8s-master1-60 deployment]# kubectl get pod --show-labels
NAME                          READY   STATUS    RESTARTS   AGE    LABELS
tomcat-lan-694444f9d4-2xnt7   1/1     Running   0          6h4m   app=tomcat-lan,pod-template-hash=694444f9d4
tomcat-lv-55f8644f5-j5sjc     1/1     Running   0          6h     app=tomcat-lv,pod-template-hash=55f8644f5
#可以看到两个版本都存在了

#查看service信息
[root@k8s-master1-60 deployment]# kubectl get svc tomcat-lan
NAME         TYPE       CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
tomcat-lan   NodePort   10.99.77.85   <none>        80:30557/TCP   6h4m

#浏览器访问蓝板本 http://集群节点IP:30557 显示如下

切换tomcat-lv的service的选择标签切换到蓝版本的标签

[root@k8s-master1-60 deployment]# kubectl set selector service tomcat-lv app=tomcat-lan
#访问测试 http://集群节点IP:31232 显示如下

原先绿色版本已经正式切换蓝色版本的Pod上面


评论