多集群运维时,您需要经常切换不同的KubeConfig来操作指定的目标集群,成本高、易出错。ACK One多集群代理服务让您可以通过Fleet实例的单个KubeConfig实现对多个关联集群的操作,例如部署Deployment,查看Pod状态和日志等。本文介绍如何通过命令行方式和Kubernetes API方式使用多集群代理服务。
前提条件
已从ACK One控制台获取Fleet实例的KubeConfig,并通过kubectl连接至Fleet实例。
已开启舰队管理功能。具体操作,请参见开启舰队管理功能。
舰队的Fleet实例已添加多个关联集群。具体操作,请参见添加关联集群。
已安装AMC命令行工具。具体操作,请参见AMC命令行帮助。
背景信息
多集群代理服务通过Fleet实例代理实现,由Fleet实例代理创建的资源仅在相应的关联集群中生效。
通过命令行方式使用多集群代理创建应用
执行以下命令,查看Fleet实例管理的关联集群,确定应用分发的目标集群。
kubectl get managedclusters
预期输出:
NAME HUB ACCEPTED MANAGED CLUSTER URLS JOINED AVAILABLE AGE managedcluster-c5***z9 true True True 12d managedcluster-c1***e5 true True True 12d
使用以下内容,创建app.yaml文件。
执行以下命令,在Fleet实例上部署应用
demo
。您需要指定目标集群,下面以Fleet实例管理的关联集群managedcluster-c1***e5为例进行说明。
kubectl amc apply -f app.yaml -m managedcluster-c1***e5
预期输出:
Run on ManagedCluster managedcluster-c1***e5 deployment.apps/demo created service/demo-svc created ingress.networking.k8s.io/demo created
查看应用的状态。
执行以下命令,查看Deployment的状态。
kubectl amc get deployment -n demo -m managedcluster-c1***e5
预期输出:
Run on ManagedCluster managedcluster-c1xxxe5 NAME READY UP-TO-DATE AVAILABLE AGE demo 1/1 1 1 2m48s
执行以下命令,查看Pod的状态。
kubectl amc get pod -n demo -m managedcluster-c1***e5
预期输出:
Run on ManagedCluster managedcluster-c1***e5 NAME READY STATUS RESTARTS AGE demo-fdf4b6b7d-vthqj 1/1 Running 0 6m55s
执行以下命令,查看Pod的日志。
kubectl amc logs demo-fdf4b6b7d-vthqj -n demo -m managedcluster-c1***e5
预期输出:
Run on ManagedCluster managedcluster-c1***e5 2021-12-16 24:00:00 Started server on :8080
执行以下命令,查看Service的状态。
kubectl amc get service -n demo -m managedcluster-c1***e5
预期输出:
Run on ManagedCluster managedcluster-c1***e5 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE demo-svc ClusterIP 172.16.17.29 <none> 80/TCP 3m55s
执行以下命令,查看Ingress的状态。
kubectl amc get ingress -n demo -m managedcluster-c1***e5
预期输出:
Run on ManagedCluster managedcluster-c1***e5 NAME CLASS HOSTS ADDRESS PORTS AG demo <none> app.demo.example.com 123.56.XX.XX 80 4m10s
通过Kubernetes API方式使用多集群代理
使用Kubernetes API获取Fleet实例管理的关联集群列表。
查看Fleet实例的KubeConfig,从KubeConfig文件中提取
ca
、key
和apiserver
信息,配置Kubernetes API认证的命令如下:cat $KUBECONFIG |grep client-certificate-data | awk -F ' ' '{print $2}' |base64 -d > client-cert.pem cat $KUBECONFIG |grep client-key-data | awk -F ' ' '{print $2}' |base64 -d > client-key.pem APISERVER=`cat $KUBECONFIG |grep server | awk -F ' ' '{print $2}'`
使用Fleet实例的Kubernetes API,获取Fleet实例管理的关联集群。
curl --cert client-cert.pem --key client-key.pem -k $APISERVER/apis/cluster.open-cluster-management.io/v1/managedclusters
说明Fleet实例Kubernetes API的URL路径为:
/apis/cluster.open-cluster-management.io/v1/managedclusters
。
使用Fleet实例Kubernetes API的代理功能,获取对应关联集群的资源信息。
curl --cert client-cert.pem --key client-key.pem -k $APISERVER/apis/cluster.core.oam.dev/v1alpha1/clustergateways/<替换为关联集群名称>/proxy/api/v1/namespaces/demo/pods
说明Fleet实例Kubernetes API代理功能的URL路径为:
/apis/cluster.core.oam.dev/v1alpha1/clustergateways/<关联集群名称>/proxy/<关联集群资源Kubernetes API URL路径>
。