onectl是阿里云注册集群的命令行工具,可以帮您一键安装和配置Addon组件。本文介绍如何在注册集群中使用onectl。

前提条件

已创建注册集群并接入本地数据中心集群,且集群状态为运行中。

索引

步骤一:安装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+435cb69
      BuildDate: 2023-02-16T07:55:15Z
      GitCommit: 435cb69c9efdf369f036e3f5864c07ae871a793d
      GitTreeState: clean
      GoVersion: go1.18.9
      Compiler: gc
      Platform: linux/amd64

步骤二:为RAM用户授权

阿里云账号管理员首先需要完成RAM用户的授权操作,该授权用于访问注册集群中Addon组件相关的云资源。

您可以通过以下两种方式为RAM用户授权。

通过onectl方式为RAM用户授权

  • 对于新建RAM用户,需要先创建RAM用户,然后生成AK并授权。
    执行以下命令,创建RAM用户,生成AK并授权。
    onectl  subuser create --name <subaccount_name> --main-access-key <main_access_key> --main-access-secret <main_access_secret>
    预期输出:
    Successfully create subuser account:
    name: ****
    new accessKeyId: LTAI5tRf5ipP1h81PL****
    new accessKeySecret: ****
  • 对于已有RAM用户,需要执行以下命令,为RAM用户授权。
    onectl  subuser grant --name <subaccount_name> --new-ak=false --main-access-key <main_access_key> --main-access-secret <main_access_secret>
    预期输出:
    Successfully grant init ram policy subuser account
    granted rampolicy name: externalK8sPolicy-init
说明 您在使用完onectl之后,建议将此自定义的权限策略externalK8sPolicy-tmp从RAM用户账号授权中移除。

通过控制台方式为RAM用户授权

  1. 创建RAM用户。具体操作,请参见创建RAM用户
  2. 为RAM用户创建AccessKey。具体操作,请参见获取AccessKey
  3. 创建自定义权限策略externalK8sPolicy-tmp,具体权限策略内容如下。具体操作,请参见创建自定义权限策略
    {
      "Statement": [
        {
          "Action": [
            "cs:InstallClusterAddons"
          ],
          "Effect": "Allow",
          "Resource": [
            "acs:cs:*:*:cluster/*"
          ]
        },
        {
          "Action": [
            "ram:GetPolicy",
            "ram:CreatePolicy",
            "ram:AttachPolicyToUser"
          ],
          "Effect": "Allow",
          "Resource": [
            "*"
          ]
        }
      ],
      "Version": "1"
    }
  4. 为RAM用户添加权限。具体操作,请参见为RAM用户授权
说明 您在使用完onectl之后,建议将此自定义的权限策略externalK8sPolicy-tmp从RAM用户账号授权中移除。

步骤三:配置onectl

本文以安装logtail-ds Addon为例介绍如何配置onectl,配置步骤中使用的AK将用于执行以下操作。

  • 检查RAM用户是否已授权logtail-ds所需的RAM权限"ram:GetPolicy",权限策略名称将自动被命名为externalK8sPolicy-logtail-ds。若不存在,则创建该策略ram:CreatePolicy,并将该权限策略添加至RAM用户ram:AttachPolicyToUser
  • 使用该AK在注册集群中创建Secret,logtail-ds将挂载该Secret并使用AK访问日志服务相关的云资源。

使用步骤二:为RAM用户授权生成的RAM用户账号及AK信息,执行以下命令,完成onectl配置。

onectl configure

预期输出:

Configuring profile 'default' ...
Access Key Id [LTAI5tRf5ipP1h81PL****]: 
Access Key Secret [****]: 
Default SubAccount Username [xxxx]: 
Default Cluster Id (ClusterId of ACK Regitry Cluster) [c696eaff87cd44d2ea8c18cd54e6****]: 
Default Kubeconfig Path (default is ~/.kube/config) []: 
Saving profile[default] ...
Done.
参数说明
Access Key IdRAM用户的AccessKey信息。onectl使用AK的两个用途如下:
  • 调用OpenAPI查询和创建自定义权限策略、授予RAM用户自定义权限策略以及安装ACK的Addon组件。
  • 您选装的Addon组件将使用该AK访问云上资源,确保此RAM用户的AK为最小RAM权限,并妥善保管好AK信息。
