成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

ArgoCD Image Updater是如何運作的?

云計算 云原生
Argo CD Image Updater 會定期輪詢 Argo CD 中配置的應用程序,并查詢相應的鏡像倉庫以獲取可能的新版本。如果在倉庫中找到新版本的鏡像,并且滿足版本約束,Argo CD 鏡像更新程序將指示 Argo CD 使用新版本的鏡像更新應用程序。

Argo CD Image Updater 是一種自動更新由 Argo CD 管理的 Kubernetes 工作負載的容器鏡像的工具。 該工具可以檢查與 Kubernetes 工作負載一起部署的容器鏡像的新版本,并使用 Argo CD 自動將其更新到允許的最新版本。它通過為 Argo CD 應用程序設置適當的應用程序參數來工作,類似于 argocd app set --helm-set image.tag=v1.0.1,但以完全自動化的方式。

Argo CD Image Updater 會定期輪詢 Argo CD 中配置的應用程序,并查詢相應的鏡像倉庫以獲取可能的新版本。如果在倉庫中找到新版本的鏡像,并且滿足版本約束,Argo CD 鏡像更新程序將指示 Argo CD 使用新版本的鏡像更新應用程序。

根據您的應用程序自動同步策略,Argo CD 將自動部署新的鏡像版本或將應用程序標記為不同步,您可以通過同步應用程序來手動觸發鏡像更新。

它是如何運作的?

Image Updater 程序通過讀取 ArgoCD 應用程序資源中的 annotations 來工作,這些注解指定應自動更新哪些鏡像。它會檢查指定鏡像倉庫中是否有較新的標簽,如果它們與預定義的模式或規則匹配,則使用這些較新的標簽更新應用程序清單。此自動化過程可確保您的應用程序始終運行最新版本的鏡像,遵循 GitOps 的一致性和可追溯性原則。

Image Updater 基本的工作流程如下所示:

  • Annotation 配置:開發人員注解 ArgoCD 應用程序以告訴 Image Updater 要跟蹤哪些鏡像,包括標簽過濾和更新策略的規則。
  • 鏡像倉庫輪詢:Image Updater 定期輪詢配置的鏡像倉庫以查找符合指定條件的新標簽。
  • 自動更新:當找到新的匹配標簽時,Image Updater 會自動更新應用程序的 Kubernetes 清單中的鏡像標簽,并將更改提交回源 Git 存儲庫。
  • 同步變更:ArgoCD 檢測到提交的更改,同步更新的清單,并將它們應用到 Kubernetes 集群。

特征

  • 更新由 Argo CD 管理且由 Helm 或 Kustomize 工具生成的應用程序鏡像
  • 根據不同的更新策略更新應用鏡像
  • semver:根據給定的鏡像約束更新到允許的最高版本
  • latest:更新到最近創建的鏡像標簽
  • name:更新到按字母順序排序的列表中的最后一個標簽
  • digest:更新到可變標簽的最新推送版本
  • 支持廣泛使用的容器鏡像倉庫
  • 通過配置支持私有容器鏡像倉庫
  • 可以將更改寫回 Git
  • 能夠使用匹配器函數過濾鏡像倉庫返回的標簽列表
  • 在 Kubernetes 集群中運行,或者可以從命令行獨立使用
  • 能夠執行應用程序的并行更新

另外需要注意的是使用該工具目前有幾個限制:

  • 想要更新容器鏡像的應用程序必須使用 Argo CD 進行管理。不支持未使用 Argo CD 管理的工作負載。
  • Argo CD 鏡像更新程序只能更新其清單使用 Kustomize 或 Helm 呈現的應用程序的容器鏡像,特別是在 Helm 的情況下,模板需要支持使用參數(即image.tag)。
  • 鏡像拉取密鑰必須存在于 Argo CD Image Updater 運行(或有權訪問)的同一 Kubernetes 集群中。目前無法從其他集群獲取這些機密信息。

安裝

建議在運行 Argo CD 的同一個 Kubernetes 命名空間集群中運行 Argo CD Image Updater,但這不是必需的。事實上,甚至不需要在 Kubernetes 集群中運行 Argo CD Image Updater 或根本不需要訪問任何 Kubernetes 集群。但如果不訪問 Kubernetes,某些功能可能無法使用,所以強烈建議使用第一種安裝方法。

