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.commonAnnotationsEnvsubst
為 true
來啟用這個功能。
例如,以下的應用程式清單會將 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