使用 Cluster API 和 ArgoCD 建立管理 Kubernetes 叢集

語言: CN / TW / HK

本文我們將學習如何使用 Kubernetes Cluster APIArgoCD 建立和管理多個 Kubernetes 叢集。我們將使用 Kind 建立一個本地叢集,在該叢集上,我們將配置其他 Kubernetes 叢集的建立過程。為了自動執行該過程,我們將使用 ArgoCD,我們可以從單個 Git 儲存庫處理整個過程。

介紹

你聽說過一個名為 Kubernetes Cluster API (https://cluster-api.sigs.k8s.io/) 的專案嗎?它提供宣告式 API 和工具來簡化配置、升級和管理多個 Kubernetes 叢集。我們會先建立一個管理其他叢集生命週期的 Kubernetes 叢集,在這個叢集上,我們將安裝 Cluster API。然後我們就可以通過建立 Cluster API 物件來定義新的工作負載叢集,看起來是不是非常簡單?

Cluster API 提供了一組擴充套件 Kubernetes API 的 CRD,它們中的每一個都代表 Kubernetes 叢集安裝的定製,這裡我們不會詳細介紹它,如果你對此感興趣,可以在其官方文件 https://cluster-api.sigs.k8s.io/user/concepts.html 瞭解更多資訊。對我們來說重要的是,它提供了一個 CLI 工具來處理 Cluster API 管理叢集的生命週期。此外,它還允許在包括 AWS、GCP 或 Azure 在內的多個基礎設施上建立叢集,但是今天我們將在 Docker 和 Kind 上本地執行整個基礎架構, Cluster API 也是支援的,因為它支援 Docker。

我們將使用 Cluster API CLI 來初始化管理叢集並生成對應的 YAML 模板,整個過程將由安裝在管理叢集上的 ArgoCD 進行管理。ArgoCD 非常適合我們的場景,因為它支援多叢集,安裝在單個叢集上的例項可以管理許多其他能夠連線的叢集。

最後,今天我們使用的最後一個工具是 Kind,使用它我們可以使用 Docker 容器節點在同一臺機器上執行多個 Kubernetes 叢集,讓我們先看一下上面描述的解決方案的架構。

上面的架構圖可以看出整個基礎設施在 Docker 上執行,我們在管理叢集上安裝 Kubernetes Cluster API 和 ArgoCD,然後,使用這兩個工具,使用 Kind 建立新的叢集。之後,我們將把一些 Kubernetes 物件應用到工作負載叢集(c1、c2)中,例如 NamespaceResourceQuotaRoleBinding 。當然,整個過程由 ArgoCD 例項管理,配置儲存在 Git 儲存庫中。

使用 Kind 和 Cluster API 建立管理叢集

第一步,我們要在 Kind 上建立一個管理叢集,我們需要在本地機器上安裝 Docker、kubectl 和 kind。因為我們將使用 Docker 基礎設施來執行 Kubernetes 工作負載叢集,Kind 必須有一個訪問 Docker 主機的許可權。下面是 Kind 叢集的定義。

# mgmt-cluster-config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
extraMounts:
- hostPath: /var/run/docker.sock
containerPath: /var/run/docker.sock

現在我們使用上面的配置檔案建立一個新的管理叢集:

$ kind create cluster --config mgmt-cluster-config.yaml --name mgmt
Creating cluster "mgmt" ...
✓ Ensuring node image (kindest/node:v1.23.4)
✓ Preparing nodes :package:
✓ Writing configuration :scroll:
✓ Starting control-plane ️
✓ Installing CNI :electric_plug:
✓ Installing StorageClass :floppy_disk:
Set kubectl context to "kind-mgmt"
You can now use your cluster with:

kubectl cluster-info --context kind-mgmt

Not sure what to do next? :sweat_smile: Check out https://kind.sigs.k8s.io/docs/user/quick-start/

接著我們需要初始化一個管理叢集,也就是說我們需要在 Kind 叢集上安裝 Cluster API ,我們首先需要在本地機器上安裝 Cluster API CLI。在 macOS 上,可以使用 brew install clusterctl 進行一鍵安裝。成功安裝 clusterctl 後,我可以執行以下命令:

$ clusterctl init --infrastructure docker
Fetching providers

Skipping installing cert-manager as it is already installed
Installing Provider="cluster-api" Version="v1.2.0" TargetNamespace="capi-system"
Installing Provider="bootstrap-kubeadm" Version="v1.2.0" TargetNamespace="capi-kubeadm-bootstrap-system"
Installing Provider="control-plane-kubeadm" Version="v1.2.0" TargetNamespace="capi-kubeadm-control-plane-system"
Installing Provider="infrastructure-docker" Version="v1.2.0" TargetNamespace="capd-system"

Your management cluster has been initialized successfully!

You can now create your first workload cluster by running the following:

clusterctl generate cluster [name] --kubernetes-version [version] | kubectl apply -f -

一旦我們成功初始化了一個管理叢集,我們就可以對其進行驗證,Cluster API 會建立五個新的名稱空間。

$ kubectl get ns
NAME STATUS AGE
capd-system Active 100s
capi-kubeadm-bootstrap-system Active 101s
capi-kubeadm-control-plane-system Active 100s
capi-system Active 102s
cert-manager Active 35m
default Active 59m
kube-node-lease Active 59m
kube-public Active 59m
kube-system Active 59m
local-path-storage Active 59m

另外,確保在新名稱空間內建立的所有 pod 都應該處於執行狀態。

需要注意 Cluster API 初始化後建立的 Pod 預設使用的是 grc.io 的映象,如不能正常訪問需要自己中轉下。

$ kubectl get pods -A |grep cap
capd-system capd-controller-manager-85788c974f-nmzkt 1/1 Running 0 107m
capi-kubeadm-bootstrap-system capi-kubeadm-bootstrap-controller-manager-7775897d58-6wp5l 1/1 Running 0 107m
capi-kubeadm-control-plane-system capi-kubeadm-control-plane-controller-manager-6958fd6555-w66xg 1/1 Running 0 107m
capi-system capi-controller-manager-648d7b84b8-l5prr 1/1 Running 0 107m

我們還可以顯示已安裝 CRD 的列表,現在 Kubernetes Cluster API 正在管理叢集上運行了,我們可以繼續執行進一步的步驟。

$ kubectl get crd
NAME CREATED AT
certificaterequests.cert-manager.io 2022-08-14T02:52:38Z
certificates.cert-manager.io 2022-08-14T02:52:38Z
challenges.acme.cert-manager.io 2022-08-14T02:52:38Z
clusterclasses.cluster.x-k8s.io 2022-08-14T03:26:48Z
clusterissuers.cert-manager.io 2022-08-14T02:52:38Z
clusterresourcesetbindings.addons.cluster.x-k8s.io 2022-08-14T03:26:48Z
clusterresourcesets.addons.cluster.x-k8s.io 2022-08-14T03:26:48Z
clusters.cluster.x-k8s.io 2022-08-14T03:26:48Z
dockerclusters.infrastructure.cluster.x-k8s.io 2022-08-14T03:26:50Z
dockerclustertemplates.infrastructure.cluster.x-k8s.io 2022-08-14T03:26:51Z
dockermachinepools.infrastructure.cluster.x-k8s.io 2022-08-14T03:26:51Z
dockermachines.infrastructure.cluster.x-k8s.io 2022-08-14T03:26:51Z
dockermachinetemplates.infrastructure.cluster.x-k8s.io 2022-08-14T03:26:51Z
extensionconfigs.runtime.cluster.x-k8s.io 2022-08-14T03:26:48Z
ipaddressclaims.ipam.cluster.x-k8s.io 2022-08-14T03:26:49Z
ipaddresses.ipam.cluster.x-k8s.io 2022-08-14T03:26:49Z
issuers.cert-manager.io 2022-08-14T02:52:38Z
kubeadmconfigs.bootstrap.cluster.x-k8s.io 2022-08-14T03:26:49Z
kubeadmconfigtemplates.bootstrap.cluster.x-k8s.io 2022-08-14T03:26:49Z
kubeadmcontrolplanes.controlplane.cluster.x-k8s.io 2022-08-14T03:26:50Z
kubeadmcontrolplanetemplates.controlplane.cluster.x-k8s.io 2022-08-14T03:26:50Z
machinedeployments.cluster.x-k8s.io 2022-08-14T03:26:49Z
machinehealthchecks.cluster.x-k8s.io 2022-08-14T03:26:49Z
machinepools.cluster.x-k8s.io 2022-08-14T03:26:49Z
machines.cluster.x-k8s.io 2022-08-14T03:26:49Z
machinesets.cluster.x-k8s.io 2022-08-14T03:26:49Z
orders.acme.cert-manager.io 2022-08-14T02:52:38Z
providers.clusterctl.cluster.x-k8s.io 2022-08-14T02:50:54Z

安裝 ArgoCD

這裡我們將 ArgoCD 安裝到 default 名稱空間,使用下面的命令一鍵安裝即可:

$ kubectl apply -f https://raw.githubusercontent.com/argoproj/argo-cd/v2.4.9/manifests/install.yaml

安裝後檢視對應的 Pod 狀態:

$ kubectl get pods
NAME READY STATUS RESTARTS AGE
argocd-application-controller-0 1/1 Running 0 171m
argocd-applicationset-controller-86c8556b6d-dxlhs 1/1 Running 0 171m
argocd-dex-server-5c65569f55-mff75 1/1 Running 0 171m
argocd-notifications-controller-f5d57bc55-4hdqd 1/1 Running 0 171m
argocd-redis-65596bf87-2d5kx 1/1 Running 0 171m
argocd-repo-server-5bfd7c4cfd-4hxn5 1/1 Running 0 171m
argocd-server-8544dd9f89-cdgrw 1/1 Running 0 171m

ArgoCD 會提供一個用於管理的 Web UI,我們可以建立一個 Ingress 物件來暴露該服務,但還需要安裝一個 Ingress 控制器,我們這裡就直接 kubectl port-forward 命令在本地來暴露該服務:

$ kubectl port-forward svc/argocd-server 8080:80

然後我們就可以通過 http://localhost:8080 訪問 ArgoCD 了。

預設情況下 admin 賬號的初始密碼是自動生成的,會以明文的形式儲存在 ArgoCD 安裝的名稱空間中名為 argocd-initial-admin-secret 的 Secret 物件下的 password 欄位下,我們可以用下面的命令來獲取:

$ kubectl get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d && echo

使用使用者名稱 admin 和上面輸出的密碼即可登入 Dashboard。

使用 Cluster API 和 ArgoCD 建立 Kubernetes 叢集

我們將使用 clusterctl 命令列工具生成帶有新 Kubernetes 叢集宣告的 YAML 資源清單,直接執行如下所示的命令即可,它將生成清單並將其儲存到 c1-clusterapi.yaml 檔案中。

$ clusterctl generate cluster c1 --flavor development \
--infrastructure docker \
--kubernetes-version v1.21.1 \
--control-plane-machine-count=3 \
--worker-machine-count=3 \
> c1-clusterapi.yaml

我們的 c1 叢集由三個主節點和三個工作節點組成。按照 Cluster API 文件介紹,我們需要將生成的清單應用到管理叢集中,不過我們這裡將使用 ArgoCD,所以我們需要使用一個 Git 倉庫來託管 Cluster API 的資源清單應用到 Kubernetes 叢集。所以我們需要在 Git 倉庫中建立一個包含 Cluster API 物件的清單檔案。為了簡化流程,我們這裡將使用 Helm Chart 模板。因為要建立兩個叢集,所以我們必須使用帶有引數化的相同模板的 ArgoCD 應用程式。可以在我們提供的 Git 倉庫下的 /mgmt/templates/cluster-api-template.yaml 路徑找到它。

apiVersion: cluster.x-k8s.io/v1beta1
kind: Cluster
metadata:
name: {{ .Values.cluster.name }}
namespace: default
spec:
clusterNetwork:
pods:
cidrBlocks:
- 192.168.0.0/16
serviceDomain: cluster.local
services:
cidrBlocks:
- 10.128.0.0/12
controlPlaneRef:
apiVersion: controlplane.cluster.x-k8s.io/v1beta1
kind: KubeadmControlPlane
name: {{ .Values.cluster.name }}-control-plane
namespace: default
infrastructureRef:
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: DockerCluster
name: {{ .Values.cluster.name }}
namespace: default
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: DockerCluster
metadata:
name: {{ .Values.cluster.name }}
namespace: default
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: DockerMachineTemplate
metadata:
name: {{ .Values.cluster.name }}-control-plane
namespace: default
spec:
template:
spec:
extraMounts:
- containerPath: /var/run/docker.sock
hostPath: /var/run/docker.sock
---
apiVersion: controlplane.cluster.x-k8s.io/v1beta1
kind: KubeadmControlPlane
metadata:
name: {{ .Values.cluster.name }}-control-plane
namespace: default
spec:
kubeadmConfigSpec:
clusterConfiguration:
apiServer:
certSANs:
- localhost
- 127.0.0.1
controllerManager:
extraArgs:
enable-hostpath-provisioner: "true"
initConfiguration:
nodeRegistration:
criSocket: /var/run/containerd/containerd.sock
kubeletExtraArgs:
cgroup-driver: cgroupfs
eviction-hard: nodefs.available<0%,nodefs.inodesFree<0%,imagefs.available<0%
joinConfiguration:
nodeRegistration:
criSocket: /var/run/containerd/containerd.sock
kubeletExtraArgs:
cgroup-driver: cgroupfs
eviction-hard: nodefs.available<0%,nodefs.inodesFree<0%,imagefs.available<0%
machineTemplate:
infrastructureRef:
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: DockerMachineTemplate
name: {{ .Values.cluster.name }}-control-plane
namespace: default
replicas: {{ .Values.cluster.masterNodes }}
version: {{ .Values.cluster.version }}
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: DockerMachineTemplate
metadata:
name: {{ .Values.cluster.name }}-md-0
namespace: default
spec:
template:
spec: {}
---
apiVersion: bootstrap.cluster.x-k8s.io/v1beta1
kind: KubeadmConfigTemplate
metadata:
name: {{ .Values.cluster.name }}-md-0
namespace: default
spec:
template:
spec:
joinConfiguration:
nodeRegistration:
kubeletExtraArgs:
cgroup-driver: cgroupfs
eviction-hard: nodefs.available<0%,nodefs.inodesFree<0%,imagefs.available<0%
---
apiVersion: cluster.x-k8s.io/v1beta1
kind: MachineDeployment
metadata:
name: {{ .Values.cluster.name }}-md-0
namespace: default
spec:
clusterName: {{ .Values.cluster.name }}
replicas: {{ .Values.cluster.workerNodes }}
selector:
matchLabels: null
template:
spec:
bootstrap:
configRef:
apiVersion: bootstrap.cluster.x-k8s.io/v1beta1
kind: KubeadmConfigTemplate
name: {{ .Values.cluster.name }}-md-0
namespace: default
clusterName: {{ .Values.cluster.name }}
infrastructureRef:
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: DockerMachineTemplate
name: {{ .Values.cluster.name }}-md-0
namespace: default
version: {{ .Values.cluster.version }}

我們可以引數化與叢集建立相關的四個屬性:叢集名稱、主節點和工作節點的數量或 Kubernetes 的版本。由於我們使用的是 Helm,所以只需要建立 values.yaml 檔案,其中包含 YAML 格式的這些引數的值。下面是第一個叢集的 values.yaml 檔案,我們可以在 Git 倉庫的 /mgmt/values-c1.yaml 路徑下找到它。

cluster:
name: c1
masterNodes: 3
workerNodes: 3
version: v1.21.1

同樣第二個叢集也有類似的配置,該叢集有一個主節點和一個工作節點,可以在 Git 倉庫的 /mgmt/values-c2.yaml 路徑下找到它。

cluster:
name: c2
masterNodes: 1
workerNodes: 1
version: v1.21.1

建立 ArgoCD 應用

由於 ArgoCD 支援 Helm,所以我們只需要在 ArgoCD 應用程式的配置中設定正確的 values.yaml 檔案即可。除此之外,我們還需要設定我們的 Git 倉庫的地址以及倉庫中包含清單的目錄。管理叢集的所有配置都儲存在 mgmt 目錄中。如下所示:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: c1-cluster-create
spec:
destination:
name: ""
namespace: ""
server: "https://kubernetes.default.svc"
source:
path: mgmt
repoURL: "https://github.com/cnych/sample-kubernetes-cluster-api-argocd.git"
targetRevision: HEAD
helm:
valueFiles:
- values-c1.yaml
project: default

第二個叢集對應的應用資源清單:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: c2-cluster-create
spec:
destination:
name: ""
namespace: ""
server: "https://kubernetes.default.svc"
source:
path: mgmt
repoURL: "https://github.com/cnych/sample-kubernetes-cluster-api-argocd.git"
targetRevision: HEAD
helm:
valueFiles:
- values-c2.yaml
project: default

ArgoCD 需要管理 Cluster API 物件的許可權,為了簡化起見,讓我們將 cluster-admin 角色新增到 ArgoCD 使用的 argocd-application-controller ServiceAccount。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: cluster-admin-argocd-contoller
subjects:
- kind: ServiceAccount
name: argocd-application-controller
namespace: default
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin

在 Argo CD 中建立應用程式後,我們可以手動同步它們(或啟用自動同步選項)。它將會開始通過 Cluster API 工具建立工作負載叢集。

使用 Cluster API CLI 驗證 Kubernetes 叢集

使用 ArgoCD 執行同步後,我們可以驗證可用 Kubernetes 叢集的列表。使用以下 kind 命令即可:

$ kind get clusters
c1
c2
mgmt

可以看到現在一共有三個叢集!安裝在管理叢集 mgmt 上的 Kubernetes Cluster API 根據 ArgoCD 應用的配置建立了另外兩個叢集。要檢查建立的叢集是否正常,我們可以使用 clusterctl describe 命令來檢視。

$ clusterctl describe cluster c1
NAME READY SEVERITY REASON SINCE MESSAGE
Cluster/c1 True 4m4s
├─ClusterInfrastructure - DockerCluster/c1 True 7m49s
├─ControlPlane - KubeadmControlPlane/c1-control-plane True 4m4s
│ └─3 Machines... True 6m26s See c1-control-plane-p54fn, c1-control-plane-w4v88, ...
└─Workers
└─MachineDeployment/c1-md-0 False Warning WaitingForAvailableMachines 8m54s Minimum availability requires 3 replicas, current 0 available
└─3 Machines... True 5m45s See c1-md-0-6f646885d6-8wr47, c1-md-0-6f646885d6-m5nwb, ...

通過上面的命令可以看到建立的叢集控制平面尚未準備好,接著我們需要在工作負載叢集上安裝 CNI 應用。Cluster API 文件建議使用 Calico 外掛,在安裝的時候我們需要將上下文切換到 kind-c1kind-c2 ,它們不是由 Cluster API 在我們的本地機器上建立的,所以首先我們需要將它們匯出到我們的 Kubeconfig 檔案中。

$ kind export kubeconfig --name c1
$ kind export kubeconfig --name c2

匯出後對應的 apiserver 地址變成了 0.0.0.0 ,所以我們需要編輯對應的 Kubeconfig 檔案並將該地址修改為 127.0.0.1 ,修改完成後,我們就可以使用本地機器上的 kubectl 連線建立的兩個叢集了。

接著我們可以在這兩個叢集上安裝 Calico CNI:

$ kubectl apply -f https://docs.projectcalico.org/v3.20/manifests/calico.yaml --context kind-c1
$ kubectl apply -f https://docs.projectcalico.org/v3.20/manifests/calico.yaml --context kind-c2

當然我們也可以在 ArgoCD 中去自動執行該步驟,我們可以在後面的文章中來介紹如何使用管理叢集上 ArgoCD 來管理這兩個叢集。現在,如果我們再次使用 clusterctl describe 命令驗證兩個叢集的狀態。

$ clusterctl describe cluster c2
NAME READY SEVERITY REASON SINCE MESSAGE
Cluster/c2 True 79m
├─ClusterInfrastructure - DockerCluster/c2 True 80m
├─ControlPlane - KubeadmControlPlane/c2-control-plane True 79m
│ └─Machine/c2-control-plane-tgjph True 79m
└─Workers
└─MachineDeployment/c2-md-0 True 81s
└─Machine/c2-md-0-5b8999bf45-lwcwg True 79m

使用 ArgoCD 管理工作叢集

在上一節中,我們已經使用 Cluster API 和 ArgoCD 成功建立了兩個 Kubernetes 叢集,執行該操作所需的所有 Kubernetes 物件都是在管理叢集上建立的。現在,我們想將下面的簡單配置應用於我們的兩個工作負載叢集。當然,我們也會使用同一個 ArgoCD 例項。

apiVersion: v1
kind: Namespace
metadata:
name: demo
---
apiVersion: v1
kind: ResourceQuota
metadata:
name: demo-quota
namespace: demo
spec:
hard:
pods: "10"
requests.cpu: "1"
requests.memory: 1Gi
limits.cpu: "2"
limits.memory: 4Gi
---
apiVersion: v1
kind: LimitRange
metadata:
name: demo-limitrange
namespace: demo
spec:
limits:
- default:
memory: 512Mi
cpu: 500m
defaultRequest:
cpu: 100m
memory: 128Mi
type: Container

不過 ArgoCD 和 Kubernetes Cluster API 工具之間並沒有內建整合。儘管 Cluster API 會為每個建立的叢集建立一個包含 Kubeconfig 檔案的 Secret,但 ArgoCD 無法識別它以自動將此叢集新增到託管叢集。目前的目標是將我們的兩個工作負載叢集新增到由在管理叢集上執行的 ArgoCD 全域性例項管理的叢集列表中。為此我們首先需要登入 ArgoCD,我們需要使用與 Web UI 互動時使用的相同憑據和 URL。

$ argocd login localhost:8080

現在,我們只需要執行以下命令,假設我們已經將兩個 Kubernetes 上下文匯出到本地 Kubeconfig 檔案:

$ argocd cluster add kind-c1
$ argocd cluster add kind-c2

如果你在 macOS 或 Windows 上執行 Docker,這並不是一個容易的操作。你需要使用叢集的內部 Docker 地址。Cluster API 為所有建立的叢集建立包含 Kubeconfig 檔案的 Secret,我們可以使用它來驗證 Kubernetes API 的內部地址。以下是我們工作負載叢集的 Secret 列表:

$ kubectl get secrets | grep kubeconfig
c1-kubeconfig cluster.x-k8s.io/secret 1 85m
c2-kubeconfig cluster.x-k8s.io/secret 1 57m

我們可以在解碼對應的 Secret 後獲得內部地址,比如我的 c1 叢集內部地址是 172.20.0.3

在後臺,ArgoCD 建立了一個與每個託管叢集相關的 Secret,根據標籤名稱和值識別: argocd.argoproj.io/secret-type: cluster

apiVersion: v1
kind: Secret
metadata:
name: c1-cluster-secret
labels:
argocd.argoproj.io/secret-type: cluster
type: Opaque
data:
name: c1
server: https://172.20.0.3:6443
config: |
{
"tlsClientConfig": {
"insecure": false,
"caData": "<base64 encoded certificate>",
"certData": "<base64 encoded certificate>",
"keyData": "<base64 encoded key>"
}
}

如果你成功添加了所有叢集,那麼在 ArgoCD 例項的叢集中可以看到以下列表。

最後,讓我們建立 ArgoCD 應用來管理兩個工作負載叢集上的配置。

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: c1-cluster-config
spec:
project: default
source:
repoURL: "https://github.com/cnych/sample-kubernetes-cluster-api-argocd.git"
path: workload
targetRevision: HEAD
destination:
server: "https://172.20.0.3:6443"

同樣對第二個叢集對應的應用資源清單如下所示:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: c2-cluster-config
spec:
project: default
source:
repoURL: "https://github.com/cnych/sample-kubernetes-cluster-api-argocd.git"
path: workload
targetRevision: HEAD
destination:
server: "https://172.20.0.10:6443"

一旦在 ArgoCD 上建立了這兩個應用程式後,我們就可以同步它們。

最後,讓我們驗證配置是否已成功應用於目標叢集。

參考文件

  • https://cluster-api.sigs.k8s.io/

  • https://argo-cd.readthedocs.io/

  • https://kind.sigs.k8s.io/

  • https://piotrminkowski.com/2021/12/03/create-kubernetes-clusters-with-cluster-api-and-argocd/