天天看點

使用容器鏡像服務觸發器自動更新容器服務應用

阿裡雲鏡像服務為每個倉庫提供了觸發器的功能,幫助使用者在鏡像建構成功後進行消息的推送,實作持續內建的後續流程。本文将示範如何在鏡像建構成功後,自動觸發容器服務上應用中心拉取新的鏡像,并進行重新部署。

本示例的示範内容如下所示:

1)建立編排模闆,模闆中應用容器鏡像版本為liusheng-registry.cn-beijing.cr.aliyuncs.com/liusheng/rollouts-demo:blue

2)使用應用中心建立應用并将其部署至容器叢集,通路目前應用

3)在應用中心中建立觸發器并記錄觸發器URL

4)在容器鏡像服務中配置觸發器

5)向容器鏡像服務推送新版本容器鏡像,liusheng-registry.cn-beijing.cr.aliyuncs.com/liusheng/rollouts-demo:red

6)檢視容器叢集中應用版本是否已經自動更新為liusheng-registry.cn-beijing.cr.aliyuncs.com/liusheng/rollouts-demo:red

1)建立編排模闆

使用容器鏡像服務觸發器自動更新容器服務應用
本示例中應用編排模闆内容如下所示:

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: demo
  name: demo
spec:
  minReadySeconds: 5
  progressDeadlineSeconds: 60
  revisionHistoryLimit: 5
  selector:
    matchLabels:
      app: demo
  strategy:
    rollingUpdate:
      maxUnavailable: 1
    type: RollingUpdate
  template:
    metadata:
      annotations:
        prometheus.io/port: "9797"
        prometheus.io/scrape: "true"
      creationTimestamp: null
      labels:
        app: demo
    spec:
      containers:
      - image: liusheng-registry.cn-beijing.cr.aliyuncs.com/liusheng/rollouts-demo:blue
        imagePullPolicy: IfNotPresent
        name: demo
        ports:
        - containerPort: 8080
          name: http
          protocol: TCP
        readinessProbe:
          initialDelaySeconds: 5
          tcpSocket:
            port: 8080
          timeoutSeconds: 5
        resources:
          limits:
            cpu: "2"
            memory: 512Mi
          requests:
            cpu: 100m
            memory: 64Mi
status: {}
---
apiVersion: v1
kind: Service
metadata:
  name: demo-svc
spec:
  selector:
    app: demo
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: demo
  labels:
    app: demo
spec:
  rules:
    - host: app.demo.example.com
      http:
        paths:
          - backend:
              serviceName: demo-svc
              servicePort: 80
---      

2) 建立示例應用

應用中心(公測)-> 建立應用:

使用容器鏡像服務觸發器自動更新容器服務應用

應用來源選擇YAML模闆,點選下一步:

使用容器鏡像服務觸發器自動更新容器服務應用

輸入應用名稱,選擇步驟1)中建立的模闆并點選下一步:

使用容器鏡像服務觸發器自動更新容器服務應用

選擇需要釋出應用到哪個目标叢集和命名空間,點選開始釋出:

使用容器鏡像服務觸發器自動更新容器服務應用

釋出确認:

使用容器鏡像服務觸發器自動更新容器服務應用

應用釋出完畢後,在應用詳情頁面可以看到應用資源拓撲圖和子資源運作狀态,如下所示:

使用容器鏡像服務觸發器自動更新容器服務應用

通過Ingress資源通路應用如下如所示,應用版本為blue:

使用容器鏡像服務觸發器自動更新容器服務應用

3)應用中心内未應用生成觸發器

進入應用詳情頁面->點選觸發器按鈕->點選建立生成觸發器

使用容器鏡像服務觸發器自動更新容器服務應用
使用容器鏡像服務觸發器自動更新容器服務應用

複制并儲存觸發器位址,請妥善保管觸發器URL,以免洩露。

4)liusheng-registry.cn-beijing.cr.aliyuncs.com/liusheng/rollouts-demo:blue鏡像所在的鏡像倉庫中建立觸發器,本示例中觸發器名稱為appcenter_trigger_demo,觸發器URL為步驟3)中生成的觸發器位址,觸發方式為全部觸發,容器鏡像服務觸發器的使用說明參見

https://help.aliyun.com/document_detail/60949.html
使用容器鏡像服務觸發器自動更新容器服務應用

5) 向liusheng-registry.cn-beijing.cr.aliyuncs.com/liusheng/rollouts-demo:blue所在鏡像倉庫推送一個新鏡像 liusheng-registry.cn-beijing.cr.aliyuncs.com/liusheng/rollouts-demo:green

docker pull registry.cn-hangzhou.aliyuncs.com/acs/rollouts-demo:green
docker tag registry.cn-hangzhou.aliyuncs.com/acs/rollouts-demo:green liusheng-registry.cn-beijing.cr.aliyuncs.com/liusheng/rollouts-demo:green
docker push liusheng-registry.cn-beijing.cr.aliyuncs.com/liusheng/rollouts-demo:green      

6) 檢視容器鏡像服務觸發器的通路記錄,觸發器執行如有異常,可以在詳情資訊Response Body中檢視具體原因:

使用容器鏡像服務觸發器自動更新容器服務應用
使用容器鏡像服務觸發器自動更新容器服務應用

7)檢視編排模闆版本是否更新且應用鏡像是否更新為liusheng-registry.cn-beijing.cr.aliyuncs.com/liusheng/rollouts-demo:green

使用容器鏡像服務觸發器自動更新容器服務應用

8)驗證運作于實際環境中的應用版本是否已更新為green

使用容器鏡像服務觸發器自動更新容器服務應用