運行鏡像更新程序的最直接方法是將其作為 Kubernetes 工作負載安裝到運行 Argo CD 的命名空間中。這樣就不需要任何配置,也不會對你的工作負載產生任何影響。

kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj-labs/argocd-image-updater/stable/manifests/install.yaml

安裝完成后我們就可以在 Argo CD 中看到 Argo CD Image Updater 組件了:

$ kubectl get pods -n argocd
NAME                                                READY   STATUS    RESTARTS   AGE
argocd-application-controller-0                     1/1     Running   0          21m
argocd-applicationset-controller-587b5c864b-2kt2v   1/1     Running   0          7d4h
argocd-dex-server-6958d7dcf4-66s6s                  1/1     Running   0          7d4h
argocd-image-updater-57b788886d-d4qh5               1/1     Running   0          34s
argocd-notifications-controller-6847bd5c98-wqbjj    1/1     Running   0          7d4h
argocd-redis-6fcf5c8898-c6752                       1/1     Running   0          7d4h
argocd-repo-server-9646985c8-7dmj5                  1/1     Running   0          7d4h
argocd-server-67b76b54d7-hxx6q                      1/1     Running   0          7d4h

現在我們就可以直接去監聽鏡像是否發生了變化,而不需要在 CI 流水線中去手動提交修改資源清單到代碼倉庫了。

配置

要充分利用 ArgoCD 鏡像更新程序,將其配置連接到鏡像倉庫至關重要,尤其是在使用私有倉庫或公共倉庫上的私有存儲庫時。以下是如何配置必要的憑據并了解可用的不同方法。

ArgoCD Image Updater 可以使用以下方法獲取憑據:

  • 從 Kubernetes Secret 中獲取憑據:標準的 Docker Pull Secret 或自定義 Secret,憑證格式為<username>:<password>,比如我們可以用下面的命令來創建一個。
kubectl create -n argocd secret docker-registry dockerhub-secret \
  --docker-username someuser \
  --docker-password s0m3p4ssw0rd \
  --docker-server "https://registry-1.docker.io"

這個 secret 可以被引用為 pullsecret:<namespace>/<secret_name> (pullsecret:argocd/dockerhub-secret)。

  • 通用 Secret:通用 Secret 是包含單個鍵值對的 Secret,鍵值對可以是任何格式,比如我們可以用下面的命令來創建一個:
kubectl create -n argocd secret generic some-secret \
  --from-literal=creds=someuser:s0m3p4ssw0rd

該 secret 可以用 secret:<namespace>/<secret_name>#<field_name> (secret:argocd/some-secret#creds) 的方式引用。

  • 環境變量:將憑證存儲在環境變量中,該變量可以傳遞到 ArgoCD Image Updater pod,我們可以在 pod 的配置中設置:
env:
  - name: DOCKER_HUB_CREDS
    value: "someuser:s0m3p4ssw0rd"

該 secret 可以用 env:<name_of_environment_variable> (env:DOCKER_HUB_CREDS) 的方式引用。

  • Script 腳本:使用以<username>:<password>格式輸出憑據的腳本。
#!/bin/sh
echo "someuser:s0m3p4ssw0rd"

將其引用為 ext:<full_path_to_script>。

我們這里就以 Github 的 Container Registry 為例,來演示下如何使用 ArgoCD Image Updater 來更新鏡像。

首先我們在 Github 個人設置頁面中創建一個個人訪問令牌,如下圖所示:

Token

這個 Token 的權限要包括 write:packages 和 read:packages,這樣我們才能推送和拉取鏡像,創建后會得到一個 Token。

然后我們可以在終端或命令行中,使用 GitHub 用戶名和 GitHub 的個人訪問令牌(PAT)登錄 GitHub Container Registry。

export PAT=<your-token>
echo $PAT | docker login ghcr.io -u <your-github-username> --password-stdin

將替換為個人訪問令牌,將替換為 GitHub 用戶名。

登錄成功后我們可以使用以下命令將 Docker 鏡像標記為 GitHub Container Registry 鏡像:

docker tag <your-image-name>:<tag> ghcr.io/<your-github-username>/<your-image-name>:<tag>