Access Key Secret
SubAccount UsernameRAM用户的用户名。例如,您RAM用户的登录名称为shuwei@18807*****.onaliyun.com,此处SubAccount Usernameshuwei
Cluster Id注册集群的Cluster ID。
Kubeconfig PathIDC自建集群的KubeConfig路径,默认为~/.kube/config

步骤四:使用onectl一键安装Addon组件

执行以下命令,安装日志组件logtail-ds。

onectl addon install logtail-ds

预期输出:

Addon logtail-ds installed

步骤五:使用onectl对节点池创建进行前置检查

创建节点池的前置检查

以下命令行功能用于检测当前集群配置是否满足创建节点池需求,并不会自动化创建节点池。关于创建节点池具体操作请参见创建节点池

执行以下命令,完成创建节点池的前置检查。

onectl nodepool check

预期输出:

Have you add nodeaffinity to avoid your network plugin running one ecs node? [y/n]
y
Is connected with intranet............... true
Is customized node init script added..... true
Is nodeaffinity added.................... true
Is terway addon installed................ true
nodepool check passed. [help doc: ]

创建自动弹性伸缩节点池的前置检查

执行以下命令,完成创建自动弹性伸缩节点池的前置检查。

onectl nodepool check --enable-autoscaler=true

预期输出:

Have you add nodeaffinity to avoid your network plugin running one ecs node? [y/n]
y
Is connected with intranet............... true
Is customized node init script added..... true
Is nodeaffinity added.................... true
Is terway addon installed................ true
Is autoscaler addon installed............ true
nodepool check passed. [help doc: ]
说明 当所有节点池创建的前置检查都通过时,您才可以进一步创建节点池。关于创建节点池的具体操作,请参见创建节点池并扩容

常见问题

使用onectl安装Addon时,onectl后台执行了哪些动作?

使用onectl安装Addon前,请确保您已完成以上步骤一:安装onectl步骤三:配置onectl的操作。以安装日志组件logtail-ds为例,安装时后台会执行的操作如下。

  1. 检查RAM用户账号下是否已创建名为externalK8sPolicy-logtail-ds的自定义策略。若不存在,请创建此自定义策略并授权给RAM用户。具体操作,请参见步骤二:为RAM用户授权
  2. 使用您已获取的AK在注册集群中创建名为alibaba-addon-secret的Secret资源。
  3. 调用OpenAPI安装logtail-ds日志组件。更多信息,请参见安装集群组件

节点池创建的前置检查失败后如何处理?

  • Is connected with intranet............... false

    您需要使用注册集群的内网导入代理配置接入IDC自建集群。在此之前,请确保云上云下网络已互联互通。更多信息,请参见混合网络概述

  • Is customized node init script added..... false

    Kubernetes集群的初始化方式和集群版本都要保持一致。您在使用注册集群节点池为IDC自建集群扩容云上ECS之前,需要首先制作和配置自定义的节点初始化脚本。此节点初始化脚本的内容需要跟您IDC自建集群的节点初始化方式保持一致。在此基础上,请配置注册集群下发的ALIBABA_CLOUD_LABELSALIBABA_CLOUD_NODE_NAME等环境变量,这些变量将会在ECS初始化时赋值。更多信息,请参见使用自定义节点添加脚本

  • Is nodeaffinity added.................... false

    云下IDC自建集群扩容云上ECS的集群,需要保证云下节点只运行云下集群的容器网络组件,云上ECS只运行Terway容器网络组件。

    注册集群节点池扩容的云上ECS都默认打标签alibabacloud.com/external=true。您需要在云下集群的容器网络组件中添加nodeAffinity,使其不要被调度到云上ECS。更多信息,请参见场景二:本地数据中心容器网络模式为BGP网络

  • Is terway addon installed................ false

    云下IDC自建集群中的节点运行云下集群的容器网络组件,云上ECS只能运行Terway容器网络组件,在使用节点池扩容ECS之前,请确保在注册集群中已安装Terway组件且运行正常。 您可以通过onectl addon install terway-eniip进行一键安装和配置Terway组件。

  • Is autoscaler addon installed............ false

    如果您需要启用自动弹性伸缩节点池,请确保在注册集群中已安装autoscaler组件且运行正常。您可以通过onectl addon install autoscaler进行一键安装和配置autoscaler组件。