onectl介紹
onectl主要包含以下功能。
叢集管理
建立註冊叢集、列出註冊叢集當前的狀態、串連註冊叢集與線下叢集、列出當前RAM使用者所有的註冊叢集、刪除註冊叢集。
組件管理
安裝組件、升級組件、列出叢集中所有已安裝的組件、列出所有可安裝的組件、刪除群組件。
組件RAM使用者管理
根據組件名授予組件RAM使用者對應的許可權、列出組件RAM使用者的所有許可權、根據組件名稱撤銷對應的許可權。
實現原理
展開查看onectl的實現原理
與目的地組群的通訊
通過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組件需要訪問Log ServiceSLS的專案、日誌庫等資源,該組件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內容如下。
展開查看臨時管理員角色的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使用者。
Container Service的管理員權限:名為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 ****