將 <your-image-name>:<tag> 替換為本地 Docker 鏡像名與 tag 名,將 <your-github-username> 替換為 GitHub 用戶名,<tag> 替換想要使用的標簽(例如默認的 latest 標簽)。

然后使用以下命令將 Docker 鏡像推送到 GitHub Container Registry 即可:

docker push ghcr.io/<your-github-username>/<your-image-name>:<tag>

完成以上步驟后,就可以在 GitHub 個人賬號的 的 Packages 部分看到 Docker 鏡像了,但是該鏡像默認為 private 鏡像,Pull 使用時需要先登錄。

github packages

現在回到我們的鏡像更新程序中,使用上面的 Token 來創建一個 Secret:

kubectl create -n argocd secret docker-registry ghcr-secret \
  --docker-username=cnych \
  --docker-password=$PAT \
  --docker-server="https://ghcr.io"

設置憑據后,將它們配置在 ArgoCD 鏡像更新程序的配置中,以通過鏡像倉庫進行身份驗證,我們可以修改鏡像更新程序的配置:

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-image-updater-config
  namespace: argocd
data:
  registries.conf: |
    registries:
      - name: ghcr-hub
        api_url: https://ghcr.io # 鏡像倉庫地址
        credentials: pullsecret:argocd/ghcr-secret # 憑據
        defaultns: library # 默認命名空間
        default: true # 默認倉庫

上面配置中我們指定了 GitHub 鏡像倉庫的憑據為 pullsecret:argocd/ghcr-secret,這樣 ArgoCD Image Updater 在訪問 ghcr.io 時就會使用這個憑據。

接下來我們還需要將 ArgoCD Image Updater 與 Git 集成,這也是重點,這樣 ArgoCD Image Updater 就可以將鏡像更新直接提交回源 Git 倉庫。

我們可以在 ArgoCD 的 Dashboard 中先添加一個 Git 倉庫 https://github.com/cnych/k8s-devops-gitops-demo:

add git repo

接下來我們可以按照正常使用方式創建一個新的 Application 對象,對應的資源清單文件如下所示:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: gitops-demo
  namespace: argocd
spec:
  destination:
    namespace: gitops-demo
    server: https://kubernetes.default.svc
  project: default
  source:
    path: helm # 從 Helm 存儲庫創建應用程序時,chart 必須指定 path
    repoURL: https://github.com/cnych/k8s-devops-gitops-demo.git
    targetRevision: master
    helm:
      parameters:
        - name: replicaCount
          value: "2"
      valueFiles:
        - my-values.yaml
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
      - CreateNamespace=true

直接創建上面的資源清單文件后,ArgoCD 會自動創建一個 Application 資源對象,并且會自動同步到 Git 倉庫中,我們可以在 Git 倉庫中看到對應的資源清單文件:

gitops-demo

如果該應用出現了如下所示的錯誤信息:

Namespace                gitops-demo                            SyncFailed        resource :Namespace is not permitted in project default

則表面當前使用的 project 沒有權限創建 namespace,我們只需要為其添加對應的權限即可:

apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: default
  namespace: argocd
spec:
  clusterResourceWhitelist: # 白名單,表示允許訪問的資源
    - group: "*"
      kind: "*"
  destinations:
    - name: "*"
      namespace: "*"
      server: "*"
  sourceRepos:
    - "*"

我們可以使用 argocd app get 命令來查看 Application 資源對象的狀態:

$ argocd app get argocd/gitops-demo
Name:               argocd/gitops-demo
Project:            default
Server:             https://kubernetes.default.svc
Namespace:          gitops-demo
URL:                https://grpc.argocd.k8s.local/applications/gitops-demo
Source:
- Repo:             https://github.com/cnych/k8s-devops-gitops-demo.git
  Target:           master
  Path:             helm
  Helm Values:      my-values.yaml
SyncWindow:         Sync Allowed
Sync Policy:        Automated (Prune)
Sync Status:        Synced to master (53d91ed)
Health Status:      Progressing

GROUP              KIND        NAMESPACE    NAME                        STATUS     HEALTH       HOOK  MESSAGE
                   Namespace                gitops-demo                 Running    Synced             namespace/gitops-demo created
