多集群代理服務(wù)
多集群運(yùn)維時(shí),您需要經(jīng)常切換不同的KubeConfig來(lái)操作指定的目標(biāo)集群,成本高、易出錯(cuò)。ACK One多集群代理服務(wù)讓您可以通過(guò)Fleet實(shí)例的單個(gè)KubeConfig實(shí)現(xiàn)對(duì)多個(gè)關(guān)聯(lián)集群的操作,例如部署Deployment,查看Pod狀態(tài)和日志等。本文介紹如何通過(guò)命令行方式和Kubernetes API方式使用多集群代理服務(wù)。
前提條件
已從ACK One控制臺(tái)獲取Fleet實(shí)例的KubeConfig,并通過(guò)kubectl連接至Fleet實(shí)例。
已開(kāi)啟艦隊(duì)管理功能。具體操作,請(qǐng)參見(jiàn)開(kāi)啟艦隊(duì)管理功能。
艦隊(duì)的Fleet實(shí)例已添加多個(gè)關(guān)聯(lián)集群。具體操作,請(qǐng)參見(jiàn)添加關(guān)聯(lián)集群。
已安裝AMC命令行工具。具體操作,請(qǐng)參見(jiàn)AMC命令行幫助。
背景信息
多集群代理服務(wù)通過(guò)Fleet實(shí)例代理實(shí)現(xiàn),由Fleet實(shí)例代理創(chuàng)建的資源僅在相應(yīng)的關(guān)聯(lián)集群中生效。
通過(guò)命令行方式使用多集群代理創(chuàng)建應(yīng)用
執(zhí)行以下命令,查看Fleet實(shí)例管理的關(guān)聯(lián)集群,確定應(yīng)用分發(fā)的目標(biāo)集群。
kubectl get managedclusters
預(yù)期輸出:
NAME HUB ACCEPTED MANAGED CLUSTER URLS JOINED AVAILABLE AGE managedcluster-c5***z9 true True True 12d managedcluster-c1***e5 true True True 12d
使用以下內(nèi)容,創(chuàng)建app.yaml文件。
apiVersion: apps/v1 kind: Deployment metadata: name: demo namespace: demo labels: app: demo spec: minReadySeconds: 5 revisionHistoryLimit: 5 progressDeadlineSeconds: 60 strategy: rollingUpdate: maxUnavailable: 1 type: RollingUpdate selector: matchLabels: app: demo template: metadata: annotations: prometheus.io/scrape: "true" prometheus.io/port: "9797" labels: app: demo spec: containers: - name: demo image: registry.cn-hangzhou.aliyuncs.com/acs/rollouts-demo:red imagePullPolicy: IfNotPresent ports: - name: http containerPort: 8080 protocol: TCP readinessProbe: tcpSocket: port: 8080 initialDelaySeconds: 5 timeoutSeconds: 5 resources: limits: cpu: 2000m memory: 512Mi requests: cpu: 100m memory: 64Mi --- apiVersion: v1 kind: Service metadata: name: demo-svc namespace: demo spec: selector: app: demo ports: - protocol: TCP port: 80 targetPort: 8080 --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: demo namespace: demo labels: app: demo spec: rules: - host: app.demo.example.com http: paths: - path: / pathType: Prefix backend: service: name: demo-svc port: number: 80
執(zhí)行以下命令,在Fleet實(shí)例上部署應(yīng)用
demo
。您需要指定目標(biāo)集群,下面以Fleet實(shí)例管理的關(guān)聯(lián)集群managedcluster-c1***e5為例進(jìn)行說(shuō)明。
kubectl amc apply -f app.yaml -m managedcluster-c1***e5
預(yù)期輸出:
Run on ManagedCluster managedcluster-c1***e5 deployment.apps/demo created service/demo-svc created ingress.networking.k8s.io/demo created
查看應(yīng)用的狀態(tài)。
執(zhí)行以下命令,查看Deployment的狀態(tài)。
kubectl amc get deployment -n demo -m managedcluster-c1***e5
預(yù)期輸出:
Run on ManagedCluster managedcluster-c1xxxe5 NAME READY UP-TO-DATE AVAILABLE AGE demo 1/1 1 1 2m48s
執(zhí)行以下命令,查看Pod的狀態(tài)。
kubectl amc get pod -n demo -m managedcluster-c1***e5
預(yù)期輸出:
Run on ManagedCluster managedcluster-c1***e5 NAME READY STATUS RESTARTS AGE demo-fdf4b6b7d-vthqj 1/1 Running 0 6m55s
執(zhí)行以下命令,查看Pod的日志。
kubectl amc logs demo-fdf4b6b7d-vthqj -n demo -m managedcluster-c1***e5
預(yù)期輸出:
Run on ManagedCluster managedcluster-c1***e5 2021-12-16 24:00:00 Started server on :8080
執(zhí)行以下命令,查看Service的狀態(tài)。
kubectl amc get service -n demo -m managedcluster-c1***e5
預(yù)期輸出:
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
執(zhí)行以下命令,查看Ingress的狀態(tài)。
kubectl amc get ingress -n demo -m managedcluster-c1***e5
預(yù)期輸出:
Run on ManagedCluster managedcluster-c1***e5 NAME CLASS HOSTS ADDRESS PORTS AG demo <none> app.demo.example.com 123.56.XX.XX 80 4m10s
通過(guò)Kubernetes API方式使用多集群代理
使用Kubernetes API獲取Fleet實(shí)例管理的關(guān)聯(lián)集群列表。
查看Fleet實(shí)例的KubeConfig,從KubeConfig文件中提取
ca
、key
和apiserver
信息,配置Kubernetes API認(rèn)證的命令如下: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實(shí)例的Kubernetes API,獲取Fleet實(shí)例管理的關(guān)聯(lián)集群。
curl --cert client-cert.pem --key client-key.pem -k $APISERVER/apis/cluster.open-cluster-management.io/v1/managedclusters
說(shuō)明Fleet實(shí)例Kubernetes API的URL路徑為:
/apis/cluster.open-cluster-management.io/v1/managedclusters
。
使用Fleet實(shí)例Kubernetes API的代理功能,獲取對(duì)應(yīng)關(guān)聯(lián)集群的資源信息。
curl --cert client-cert.pem --key client-key.pem -k $APISERVER/apis/cluster.core.oam.dev/v1alpha1/clustergateways/<替換為關(guān)聯(lián)集群名稱>/proxy/api/v1/namespaces/demo/pods
說(shuō)明Fleet實(shí)例Kubernetes API代理功能的URL路徑為:
/apis/cluster.core.oam.dev/v1alpha1/clustergateways/<關(guān)聯(lián)集群名稱>/proxy/<關(guān)聯(lián)集群資源Kubernetes API URL路徑>
。