首页 / 平台管理 / 集群管理 / 集群 / 接入标准 Kubernetes 集群

接入标准 Kubernetes 集群

支持将通过 kubeadm 部署的标准原生 Kubernetes 集群接入平台统一管理。

名词解释

操作 说明
托管版 Kubernetes 集群 公有云厂商提供的一种 Kubernetes 集群类型,这个集群中的 Master 节点及其中组件由公有云厂商进行管理,用户不可登录,也无法管理 Master 节点。
非托管版 Kubernetes 集群 与托管版对应,部分公有云厂商也提供了由用户自己管理 Master 节点的集群,如阿里云 ACK 专有版集群、腾讯云 TKE 独立集群等。

前提条件

获取镜像仓库地址

判断镜像仓库是否需要额外配置

(可选)信任非安全镜像仓库

注意:若上一步的检测通过,请跳过本小节。

根据您所使用的容器运行时,配置镜像仓库信任的步骤也有不同。文档支持 docker 和 containerd 两种容器进行时。

Docker 运行时

操作步骤

  1. 在被接入集群的 所有节点 上分别执行以下命令:

    • 备份 docker 配置文件。
    mkdir -p '/var/backup-docker-confs/'
    if ! [ -f /etc/docker/daemon.json ]; then
        echo '找不到 docker 配置文件,请检查 docker 是否正确安装。如果仍然不能排障,可申请技术支持。'
        exit 1
    else
        cp /etc/docker/daemon.json "/var/backup-docker-confs/daemon.json_$(date -u +%F_%R)"
    fi
    • 修改 /etc/docker/daemon.json 文件。

    确保文件中存在 insecure-registries 参数,并添加第一步中获取的 镜像仓库地址。 以配置多个镜像地址的场景为例,参考配置如下:

    {
        "insecure-registries": [
            "<镜像仓库地址>",
            "192.168.134.43"
        ],
        "registry-mirrors": ["https://6telrzl8.mirror.aliyuncs.com"],
        "log-opts": {
          "max-size": "100m",
          "max-file": "2"
        },
        "live-restore": true,
        "metrics-addr": "0.0.0.0:9323",
        "experimental": true,
        "storage-driver": "overlay2"
    }
  2. (可选)使用 jq 命令检查 Docker 配置文件语法。

    提示:请确保主机上已安装 jq,可参考命令:yum install jq -y

    jq . < /etc/docker/daemon.json
  3. 重启所有节点 Docker 服务。

    systemctl daemon-reload
    systemctl restart docker

Containerd 非安全镜像仓库配置

注意

  1. 在被接入集群的 所有节点 上分别执行以下命令:

    • 备份配置文件
    mkdir -p '/var/backup-containerd-confs/'
    if ! [ -f /etc/containerd/config.toml ]; then
        echo '找不到 containerd 配置文件,请检查 containerd 是否正确安装。如果仍然不能排障,可申请技术支持。'
        exit 1
    else
        cp /etc/containerd/config.toml /var/backup-containerd-confs/config.toml_$(date +%F_%T)
    fi
    • 获取 Containerd 容器运行时版本
    # 获取环境上 containerd 的版本
    # 请比较该版本号是否小于 v1.6,并在接下来的文档中选择合适的步骤操作
    ctr --version | grep -Eo 'v[0-9]+\.[0-9]+\.[0-9]+'