apps               Deployment  default      gitops-demo-helm-guestbook  Succeeded  Pruned             pruned
                   Service     default      gitops-demo-helm-guestbook  Succeeded  Pruned             pruned
                   Service     gitops-demo  gitops-demo-devops-demo     Synced     Healthy            service/gitops-demo-devops-demo created
apps               Deployment  gitops-demo  gitops-demo-devops-demo     Synced     Progressing        deployment.apps/gitops-demo-devops-demo created
networking.k8s.io  Ingress     gitops-demo  gitops-demo-devops-demo     Synced     Progressing        ingress.networking.k8s.io/gitops-demo-devops-demo created

需要注意要在目標命名空間中添加 Image Pull Secret。

正常我們這個應用就可以運行了:

$ curl http://gitops-demo.k8s.local/
{"msg":"Hello Tekton On GitLab With ArgoCD"}

但是在 Dashboard 中我們可以看到應用雖然已經是 Synced 狀態,但是 APP HEALTH 一直顯示為 Progressing 狀態。

App Health

這是因為 ArgoCD 的健康狀態機制引起的,我們可以在源碼 https://github.com/argoproj/gitops-engine/blob/master/pkg/health/health_ingress.go#L7 中看到健康狀態的檢查邏輯。

func getIngressHealth(obj *unstructured.Unstructured) (*HealthStatus, error) {
 ingresses, _, _ := unstructured.NestedSlice(obj.Object, "status", "loadBalancer", "ingress")
 health := HealthStatus{}
 if len(ingresses) > 0 {
  health.Status = HealthStatusHealthy
 } else {
  health.Status = HealthStatusProgressing
 }
 return &health, nil
}

他需要檢查 Ingress 資源對象的 status.loadBalancer.ingress 字段是否為空,如果為空則表示健康狀態為 Progressing,否則為 Healthy,但實際情況卻是并不是所有的 Ingress 資源對象都會自動生成 status.loadBalancer.ingress 字段,比如我們這里就并沒有生成。

這個時候我們可以通過配置 argocd-cm 的配置資源來修改健康狀態檢查邏輯,添加如下所示的配置:

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-cm
  namespace: argocd
data:
  resource.customizations: |
    networking.k8s.io/Ingress:
      health.lua: |
        hs = {}
        if obj.metadata ~= nil and obj.metadata.creationTimestamp ~= nil then
          hs.status = "Healthy"
          hs.message = "Ingress 已創建"
        else
          hs.status = "Progressing"
          hs.message = "Ingress 正在創建中"
        end
        return hs

上面的配置表示如果 Ingress 資源對象的 metadata.creationTimestamp 字段不為空,則表示健康狀態為 Healthy,否則為 Progressing,更新上面的配置后,我們再次查看應用的健康狀態就會發現已經變成了 Healthy 狀態:

App Health

接下來我們就可以使用 ArgoCD Image Updater 來更新鏡像了,修改上面的 Application 資源清單文件,我們需要添加一些注解來指定需要更新的鏡像規則策略,如下所示:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: gitops-demo
  namespace: argocd
  annotations:
    argocd-image-updater.argoproj.io/image-list: myalias=ghcr.io/cnych/gitops-demo # 指定鏡像倉庫
    argocd-image-updater.argoproj.io/myalias.allow-tags: regexp:^.*$ # 允許所有標簽
    argocd-image-updater.argoproj.io/myalias.pull-secret: pullsecret:argocd/ghcr-secret # 指定憑據
    argocd-image-updater.argoproj.io/myalias.update-strategy: latest # 指定更新策略
    # argocd-image-updater.argoproj.io/myalias.ignore-tags: latest, master # 指定忽略的標簽
    argocd-image-updater.argoproj.io/write-back-method: git # 指定寫回方法
    argocd-image-updater.argoproj.io/git-branch: master # 指定 Git 分支
    argocd-image-updater.argoproj.io/myalias.force-update: "true" # 強制更新
spec:
  destination:
    namespace: gitops-demo
    server: https://kubernetes.default.svc
  project: default
  source:
    path: helm # 從 Helm 存儲庫創建應用程序時,chart 必須指定 path
    repoURL: https://github.com/cnych/k8s-devops-gitops-demo.git
    targetRevision: master
    helm:
      parameters:
        - name: replicaCount
          value: "2"
      valueFiles:
        - my-values.yaml
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
      - CreateNamespace=true

