Kubernetes 集群 API 创建管理

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: Kubernetes 集群 API 创建管理

Kubernetes 集群 API 创建管理

网络异常,图片无法展示
|

本文我们将学习如何使用 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.yamlkind: ClusterapiVersion: kind.x-k8s.io/v1alpha4nodes:  - role: control-plane    extraMounts:      - hostPath: /var/run/docker.sock        containerPath: /var/run/docker.sock

现在我们使用上面的配置文件创建一个新的管理集群:

$ kind create cluster --config mgmt-cluster-config.yaml --name mgmtCreating cluster "mgmt" ... ✓ Ensuring node image (kindest/node:v1.23.4) 🖼 ✓ Preparing nodes 📦 ✓ Writing configuration 📜 ✓ Starting control-plane 🕹️ ✓ Installing CNI 🔌 ✓ Installing StorageClass 💾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? 😅  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 dockerFetching providers
Skipping installing cert-manager as it is already installedInstalling 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 nsNAME                                STATUS   AGEcapd-system                         Active   100scapi-kubeadm-bootstrap-system       Active   101scapi-kubeadm-control-plane-system   Active   100scapi-system                         Active   102scert-manager                        Active   35mdefault                             Active   59mkube-node-lease                     Active   59mkube-public                         Active   59mkube-system                         Active   59mlocal-path-storage                  Active   59m

另外,确保在新命名空间内创建的所有 pod 都应该处于运行状态。

需要注意 Cluster API 初始化后创建的 Pod 默认使用的是 grc.io 的镜像,如不能正常访问需要自己中转下。

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

我们还可以显示已安装 CRD 的列表,现在 Kubernetes Cluster API 正在管理集群上运行了,我们可以继续执行进一步的步骤。

