Kustomize in ArgoCD

Jeff Yen
6 min readAug 10, 2024

--

123

現在主流管理Kubernetes的架構的方式,Kustomize就是其中一種用於管理 Kubernetes 應用程序配置的工具。它允許用戶以聲明式的方式自定義 Kubernetes 資源,而無需編輯原始的 YAML 文件。

我們直接拿官網的範例

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: kustomize-example
spec:
project: default
source:
path: examples/helloWorld
repoURL: 'https://github.com/kubernetes-sigs/kustomize'
targetRevision: HEAD
destination:
namespace: default
server: 'https://kubernetes.default.svc'

Patches

Patches是一種在 Argo CD 應用程式中使用內聯配置來自訂資源的方法。patches 遵循與相應的 Kustomization 相同的邏輯。任何針對現有 Kustomization 文件的修補程式都將被合併。

這個 Kustomize 範例從 argoproj/argocd-example-apps 儲存庫的 /kustomize-guestbook 資料夾中獲取清單,並修補 Deployment 使容器使用 443 埠。

儲存庫

有附上Patches的argocd application

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: kustomize-inline-guestbook
namespace: argocd
finalizers:
- resources-finalizer.argocd.argoproj.io
spec:
destination:
namespace: test1
server: https://kubernetes.default.svc
project: default
source:
path: kustomize-guestbook
repoURL: https://github.com/argoproj/argocd-example-apps.git
targetRevision: master
kustomize:
patches:
- target:
kind: Deployment
name: guestbook-ui
patch: |-
- op: replace
path: /spec/template/spec/containers/0/ports/0/containerPort
value: 443

argocd上實際的狀態

Custom Kustomize versions

Argo CD 支援同時使用多個 Kustomize 版本,並且可以為每個應用程式指定所需的版本。要添加其他版本,請確保所需的版本已被打包,然後使用 argocd-cm ConfigMap 中的 kustomize.path.<version> 字段來註冊這些打包的其他版本。

先添加comfigmap

apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cm
namespace: argocd
labels:
app.kubernetes.io/name: argocd-cm
app.kubernetes.io/part-of: argocd
data:
kustomize.path.v3.5.1: /custom-tools/kustomize_3_5_1
kustomize.path.v3.5.4: /custom-tools/kustomize_3_5_4

然後在kustomize下面添加version就可以使用了

Build Environment

Kustomize 應用程式可以訪問標準的構建環境,這可以與配置管理插件結合使用來更改渲染的清單。

你可以在 Argo CD 的應用程式清單中使用這些構建環境變數。通過在應用程式清單中設置 .spec.source.kustomize.commonAnnotationsEnvsubsttrue 來啟用這個功能。

例如,以下的應用程式清單會將 app-source 註解設置為應用程式的名稱:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: guestbook-app
namespace: argocd
spec:
project: default
destination:
namespace: demo
server: https://kubernetes.default.svc
source:
path: kustomize-guestbook
repoURL: https://github.com/argoproj/argocd-example-apps
targetRevision: HEAD
kustomize:
commonAnnotationsEnvsubst: true
commonAnnotations:
app-source: ${ARGOCD_APP_NAME}
syncPolicy:
syncOptions:
- CreateNamespace=true

實際上我們就的多了一個app-source: guestbook-app的annotations

--

--

Jeff Yen
Jeff Yen

No responses yet