這個新的資源對象中,我們添加了一些注釋,這些注釋用于配置 Argo CD Image Updater。這些配置用于指定自動更新容器鏡像的策略、參數和相關信息。以下是對這些注釋的詳細解釋:

  • argocd-image-updater.argoproj.io/image-list: 這個注解定義了應用中使用的鏡像列表。
  • argocd-image-updater.argoproj.io/allow-tags: 這個注解指定了允許更新的鏡像標簽,可以使用正則表達式的方式。
  • argocd-image-updater.argoproj.io/<alias>.pull-secret: 這個注解指定了用于拉取鏡像的 Secret。
  • argocd-image-updater.argoproj.io/update-strategy: 這個注解定義了鏡像更新策略。這里的值是 latest,表示使用最新的鏡像標簽進行更新,還可以指定的值包括:digest、name、semver。
  • latest: 使用最新的鏡像標簽進行更新。
  • digest: 使用鏡像的 digest 進行更新。
  • name: 使用鏡像的名稱進行更新。
  • semver: 使用 semver 進行更新。
  • argocd-image-updater.argoproj.io/write-back-method: 這個注解定義了更新后的配置寫回方法。git 表示將更新后的配置寫回到 Git 倉庫。
  • git: 將更新后的配置寫回到 Git 倉庫。
  • patch: 使用 kubectl patch 命令更新資源。
  • replace: 使用 kubectl replace 命令更新資源。
  • argocd-image-updater.argoproj.io/git-branch: 這個注解定義了更新后的配置寫回到 Git 倉庫的分支。

現在我們重新更新 Application 資源對象即可。接下來我們只需要重新推送一個新的鏡像到 GitHub Container Registry 即可自動觸發 ArgoCD Image Updater 更新鏡像。

我們更新下倉庫中的 main.go 文件:

修改代碼

現在我們重新構建一個新的鏡像并推送到 GitHub Container Registry:

docker build --platform linux/amd64 -t ghcr.io/cnych/gitops-demo:v0.1.1 .
docker push ghcr.io/cnych/gitops-demo:v0.1.1

推送新的鏡像后,然后 Argo CD Image Updater 將會每 2 分鐘從鏡像倉庫去檢索鏡像版本變化,一旦發現有新的鏡像版本,它將自動使用新版本來更新集群內工作負載的鏡像,并將鏡像版本回寫到 Git 倉庫中去,我們可以去查看 Argo CD Image Updater 的日志變化:

$ kubectl logs -f argocd-image-updater-57b788886d-d4qh5 -n argocd
time="2024-09-27T06:51:32Z" level=info msg="argocd-image-updater v0.14.0+af844fe starting [loglevel:INFO, interval:2m0s, healthport:8080]"
time="2024-09-27T06:51:32Z" level=warning msg="commit message template at /app/config/commit.template does not exist, using default"
time="2024-09-27T08:35:39Z" level=warning msg="\"latest\" strategy has been renamed to \"newest-build\". Please switch to the new convention as support for the old naming convention will be removed in future versions." image_alias=myalias image_name=ghcr.io/cnych/gitops-demo registry_url=ghcr.io
time="2024-09-27T08:35:40Z" level=info msg="Processing results: applicatinotallow=1 images_cnotallow=1 images_skipped=0 images_updated=0 errors=0"
xxxxxxxxxxxxxxtime="2024-09-27T08:37:40Z" level=info msg="Starting image update cycle, considering 1 annotated application(s) for update"
time="2024-09-27T08:37:40Z" level=warning msg="\"latest\" strategy has been renamed to \"newest-build\". Please switch to the new convention as support for the old naming convention will be removed in future versions." image_alias=myalias image_name=ghcr.io/cnych/gitops-demo registry_url=ghcr.io
time="2024-09-27T08:37:44Z" level=info msg="Setting new image to ghcr.io/cnych/gitops-demo:v0.1.1" alias=myalias applicatinotallow=gitops-demo image_name=cnych/gitops-demo image_tag=latest registry=ghcr.io
time="2024-09-27T08:37:44Z" level=info msg="Successfully updated image 'ghcr.io/cnych/gitops-demo:latest' to 'ghcr.io/cnych/gitops-demo:v0.1.1', but pending spec update (dry run=false)" alias=myalias applicatinotallow=gitops-demo image_name=cnych/gitops-demo image_tag=latest registry=ghcr.io
time="2024-09-27T08:37:44Z" level=info msg="Committing 1 parameter update(s) for application gitops-demo" applicatinotallow=gitops-demo
time="2024-09-27T08:37:44Z" level=info msg="Starting configmap/secret informers"
time="2024-09-27T08:37:44Z" level=info msg="Configmap/secret informer synced"
time="2024-09-27T08:37:44Z" level=info msg="Initializing https://github.com/cnych/k8s-devops-gitops-demo.git to /tmp/git-gitops-demo1873820104"
time="2024-09-27T08:37:44Z" level=info msg="secrets informer cancelled"
time="2024-09-27T08:37:44Z" level=info msg="configmap informer cancelled"
time="2024-09-27T08:37:44Z" level=info msg="git fetch origin --tags --force --prune" dir=/tmp/git-gitops-demo1873820104 execID=acebc
time="2024-09-27T08:37:46Z" level=info msg=Trace args="[git fetch origin --tags --force --prune]" dir=/tmp/git-gitops-demo1873820104 operation_name="exec git" time_ms=1640.146246
time="2024-09-27T08:37:46Z" level=info msg="git config user.name argocd-image-updater" dir=/tmp/git-gitops-demo1873820104 execID=7ec2d
time="2024-09-27T08:37:46Z" level=info msg=Trace args="[git config user.name argocd-image-updater]" dir=/tmp/git-gitops-demo1873820104 operation_name="exec git" time_ms=1.5687190000000002
time="2024-09-27T08:37:46Z" level=info msg="git config user.email noreply@argoproj.io" dir=/tmp/git-gitops-demo1873820104 execID=6e796
time="2024-09-27T08:37:46Z" level=info msg=Trace args="[git config user.email noreply@argoproj.io]" dir=/tmp/git-gitops-demo1873820104 operation_name="exec git" time_ms=1.688394
time="2024-09-27T08:37:46Z" level=info msg="git checkout --force master" dir=/tmp/git-gitops-demo1873820104 execID=403bb
time="2024-09-27T08:37:46Z" level=info msg=Trace args="[git checkout --force master]" dir=/tmp/git-gitops-demo1873820104 operation_name="exec git" time_ms=4.522311
time="2024-09-27T08:37:46Z" level=info msg="git clean -ffdx" dir=/tmp/git-gitops-demo1873820104 execID=b3f03
time="2024-09-27T08:37:46Z" level=info msg=Trace args="[git clean -ffdx]" dir=/tmp/git-gitops-demo1873820104 operation_name="exec git" time_ms=1.429556
time="2024-09-27T08:37:46Z" level=info msg="git -c gpg.format=openpgp commit -a -F /tmp/image-updater-commit-msg441967746" dir=/tmp/git-gitops-demo1873820104 execID=0efc6
time="2024-09-27T08:37:46Z" level=info msg=Trace args="[git -c gpg.format=openpgp commit -a -F /tmp/image-updater-commit-msg441967746]" dir=/tmp/git-gitops-demo1873820104 operation_name="exec git" time_ms=5.239213
time="2024-09-27T08:37:46Z" level=info msg="git push origin master" dir=/tmp/git-gitops-demo1873820104 execID=fcd1f
time="2024-09-27T08:37:47Z" level=info msg=Trace args="[git push origin master]" dir=/tmp/git-gitops-demo1873820104 operation_name="exec git" time_ms=1934.14529
time="2024-09-27T08:37:47Z" level=info msg="Successfully updated the live application spec" applicatinotallow=gitops-demo
time="2024-09-27T08:37:47Z" level=info msg="Processing results: applicatinotallow=1 images_cnotallow=1 images_skipped=0 images_updated=1 errors=0"

然后在 Git 倉庫中我們也可以看到有一條新的 commit 提交記錄,可以看到在回寫時,ArgoCD Image Updater 并不會直接修改倉庫的 values.yaml 文件,而是會創建一個專門用于覆蓋 Helm Chart values.yaml 的 .argocd-source-devops-demo.yaml 文件。

