onectl是阿里云分布式云容器平臺為注冊集群提供的命令行工具,您可以通過onectl進行注冊集群、相關組件以及組件RAM用戶的管理。
onectl介紹
onectl主要包含以下功能。
集群管理
創建注冊集群、列出注冊集群當前的狀態、連接注冊集群與線下集群、列出當前RAM用戶所有的注冊集群、刪除注冊集群。
組件管理
安裝組件、升級組件、列出集群中所有已安裝的組件、列出所有可安裝的組件、刪除組件。
組件RAM用戶管理
根據組件名授予組件RAM用戶對應的權限、列出組件RAM用戶的所有權限、根據組件名稱撤銷對應的權限。
實現原理
與目標集群的通信
通過onectl連接注冊集群與目標集群時,onectl需要在目標集群中部署注冊集群agent,此時,onectl將按照以下優先級依次嘗試使用對應的KubeConfig與目標集群進行通信。
kubeconfig參數
例如,通過以下命令使用~/.kube/config配置文件與目標集群通信,并將目標集群連接至注冊集群。
onectl cluster connect --cluster-id **** --kubeconfig ~/.kube/config
KUBECONFIG環境變量
若上述kubeconfig參數未指定,onectl會使用KUBECONFIG環境變量指向的KubeConfig配置文件。
onectl配置文件~/.onectl/config.json中的
Kubeconfig Path
字段若以上兩個字段都不存在,則使用該字段指向的配置文件。該字段的配置請參見步驟二:配置onectl RAM用戶。
~/.kube/config
若上述字段均為空,則默認使用該配置文件。
連接注冊集群
onectl連接注冊集群時,將依次執行以下操作。
獲取注冊集群的連接信息,并保存到本地名為agent.yaml的文件中。
根據此YAML文件的內容,在目標集群中部署注冊集群agent。
例如,執行以下命令,連接注冊集群與目標集群。
onectl cluster connect --cluster-id ****
預期輸出:
Agent information saved as agent.yaml.
Installing ACK One agent using kubeconfig file **** to connect to registered cluster ****.
Confirm? [Y/n]: y
ACK One agent deployed successfully.
Check the running status of deployment ack-cluster-agent to confirm the connection status of registered cluster ****.
組件RAM用戶
注冊集群中已安裝的組件在運行時,需要一個單獨的RAM用戶的AccessKey來訪問云上資源。例如,logtail-ds組件需要訪問日志服務SLS的項目、日志庫等資源,該組件RAM用戶的AK信息保存在集群kube-system命名空間下名為alibaba-addon-secret的Secret中。
若集群中已經存在此Secret,onectl會沿用此Secret中的AK信息來運行集群組件。
若集群中不存在此Secret,onectl會自動創建并使用名為ack-one-user-[cluster id prefix]的RAM用戶來運行組件。例如,當集群中不存在此Secret時,您可以執行以下命令,創建一個RAM用戶并授予其terway-eniip組件所需要的權限。
onectl ram-user grant --addon terway-eniip
預期輸出:
Ram user ack-one-user-ce313528c3 created successfully. Ram policy ack-one-registered-cluster-policy-terway-eniip granted to ram user ack-one-user-ce313528c3 successfully. Secret alibaba-addon-secret created under namespace kube-system in the cluster, it stores the access key and secret of ram user ack-one-user-ce313528c3.
組件安裝
通過onectl安裝組件需要管理員權限,onectl會在開始安裝前檢測注冊集群agent的ServiceAccount是否擁有管理員權限。若沒有,onectl將創建一個臨時的管理員角色,并賦予ack賬戶集群的管理員權限。組件安裝完成后,onectl將刪除此臨時管理員角色,將ack賬戶的權限恢復至組件安裝前。
例如,在agent沒有管理員權限時,您可以執行以下命令對agent賬戶進行臨時提權,并在組件安裝完成后撤銷agent的臨時管理員權限。
onectl addon install logtail-ds
預期輸出:
Cluster role ack-admin-tmp created.
Cluster role binding ack-admin-binding-tmp created.
Addon logtail-ds, version **** installed.
Cluster role ack-admin-tmp deleted.
Cluster role binding ack-admin-binding-tmp deleted.
臨時管理員角色的ClusterRole、ClusterRoleBinding內容如下。
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: ack-admin-tmp
labels:
ack/creator: "ack"
rules:
- apiGroups:
- '*'
resources:
- '*'
verbs:
- '*'
- nonResourceURLs:
- '*'
verbs:
- '*'
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: ack-admin-binding-tmp
namespace: kube-system
labels:
ack/creator: "ack"
subjects:
- kind: ServiceAccount
name: ack
namespace: kube-system
roleRef:
kind: ClusterRole
name: ack-admin-tmp
apiGroup: rbac.authorization.k8s.io
步驟一:安裝onectl
執行以下命令,安裝onectl。
支持macOS和Linux系統安裝。
curl https://ack-one.oss-cn-hangzhou.aliyuncs.com/onectl/get-onectl.sh | bash
執行以下命令,驗證onectl是否安裝成功。
onectl version
預期輸出:
onectl: v1.0.0+774dea0 BuildDate: 2023-07-12T06:10:27Z GitCommit: 774dea0f768569821e101dc44d1cb09cef192fe8 GitTreeState: clean GoVersion: go1.20.4 Compiler: gc Platform: darwin/amd64
步驟二:配置onectl RAM用戶
RAM用戶登錄后,才能通過onectl管理注冊集群,onectl會使用該RAM用戶的AK/SK來操作阿里云的云服務資源,該RAM用戶需要擁有以下權限來管理云上資源。
onectl RAM用戶與組件的RAM用戶是不同的RAM用戶。
容器服務的管理員權限:名為AliyunCSFullAccess的系統策略。
RAM的管理員權限:名為AliyunRamFullAccess的系統策略。
VPC的只讀權限:名為AliyunVPCReadOnlyAccess的系統策略。
您可以執行以下命令,配置onectl RAM用戶的AK、SK信息以及注冊集群ID等信息。
onectl configure
預期輸出:
Configuring profile default ...
Access Key Id [*********************f7x]:
Access Key Secret [***************************mft]:
Default Kubeconfig Path (default is ~/.kube/config) []:
Saving profile[default] ...
Done.
參數 | 說明 |
Access Key Id | onectl使用的RAM用戶的AccessKey信息。 |
Access Key Secret | |
Kubeconfig Path | IDC自建集群的KubeConfig路徑,默認為~/.kube/config。 |
步驟三:配置目標集群KubeConfig
onectl默認會使用KubeConfig環境變量指向的KubeConfig配置文件用于連接目標集群,因此使用onectl之前,需要先設置該環境變量。若未設置,將默認使用~/.kube/config
文件。
相關操作
集群管理
您可以通過執行以下onectl命令,對集群進行操作。
創建連接注冊集群。其中
cluster-id ****
為您創建的注冊集群的ID。更多信息,請參見通過onectl創建注冊集群。onectl cluster create --region **** --vpc **** --vswitch **** --name **** --eip true onectl cluster connect --cluster-id ****
查看注冊集群的當前狀態。
onectl cluster describe --cluster-id ****
查看所有注冊集群。
onectl cluster list
刪除注冊集群。
onectl cluster delete --cluster-id ****
組件管理
您可以通過執行以下onectl命令,對組件進行不同的操作。其中****
為您待操作的組件的名稱。
安裝組件
onectl addon install ****
升級組件
onectl addon upgrade ****
查詢組件列表
onectl addon list
查看所有可安裝組件
onectl addon catalog
卸載組件
onectl addon uninstall ****
組件RAM用戶管理
您可以通過執行以下onectl命令,對組件RAM用戶進行管理。其中****
為組件的名稱。
授予權限
onectl ram-user grant --addon ****
列出權限詳情
onectl ram-user describe --detail
撤銷權限
onectl ram-user revoke --addon ****
更新權限
onectl ram-user update --addon ****