全部產品
Search
文件中心

Container Service for Kubernetes:通過onectl管理註冊叢集

更新時間:Jan 26, 2025

onectl是阿里雲分布式云容器平台為註冊叢集提供的命令列工具,您可以通過onectl進行註冊叢集、相關組件以及組件RAM使用者的管理。

onectl介紹

onectl主要包含以下功能。

  • 叢集管理

    建立註冊叢集、列出註冊叢集當前的狀態、串連註冊叢集與線下叢集、列出當前RAM使用者所有的註冊叢集、刪除註冊叢集。

  • 組件管理

    安裝組件、升級組件、列出叢集中所有已安裝的組件、列出所有可安裝的組件、刪除群組件。

  • 組件RAM使用者管理

    根據組件名授予組件RAM使用者對應的許可權、列出組件RAM使用者的所有許可權、根據組件名稱撤銷對應的許可權。

實現原理

展開查看onectl的實現原理

與目的地組群的通訊

通過onectl串連註冊叢集與目的地組群時,onectl需要在目的地組群中部署註冊叢集agent,此時,onectl將按照以下優先順序依次嘗試使用對應的KubeConfig與目的地組群進行通訊。

  1. kubeconfig參數

    例如,通過以下命令使用~/.kube/config設定檔與目的地組群通訊,並將目的地組群串連至註冊叢集。

    onectl cluster connect --cluster-id **** --kubeconfig ~/.kube/config
  2. KUBECONFIG環境變數

    若上述kubeconfig參數未指定,onectl會使用KUBECONFIG環境變數指向的KubeConfig設定檔。

  3. onectl設定檔~/.onectl/config.json中的Kubeconfig Path欄位

    若以上兩個欄位都不存在,則使用該欄位指向的設定檔。該欄位的配置請參見步驟二:配置onectl RAM使用者

  4. ~/.kube/config

    若上述欄位均為空白,則預設使用該設定檔。

串連註冊叢集

onectl串連註冊叢集時,將依次執行以下操作。

  1. 擷取註冊叢集的串連資訊,並儲存到本地名為agent.yaml的檔案中。

  2. 根據此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

  1. 執行以下命令,安裝onectl。

    支援macOS和Linux系統安裝。

    curl https://ack-one.oss-cn-hangzhou.aliyuncs.com/onectl/get-onectl.sh | bash
  2. 執行以下命令,驗證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 ****

相關文檔

  • 如果需要查看已安裝的組件,請參見管理組件

  • 如果需要監控註冊叢集的工作狀態,請參見可觀測性

  • 如果需要瞭解註冊叢集的安全性要求,請參見安全管理