<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          K8s藍(lán)綠部署:優(yōu)雅應(yīng)對(duì)應(yīng)用程序更新挑戰(zhàn)

          共 8625字,需瀏覽 18分鐘

           ·

          2024-04-11 11:32




          Kubernetes 是一個(gè)開源容器編排系統(tǒng),可簡(jiǎn)化軟件部署、擴(kuò)展和管理。藍(lán)綠部署是一種部署模式,通過同時(shí)運(yùn)行兩個(gè)相同的生產(chǎn)環(huán)境來最大限度地減少停機(jī)時(shí)間。通過創(chuàng)建藍(lán)色和綠色部署,設(shè)置服務(wù)和路由規(guī)則,以及執(zhí)行藍(lán)綠部署來更新應(yīng)用程序版本,可以輕松管理和更新應(yīng)用程序。


          df2d39eb6e5583c955874a00bb10a869.webp
          Kubernetes 是一個(gè)開源容器編排系統(tǒng),可簡(jiǎn)化軟件部署、擴(kuò)展和管理。它最初由 Google 設(shè)計(jì),現(xiàn)在由云原生計(jì)算基金會(huì)監(jiān)管。

          藍(lán)綠部署概述:

          藍(lán)綠部署是一種部署模式,通過運(yùn)行兩個(gè)相同的生產(chǎn)環(huán)境(藍(lán)色和綠色)來最大限度地減少停機(jī)時(shí)間。一次只有一個(gè)環(huán)境運(yùn)行,確保更改既向前又向后兼容。該方法包括設(shè)置并行基礎(chǔ)設(shè)施、將新版本部署到新環(huán)境、驗(yàn)證,然后將所有流量切換到綠色環(huán)境。確認(rèn)后,舊的基礎(chǔ)設(shè)施(藍(lán)色)可以移除或停止。

          先決條件:
          • Kubernetes集群
          • kubectl 命令行工具
          • 待部署應(yīng)用程序的 Docker 鏡像
          分步指南: 第1步:創(chuàng)建命名空間
                    
                    kubectl create namespace blue-green-deployment
                  
          第2步:創(chuàng)建部署

          創(chuàng)建藍(lán)色部署清單 (blue-deployment.yaml):

                    
                    # blue-deployment.yaml
          apiVersion: apps/v1
          kind: Deployment
          metadata:
            name: demoapp-blue
            labels:
              app: demoapp
              env: blue
          spec:
            replicas: 3
            selector:
              matchLabels:
                app: demoapp
                env: blue
            template:
              metadata:
                labels:
                  app: demoapp
                  env: blue
              spec:
                containers:
                - name: demo
                  image: demoapp:v1.0
                  ports:
                  - containerPort: 80

          應(yīng)用部署:

                    
                    kubectl apply -f blue-deployment.yaml -n blue-green-deployment

          創(chuàng)建類似的綠色部署清單 (green-deployment.yaml) 并應(yīng)用它。

          第3步:創(chuàng)建服務(wù)

          創(chuàng)建服務(wù)清單(service.yaml):selector: app: demoapp

                    
                    
          # service.yaml
          apiVersion: v1
          kind: Service
          metadata:
            name: demoapp-service
          spec:
            selector:
              app: demoapp
            ports:
            - name: http
              port: 80
              targetPort: 80
            type: LoadBalancer

          申請(qǐng)服務(wù):

                    
                    kubectl apply -f service.yaml -n blue-green-deployment

          獲取服務(wù)的外部IP地址:

                    
                    kubectl get service demoapp-service -n blue-green-deployment
                  
          第4步:路由規(guī)則

          在服務(wù)清單 (service.yaml) 中定義路由規(guī)則,將流量路由到藍(lán)色或綠色部署:

                    
                    # service.yaml
          apiVersion: v1
          kind: Service
          metadata:
            name: demoapp-service
          spec:
            selector:
              app: demoapp
            ports:
            - name: http
              port: 80
              targetPort: 80
            type: LoadBalancer
            sessionAffinity: ClientIP
            externalTrafficPolicy: Local
            loadBalancerSourceRanges:
            - 0.0.0.0/0

          應(yīng)用更新后的服務(wù):

                    
                    kubectl apply -f service.yaml -n blue-green-deployment
                  
          第5步:基于主機(jī)和路徑的路由

          擴(kuò)展服務(wù)清單 (service.yaml) 以包含基于主機(jī)和路徑的路由規(guī)則:

                    
                    # service.yaml
          apiVersion: v1
          kind: Service
          metadata:
            name: demoapp-service
          spec:
            selector:
              app: demoapp
            ports:
            - name: http
              port: 80
              targetPort: 80
            type: LoadBalancer
            sessionAffinity: ClientIP
            externalTrafficPolicy: Local
            loadBalancerSourceRanges:
            - 0.0.0.0/0
            externalIPs:
            - <external_ip_address>
          ---
          apiVersion: networking.k8s.io/v1
          kind: Ingress
          metadata:
            name: demoapp-ingress
          spec:
            rules:
            - host: "demoapp.example.com"
              http:
                paths:
                - path: /blue
                  backend:
                    serviceName: demoapp-blue
                    servicePort: 80
                - path: /green
                  backend:
                    serviceName: demoapp-green
                    servicePort: 80

          應(yīng)用更新后的服務(wù):

                    
                    kubectl apply -f service.yaml -n blue-green-deployment
                  
          第6步:執(zhí)行藍(lán)綠部署

          在藍(lán)色和綠色部署同時(shí)運(yùn)行的情況下,將流量從藍(lán)色部署路由到綠色部署。

          第7步:更新綠色部署

          使用新版本的應(yīng)用程序更新綠色部署 (green-deployment-v2.yaml):

                    
                    # green-deployment-v2.yaml
          apiVersion: apps/v1
          kind: Deployment
          metadata:
            name: demoapp-green
            labels:
              app: demoapp
              env: green
          spec:
            replicas: 3
            selector:
              matchLabels:
                app: demoapp
                env: green
            template:
              metadata:
                labels:
                  app: demoapp
                  env: green
              spec:
                containers:
                - name: myapp
                  image: myapp:v2.0
                  ports:
                  - containerPort: 80

          應(yīng)用更新的綠色部署:

                    
                    kubectl apply -f green-deployment-v2.yaml -n blue-green-deployment
                  
          第8步:更新服務(wù)

          更新服務(wù)以將流量路由到綠色部署 (service.yaml)。

                    
                    # service.yaml
          apiVersion: v1
          kind: Service
          metadata:
            name: demoapp-service
          spec:
            selector:
              app: demoapp
              env: green
            ports:
            - name: http
              port: 80
              targetPort: 80
            type: LoadBalancer
            sessionAffinity: ClientIP
            externalTrafficPolicy: Local
            loadBalancerSourceRanges:
            - 0.0.0.0/0
            externalIPs:
            - <external_ip_address>
          ---
          apiVersion: networking.k8s.io/v1
          kind: Ingress
          metadata:
            name: demoapp-ingress
          spec:
            rules:
            - host: "demoapp.example.com"
              http:
                paths:
                - path: /blue
                  backend:
                    serviceName: demoapp-blue
                    servicePort: 80
                - path: /green
                  backend:
                    serviceName: demoapp-green
                    servicePort: 80

          應(yīng)用更新后的服務(wù):

                    
                    kubectl apply -f service.yaml -n blue-green-deployment
                  
          第9步:驗(yàn)證部署成功

          通過使用外部 IP 地址在 Web 瀏覽器中訪問應(yīng)用程序來驗(yàn)證部署是否成功。

          第10步:回滾(如果需要)

          如果出現(xiàn)問題,請(qǐng)通過更新服務(wù)清單中的標(biāo)簽選擇器以選擇藍(lán)色部署并重新應(yīng)用服務(wù)清單來回滾到以前的版本。

                    
                    # service.yaml
          apiVersion: v1
          kind: Service
          metadata:
            name: demoapp-service
          spec:
            selector:
              app: demoapp
              env: blue
            ports:
            - name: http
              port: 80
              targetPort: 80
            type: LoadBalancer
            sessionAffinity: ClientIP
            externalTrafficPolicy: Local



          本文轉(zhuǎn)載自:「DevOps云學(xué)堂」,原文:https://reurl.cc/g4og4X,版權(quán)歸原作者所有。

          - END -



          推薦閱讀:

          Meetup武漢站議題揭曉~趁現(xiàn)在!速速報(bào)名...

          Go語言進(jìn)入Tiobe指數(shù)前10名

          2024年的Rust與Go

          「GoCN酷Go推薦」我用go寫了魔獸世界登錄器?

          Go區(qū)不大,創(chuàng)造神話,科目三殺進(jìn)來了

          Go 1.22新特性前瞻


          想要了解Go更多內(nèi)容,歡迎掃描下方??關(guān)注公眾號(hào), 回復(fù)關(guān)鍵詞 [實(shí)戰(zhàn)群]   ,就有機(jī)會(huì)進(jìn)群和我們進(jìn)行交流



          分享、在看與點(diǎn)贊Go 


          瀏覽 45
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  91av免费看 | 黄色免费在线观看视频网站 | 午夜xxx | 国产高清免费 | 欧美视频一区 |