集群初始化(Kubeadm)

虽然 Kubeadm 的安装方式比较简单,并且是官方推荐的安装方式,但是 Kubeadm 安装的 Kubernetes 集群证书有效期默认只有一年,到期后需要进行升级或者更新证书。

目前 Kubernetes 保持一年 3 个大版本的更新,推荐采用升级的方式更新证书。

使用 Kubeadm 安装集群时,需要一个 Master 节点初始化集群,然后加入其他节点即可。初始化集群时,可以直接使用 Kubeadm 命令进行初始化,也可以使用一个配置文件进行初始化,由于使用命令行的形式可能需要配置的字段比较多,因此本示例采用配置文件进行初始化。

1. 配置 Master01 能够免密登录其他节点

# ssh-keygen
# for i in k8s-master01 k8s-node01 k8s-node02 k8s-master02 k8s-master03;do ssh-copy-id -i .ssh/id_rsa.pub $i;done

2. Master 节点创建 kubeadm-config.yaml 配置

  • 创建的是 kubeadm 配置文件,宿主机网段、podSubnet 网段、serviceSubnet 网段不能重复;

  • kubernetesVersion 的值与安装的 Kubeadm 版本一致,可以通过 kubeadm version 命令查询,此处的是 1.27.0;

  • 根据是否配置了高可用,apiServer.certSANs controlPlaneEndpoint 这两个属性需要相应的变化:

    • 如果配置了高可用,这两个属性都是在高可用组件中配置的 VIP 地址。此处是 192.168.10.129,端口号是 16443,即 HAProxy 监听的 IP 地址和端口。

    • 如果没有配置高可用,这两个属性应该设置成唯一的 Master 的地址。此处是 192.168.10.121,端口号是 6443。

  • criSocket 更改为自己的 Runtime。

Master 节点创建 kubeadm-config.yaml 配置文件如下(也可以使用如下命令自动生成 kubeadm config print init-defaults > kubeadm-config.yaml):

kubeadm config print init-defaults > kubeadm-config.yaml
vim kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.10.121           # Master IP(Modified)
  bindPort: 6443
nodeRegistration:
  criSocket: unix:///var/run/containerd/containerd.sock    # (Modified)
  imagePullPolicy: IfNotPresent
  name: k8s-master01                             # Master host(Modified)
  taints:
  - effect: NoSchedule                       #(Added)
    key: node-role.kubernetes.io/master      #(Added)
---
apiServer:
  certSANs:
  - 192.168.10.121                            # Master IP(Added)
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controlPlaneEndpoint: 192.168.10.121:6443     # Master IP:6443(Added)
controllerManager: {}
dns: {}                             
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers # (Modified)
kind: ClusterConfiguration
kubernetesVersion: 1.27.0
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
  podSubnet: 172.16.0.0/12                    # Pod 网段(Added)
scheduler: {}

由于版本和此示例可能不太一致,因此需要更新一下 kubeadm 配置文件:

将 new.yaml 文件复制到其他 Master 节点:

之后所有 Master 节点提前下载镜像,可以节省初始化时间(其他节点不需要更改任何配置,包括 IP 地址也不需要更改):

3. 初始化 Master01 节点

初始化以后会在 /etc/kubernetes 目录下生成对应的证书和配置文件,之后其他 Master 节点加入Master01 即可:

初始化成功以后,会产生 Token 值,用于其他节点加入时使用,因此要记录一下初始化成功生成的token 值(令牌值)

成功后的提示信息:

4. 配置环境变量

初始化成功后,Master01 节点配置 KUBECONFIG 环境变量,之后 Kubectl 即可访问 Kubernetes 集群:

如果使用了高可用的配置,并希望能够在其他 Master 节点上也能够使用 kubectl 命令管理集群,只需要同样执行上述修改环境变量的命令即可!

工作节点上不存在 /etc/kubernetes/admin.conf,如果想在工作节点上也能够使用 kubectl,则需要按照 从控制平面节点以外的计算机控制集群中所述的那样,将 admin.conf 分发到工作节点上后才行。

查看节点状态:

采用初始化安装方式,所有的系统组件均以容器的方式运行并且在 kube-system 命名空间内,此时可以查看 Pod 状态:

最后更新于

这有帮助吗?