阿里云

简要概述

本文主要介绍如何使用云服务器ECS 自建 K8S 集群,相比官方 ACK 产品有以下优势:

  1. 控制更加灵活。
  2. 没有机型限制,如 ENI 等。

如非特殊情况,线上业务均建议直接购买官方 ACK 产品。

注意:请确保安全组允许以下端口访问,如果其他请自行开通。

协议 端口 用途
TCP 6443 kube-apiserver
TCP 10250 metric-server

云控制器

用于将你的集群连接到云提供商的 API 之上,可以同步路由、Service、Ingress 等创建对应云平台上资源。

通过分离 Kubernetes 和底层云基础设置之间的互操作性逻辑,cloud-controller-manager 组件使云提供商能够以不同于 Kubernetes 主项目的步调发布新特征:

components-of-kubernetes

集群网络模式

方案一:在 VPC 添加路由

假设以下配置:

节点名 归属 VPC 归属交换机 宿主 IP cluster_cidr pod cidr
node1 10.0.0.0/8 10.100.197.0/24 10.100.197.203 192.168.201.0/24 192.168.201.0/28
node2 10.0.0.0/8 10.100.197.0/24 10.100.197.204 192.168.201.0/24 192.168.201.16/28
node3 10.0.0.0/8 10.100.197.0/24 10.100.197.205 192.168.201.0/24 192.168.201.32/28
node4 10.0.0.0/8 10.100.197.0/24 10.100.197.206 192.168.201.0/24 192.168.201.48/28

这样需要在 VPC 上添加路由:

192.168.201.0/28 via node1
192.168.201.16/28 via node2
192.168.201.32/28 via node3
192.168.201.48/28 via node4

在 VPC 上添加路由有以下两种方式:

  1. 规划后集群大小后,在阿里云后台 “专有网络/路由表” 中手动添加;
  2. 配合云控制器 阿里云 CCM 组件自动添加发布主机路由至 VPC。

方案二:独立 VPC 子网

既在阿里云上创建单独的 VPC 字网用于 POD 网段。

该方式依赖主机规格以及可支持的弹性网卡 ENI 数量限制,如需使用建议直接购买 ACK 产品。

方案三:使用封装形式

这种性能低,暂不考虑。

注意事项

组件 CCM 正常但污点未移除

根据 Kubernetes 运行云管理控制器 约定,当 kubelet 配置了 “–cloud-provider=external” 则在节点启动时会自动添加 “node.cloudprovider.kubernetes.io/uninitialized” 污点,当且仅当 CCM 组件运行成功后,会自动移除且设置节点可调度。

如果出现 CCM 组件正常,但各节点污点均未被移除,在排除权限等问题后,可检查配置 “–controllers” 是否有开启 “node” 控制器功能,否则即使 ccm 组件正常运行,节点的污点也是无法被组件移除的。

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: cloud-controller-manager
  namespace: kube-system
spec:
  template:
    spec:
......
      containers:
        - command:
          - /cloud-controller-manager
          - --kubeconfig=/etc/kubernetes/cloud-controller-manager.conf
          - --cloud-config=/etc/kubernetes/config/cloud-config.conf
          # 支持 node,route,service,ingress
          - --controllers=node,route
......

同时以下几个公知标签也不能被自动添加:

beta.kubernetes.io/instance-type
node.kubernetes.io/instance-type

failure-domain.beta.kubernetes.io/region
failure-domain.beta.kubernetes.io/zone

topology.kubernetes.io/zone
topology.kubernetes.io/region



最后修改 2024.05.06: docs: 独立常见问题处理 (96c4309)