$ kubectl get crdNAME                                                         CREATED ATcertificaterequests.cert-manager.io                          2022-08-14T02:52:38Zcertificates.cert-manager.io                                 2022-08-14T02:52:38Zchallenges.acme.cert-manager.io                              2022-08-14T02:52:38Zclusterclasses.cluster.x-k8s.io                              2022-08-14T03:26:48Zclusterissuers.cert-manager.io                               2022-08-14T02:52:38Zclusterresourcesetbindings.addons.cluster.x-k8s.io           2022-08-14T03:26:48Zclusterresourcesets.addons.cluster.x-k8s.io                  2022-08-14T03:26:48Zclusters.cluster.x-k8s.io                                    2022-08-14T03:26:48Zdockerclusters.infrastructure.cluster.x-k8s.io               2022-08-14T03:26:50Zdockerclustertemplates.infrastructure.cluster.x-k8s.io       2022-08-14T03:26:51Zdockermachinepools.infrastructure.cluster.x-k8s.io           2022-08-14T03:26:51Zdockermachines.infrastructure.cluster.x-k8s.io               2022-08-14T03:26:51Zdockermachinetemplates.infrastructure.cluster.x-k8s.io       2022-08-14T03:26:51Zextensionconfigs.runtime.cluster.x-k8s.io                    2022-08-14T03:26:48Zipaddressclaims.ipam.cluster.x-k8s.io                        2022-08-14T03:26:49Zipaddresses.ipam.cluster.x-k8s.io                            2022-08-14T03:26:49Zissuers.cert-manager.io                                      2022-08-14T02:52:38Zkubeadmconfigs.bootstrap.cluster.x-k8s.io                    2022-08-14T03:26:49Zkubeadmconfigtemplates.bootstrap.cluster.x-k8s.io            2022-08-14T03:26:49Zkubeadmcontrolplanes.controlplane.cluster.x-k8s.io           2022-08-14T03:26:50Zkubeadmcontrolplanetemplates.controlplane.cluster.x-k8s.io   2022-08-14T03:26:50Zmachinedeployments.cluster.x-k8s.io                          2022-08-14T03:26:49Zmachinehealthchecks.cluster.x-k8s.io                         2022-08-14T03:26:49Zmachinepools.cluster.x-k8s.io                                2022-08-14T03:26:49Zmachines.cluster.x-k8s.io                                    2022-08-14T03:26:49Zmachinesets.cluster.x-k8s.io                                 2022-08-14T03:26:49Zorders.acme.cert-manager.io                                  2022-08-14T02:52:38Zproviders.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 podsNAME                                                READY   STATUS    RESTARTS   AGEargocd-application-controller-0                     1/1     Running   0          171margocd-applicationset-controller-86c8556b6d-dxlhs   1/1     Running   0          171margocd-dex-server-5c65569f55-mff75                  1/1     Running   0          171margocd-notifications-controller-f5d57bc55-4hdqd     1/1     Running   0          171margocd-redis-65596bf87-2d5kx                        1/1     Running   0          171margocd-repo-server-5bfd7c4cfd-4hxn5                 1/1     Running   0          171margocd-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/v1beta1kind: Clustermetadata:  name: {{ .Values.cluster.name }}  namespace: defaultspec:  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/v1beta1kind: DockerClustermetadata:  name: {{ .Values.cluster.name }}  namespace: default---apiVersion: infrastructure.cluster.x-k8s.io/v1beta1kind: DockerMachineTemplatemetadata:  name: {{ .Values.cluster.name }}-control-plane  namespace: defaultspec:  template:    spec:      extraMounts:        - containerPath: /var/run/docker.sock          hostPath: /var/run/docker.sock---apiVersion: controlplane.cluster.x-k8s.io/v1beta1kind: KubeadmControlPlanemetadata:  name: {{ .Values.cluster.name }}-control-plane  namespace: defaultspec:  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/v1beta1kind: DockerMachineTemplatemetadata:  name: {{ .Values.cluster.name }}-md-0  namespace: defaultspec:  template:    spec: {}---apiVersion: bootstrap.cluster.x-k8s.io/v1beta1kind: KubeadmConfigTemplatemetadata:  name: {{ .Values.cluster.name }}-md-0  namespace: defaultspec:  template:    spec:      joinConfiguration:        nodeRegistration:          kubeletExtraArgs:            cgroup-driver: cgroupfs            eviction-hard: nodefs.available<0%,nodefs.inodesFree<0%,imagefs.available<0%---apiVersion: cluster.x-k8s.io/v1beta1kind: MachineDeploymentmetadata:  name: {{ .Values.cluster.name }}-md-0  namespace: defaultspec:  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/v1alpha1kind: Applicationmetadata:  name: c1-cluster-createspec:  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/v1alpha1kind: Applicationmetadata:  name: c2-cluster-createspec:  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/v1kind: ClusterRoleBindingmetadata:  name: cluster-admin-argocd-contollersubjects:  - kind: ServiceAccount    name: argocd-application-controller    namespace: defaultroleRef:  apiGroup: rbac.authorization.k8s.io  kind: ClusterRole  name: cluster-admin

在 Argo CD 中创建应用程序后,我们可以手动同步它们(或启用自动同步选项)。它将会开始通过 Cluster API 工具创建工作负载集群。

网络异常,图片无法展示
|

使用 Cluster API CLI 验证 Kubernetes 集群

使用 ArgoCD 执行同步后,我们可以验证可用 Kubernetes 集群的列表。使用以下 kind 命令即可:

$ kind get clustersc1c2mgmt

可以看到现在一共有三个集群!安装在管理集群 mgmt 上的 Kubernetes Cluster API 根据 ArgoCD 应用的配置创建了另外两个集群。要检查创建的集群是否正常,我们可以使用 clusterctl describe 命令来查看。

$ clusterctl describe cluster c1NAME                                                   READY  SEVERITY  REASON                       SINCE  MESSAGECluster/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 c2NAME                                                   READY  SEVERITY  REASON  SINCE  MESSAGECluster/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: v1kind: Namespacemetadata:  name: demo---apiVersion: v1kind: ResourceQuotametadata:  name: demo-quota  namespace: demospec:  hard:    pods: "10"    requests.cpu: "1"    requests.memory: 1Gi    limits.cpu: "2"    limits.memory: 4Gi---apiVersion: v1kind: LimitRangemetadata:  name: demo-limitrange  namespace: demospec:  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 kubeconfigc1-kubeconfig                               cluster.x-k8s.io/secret               1      85mc2-kubeconfig                               cluster.x-k8s.io/secret               1      57m

我们可以在解码对应的 Secret 后获得内部地址,比如我的 c1 集群内部地址是 172.20.0.3