Containerd v1.4 v1.5 非安全镜像仓库配置

  1. 在被接入集群的 所有节点 上分别执行以下命令:

    • 修改 /etc/containerd/config.toml 配置文件
    # 以下为需要添加到配置文件中的内容示例
    # 方括号括起来的行称为节点,在添加以下内容到配置文件时,请注意检查配置文件中是否有同名的节点
    # 若已经存在同名的节点,请将节点下的内容进行合并
    [plugins."io.containerd.grpc.v1.cri".registry]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors]  # 该配置下写多个仓库地址的endpoint
            [plugins."io.containerd.grpc.v1.cri".registry.mirrors."<镜像仓库地址>"]
                endpoint = ["https://<镜像仓库地址>", "http://<镜像仓库地址>"]
            [plugins."io.containerd.grpc.v1.cri".registry.mirrors."192.168.134.43"]
                endpoint = ["https://192.168.134.43", "http://192.168.134.43"]
        [plugins."io.containerd.grpc.v1.cri".registry.configs]
            [plugins."io.containerd.grpc.v1.cri".registry.configs."<镜像仓库地址>".tls]
                insecure_skip_verify = true
            [plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.134.43".tls]
                insecure_skip_verify = true
    • 重启 Containerd 服务。
    systemctl restart containerd

Containerd v1.6 非安全镜像仓库配置

  1. 在被接入集群的 所有节点 上分别执行以下命令:

    • 判断配置文件中是否存在 config_path 字段。
    if ! grep -qF 'config_path' /etc/containerd/config.toml; then
        if grep -qE '\[plugins."io.containerd.grpc.v1.cri".registry.(mirrors|configs)(\.|\])' /etc/containerconfig.toml; then
            echo '请按照“Containerd v1.4 v1.5 非安全镜像仓库配置”一节的说明操作。'
        else
            cat >> /etc/containerd/config.toml << 'EOF'
    [plugins."io.containerd.grpc.v1.cri".registry]
        config_path = "/etc/containerd/certs.d/"
    EOF
        fi
    fi
    
    config_path_var=$(grep -F '/etc/containerd/certs.d' /etc/containerd/config.toml)
    if [ -z "$config_path_var" ]; then
       echo '配置文件中 config_path 字段的值不合预期,请检查!'
       exit 1
    fi
    • 创建 hosts.toml 文件。

    如果上一步执行的命令提示 请按照“Containerd v1.4 v1.5 非安全镜像仓库配置”一节的说明操作。 请参考 Containerd v1.4 v1.5 非安全镜像仓库配置 一节。

    REGISTRY=<“获取镜像仓库地址”一节中获得的镜像仓库地址>
    
    mkdir -p "/etc/containerd/certs.d/$REGISTRY/"
    cat > "/etc/containerd/certs.d/$REGISTRY/hosts.toml" << EOF
    server = "$REGISTRY"
    [host."http://$REGISTRY"]
      capabilities = ["pull", "resolve", "push"]
      skip_verify = true
    [host."https://$REGISTRY"]
      capabilities = ["pull", "resolve", "push"]
      skip_verify = true
    EOF
    • 重启 Containerd 服务。
    systemctl restart containerd

获取集群信息

提示:以下两种方式选择其一即可。

方法一:(推荐)获取集群的 KubeConfig 文件

集群的 KubeConfig 文件中包含了访问集群所需的配置信息,例如:集群地址、CA 证书、认证信息等。

根据实际的网络情况和集群配置,将集群控制节点上的 .kube/config 文件拷贝至本地,准备在平台图形化界面中解析该文件,可参考 scp 命令:

scp -r root@<集群控制节点 IP>:.kube/config <本地地址>

方法二:获取集群令牌、访问地址、CA 证书

  1. 登录集群的控制节点。

    • 若 Kubernetes 版本低于 1.24,请执行以下命令行生成并获取具有管理员权限的令牌。

      echo "
      apiVersion: v1
      kind: ServiceAccount
      metadata:
       namespace: default
       name: cls-access
      ---
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRoleBinding
      metadata:
       name: cls-access
      roleRef:
       apiGroup: rbac.authorization.k8s.io
       kind: ClusterRole
       name: cluster-admin
      subjects:
       - kind: ServiceAccount
         namespace: default
         name: cls-access
      " | kubectl apply -f -  && \
      kubectl describe secret \
      -n default $(kubectl describe sa cls-access -n default \
      |grep  Tokens: |awk '{print $2}') |grep token:
    • 若 Kubernetes 版本大于等于 1.24,请执行以下命令行生成并获取具有管理员权限的令牌。

      echo "
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        namespace: default
        name: cls-access
      ---
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRoleBinding
      metadata:
        name: cls-access
      roleRef:
        apiGroup: rbac.authorization.k8s.io
        kind: ClusterRole
        name: cluster-admin
      subjects:
        - kind: ServiceAccount
          namespace: default
          name: cls-access
      " | kubectl apply -f -  && \
      kubectl create token  cls-access  --namespace default --duration 3650h
  2. 输出示例如下图所示。

  3. 执行以下命令行,获取集群的访问地址和 CA 证书(需经过 Base64 解码)。

    # 查看集群的访问地址(server)
    cat .kube/config
    # 获取经过 Base64 解码后的 CA 证书
    cat .kube/config | grep  certificate-authority-data | awk '{print $NF}' | base64 -d

接入集群

  1. 在左侧导航栏中,单击 集群管理 > 集群

  2. 单击 接入集群

  3. 参照以下说明,配置相关参数。

    参数 说明
    镜像仓库 存储集群所需平台组件镜像的仓库。
    - 平台默认:部署 global 时配置的 平台部署 镜像仓库。
    - 外部:提前搭建的外部镜像仓库。需输入访问镜像仓库的 私有镜像仓库地址端口用户名密码
    集群信息 提示:可手动填写或上传 KubeConfig 文件由平台自动解析并填写。

    解析 KubeConfig 文件:上传已获取的 KubeConfig 文件后,平台会自动解析并填写 集群信息,您可修改自动填写的信息。

    集群地址:集群对外暴露 API Server 的访问地址,用于平台访问集群的 API Server。

    CA 证书:集群的 CA 证书。
    注意:手动输入时,需输入经过 Base64 解码的证书。

    认证方式:访问集群的认证方式,需要使用具备 集群管理权限令牌(Token)或 证书认证(客户端证书及秘钥) 进行认证。
  4. 单击 检查连通性 以检查与接入集群的网络连通性并自动识别接入集群的类型,集群类型将以表单右上角角标的形式展现。

  5. 连通性检查通过后,单击 接入,并确认。

    提示

    • 单击处于 接入中 状态的集群右侧的 图标,可在弹出的 执行进度 对话框中,查看集群的执行进度(status.conditions)。
    • 集群接入成功后,在集群列表可查看集群的关键信息,集群的状态显示为正常,并可执行集群相关操作。

后续操作

部署插件

集群接入成功后,您可前往 插件管理 选择为集群部署必须的插件,包括监控组件、日志采集组件、日志存储组件等。

配置集群审计功能

集群接入成功后,需要修改集群上审计相关的配置,才能通过平台正常采集集群的审计数据。具体操作请参考 如何配置接入平台的标准 Kubernetes 集群的审计功能?

启用 Pod Debug 功能

集群接入成功后,如需使用 Pod Debug 功能,请参考 如何在接入集群中启用 Pod Debug 功能?

纳管集群下命名空间

集群接入成功后,您可通过基于集群 创建项目 ,或通过 添加项目关联集群 的方式将集群添加至已有项目,可将新接入的集群关联至项目。

进而,通过 导入命名空间 操作,将集群下已有的 Kubernetes 命名空间纳入到平台的项目下进行管理。

常见问题

接入集群后添加节点按钮置灰,如何添加节点?

托管版 Kubernetes 集群非托管版 Kubernetes 集群 都不支持在平台界面添加节点,请于后台添加或联系集群供应商添加。

接入集群的证书管理功能支持哪些证书?

  1. Kubernetes 证书:所有接入集群仅支持在平台证书管理界面查看 APIServer 证书信息,不支持查看其他 Kubernetes 证书且不支持自动轮换。

  2. 平台组件证书:所有接入集群可在平台证书管理界面查看平台组件证书信息且支持自动轮换。

哪些功能不支持接入的 Kubernetes 集群?

如何解决接入集群的运行时组件为 Containerd 时,部署分布式存储失败的问题?

当接入集群的运行时组件为 Containerd 时,部署分布式存储将会失败。为解决该问题,您需要在集群的 所有节点 上手动修改 Containerd 配置信息,并重启 Containerd。

说明:若您在部署分布式存储前执行下述步骤修改 Containerd 配置,则无需执行步骤四。

  1. 登录集群节点,编辑 /etc/systemd/system/containerd.service 文件,将 LimitNOFILE 参数值修改为 1048576

  2. 执行命令 systemctl daemon-reload 重新加载配置。

  3. 执行命令 systemctl restart containerd 重启 Containerd。

  4. 在集群控制节点执行命令 kubectl delete pod --all -n rook-ceph,重启 rook-ceph 命名空间内的所有 Pod,以使配置生效。