git commit

自動提交變更后,Argo CD 就會自動同步部署應用了。

app sync

當然現在訪問應用結果就是我們更改后的內容了:

$ curl http://gitops-demo.k8s.local/
{"msg":"Hello ArgoCD With Image Updater"}

另外我們可以注意到每次 Git 提交都與作者的姓名和電子郵件地址相關聯。如果未配置,Argo CD 鏡像更新程序執行的提交將使用 argocd-image-updater <noreply@argoproj.io> 作為作者。您可以使用 --git-commit-user 和 --git-commit-email 命令行開關覆蓋作者,或在 argocd-image-updater-config ConfigMap 中設置 git.user 和 git.email 即可。

同樣我們可以將 Argo CD Image Updater 使用的默認提交消息更改為適合你的方式。可以創建一個簡單的模板(使用 Golang Template),并通過將 argocd-image-updater-config ConfigMap 中的密鑰 git.commit-message-template 設置為模板的內容來使其可用,例如:

data:
  git.commit-message-template: |
    build: automatic update of {{ .AppName }}

    {{ range .AppChanges -}}
    updates image {{ .Image }} tag '{{ .OldTag }}' to '{{ .NewTag }}'
    {{ end -}}

模板中提供了兩個頂級變量:

  • .AppName 是正在更新的應用程序的名稱。
  • .AppChanges 是更新所執行的更改的列表。此列表中的每個條目都是一個結構體,為每個更改提供以下信息:
  • .Image 保存已更新圖像的全名。
  • .OldTag 保存更新之前的標簽名稱或 SHA 摘要。
  • .NewTag 保存更新為的標簽名稱或 SHA 摘要。
責任編輯:姜華 來源: k8s技術圈
相關推薦

2021-02-15 15:36:04

采礦加密貨幣區塊鏈

2021-12-17 22:52:44

物聯網電信技術

2014-11-10 09:29:13

Google

2022-06-07 14:30:40

區塊鏈比特幣以太坊

2020-02-12 15:08:41

KVM內部運作

2010-08-16 14:41:49

開源社區Ubuntu

2022-05-24 17:00:41

區塊鏈IT比特幣

2010-08-30 09:05:45

2024-04-08 14:29:45

AI工廠數據中心

2010-08-23 16:28:24

開源社區DebianUbuntu

2017-06-23 15:45:09

AndroidThread

2021-05-28 17:24:32

人工智能AI深度學習

2014-09-17 11:45:20

iOS編程App運作

2022-04-26 12:45:52

TikTok機器學習人工智能

2017-10-30 15:26:54

數據中心超融合云計算

2012-08-13 09:39:57

虛擬化

2023-05-31 07:32:37

2022-04-28 08:00:00

TikTok人工智能架構

2023-10-09 16:22:17

2020-02-15 15:33:55

Python如何運作
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99久久精品免费看国产小宝寻花 | 日韩三 | 国产精品jizz在线观看老狼 | 欧美一级毛片免费观看 | 成人免费视屏 | 国产这里只有精品 | 波多野结衣在线观看一区二区三区 | 亚洲一区中文字幕 | 亚洲视频在线观看一区二区三区 | 狠狠做六月爱婷婷综合aⅴ 国产精品视频网 | 久久久久99 | 91视频在线| 黄色一级免费 | 人人做人人澡人人爽欧美 | 可以在线观看av的网站 | 国产aⅴ | 久久久国产一区二区三区 | 精品国产乱码久久久久久丨区2区 | 永久网站 | 在线播放亚洲 | 国产精品视频久久久久久 | 欧美一区二区三区在线看 | 精品久久久久久久久久久 | 狠狠色狠狠色综合系列 | 一区二区三区国产 | 亚洲在线久久 | 国产欧美一区二区三区国产幕精品 | 播放一级黄色片 | 日日干日日 | av一区在线观看 | 国产电影一区二区三区爱妃记 | 国产免费一级一级 | 欧美福利精品 | 中文字幕视频在线观看 | 久久久久国产精品一区二区 | 99精品一区 | 久久成人精品一区二区三区 | 精品国产乱码久久久久久蜜柚 | 国产成人精品免费视频大全最热 | 国产精品一区二区久久久久 | 91精品国产欧美一区二区 |