网络异常,图片无法展示
|

在后台,ArgoCD 创建了一个与每个托管集群相关的 Secret,根据标签名称和值识别:argocd.argoproj.io/secret-type: cluster

apiVersion: v1kind: Secretmetadata:  name: c1-cluster-secret  labels:    argocd.argoproj.io/secret-type: clustertype: Opaquedata:  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/v1alpha1kind: Applicationmetadata:  name: c1-cluster-configspec:  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/v1alpha1kind: Applicationmetadata:  name: c2-cluster-configspec:  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 上创建了这两个应用程序后,我们就可以同步它们。

网络异常,图片无法展示
|

最后,让我们验证配置是否已成功应用于目标集群。

网络异常,图片无法展示
|



相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
6天前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景
|
7天前
|
Kubernetes 持续交付 开发工具
ACK One GitOps:ApplicationSet UI简化多集群GitOps应用管理
ACK One GitOps新发布了多集群应用控制台,支持管理Argo CD ApplicationSet,提升大规模应用和集群的多集群GitOps应用分发管理体验。
|
30天前
|
Kubernetes Cloud Native 云计算
云原生之旅:Kubernetes 集群的搭建与实践
【8月更文挑战第67天】在云原生技术日益成为IT行业焦点的今天,掌握Kubernetes已成为每个软件工程师必备的技能。本文将通过浅显易懂的语言和实际代码示例,引导你从零开始搭建一个Kubernetes集群,并探索其核心概念。无论你是初学者还是希望巩固知识的开发者,这篇文章都将为你打开一扇通往云原生世界的大门。
99 17
|
18天前
|
Kubernetes 安全 Cloud Native
云上攻防-云原生篇&K8s安全-Kubelet未授权访问、API Server未授权访问
本文介绍了云原生环境下Kubernetes集群的安全问题及攻击方法。首先概述了云环境下的新型攻击路径,如通过虚拟机攻击云管理平台、容器逃逸控制宿主机等。接着详细解释了Kubernetes集群架构,并列举了常见组件的默认端口及其安全隐患。文章通过具体案例演示了API Server 8080和6443端口未授权访问的攻击过程,以及Kubelet 10250端口未授权访问的利用方法,展示了如何通过这些漏洞实现权限提升和横向渗透。
云上攻防-云原生篇&K8s安全-Kubelet未授权访问、API Server未授权访问
|
22天前
|
Kubernetes 应用服务中间件 nginx
搭建Kubernetes v1.31.1服务器集群,采用Calico网络技术
在阿里云服务器上部署k8s集群,一、3台k8s服务器,1个Master节点,2个工作节点,采用Calico网络技术。二、部署nginx服务到k8s集群,并验证nginx服务运行状态。
244 1
|
27天前
|
Kubernetes Cloud Native 微服务
微服务实践之使用 kube-vip 搭建高可用 Kubernetes 集群
微服务实践之使用 kube-vip 搭建高可用 Kubernetes 集群
78 1
|
27天前
|
负载均衡 应用服务中间件 nginx
基于Ubuntu-22.04安装K8s-v1.28.2实验(二)使用kube-vip实现集群VIP访问
基于Ubuntu-22.04安装K8s-v1.28.2实验(二)使用kube-vip实现集群VIP访问
46 1
|
1月前
|
Kubernetes Cloud Native Ubuntu
云原生之旅:Kubernetes集群搭建与应用部署
【8月更文挑战第65天】本文将带你进入云原生的世界,通过一步步指导如何在本地环境中搭建Kubernetes集群,并部署一个简单的应用。我们将使用Minikube和Docker作为工具,探索云原生技术的魅力所在。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和实践技巧。
|
2月前
|
存储 Kubernetes 关系型数据库
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
|
2月前
|
存储 Kubernetes 负载均衡
CentOS 7.9二进制部署K8S 1.28.3+集群实战
本文详细介绍了在CentOS 7.9上通过二进制方式部署Kubernetes 1.28.3+集群的全过程,包括环境准备、组件安装、证书生成、高可用配置以及网络插件部署等关键步骤。
307 3
CentOS 7.9二进制部署K8S 1.28.3+集群实战

热门文章

最新文章