Skip to main content

使用 kubeadm 创建 Kubernetes 集群

前言

Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。

本文基于官方文档使用 kubeadm 来创建 Kubernetes 1.20 集群

服务器准备

提前准备好了 3 台 2C8G Debian 10.10 KVM 虚拟机来创建集群。

  • kubernetes-master 192.168.31.14
  • kubernetes-node-1 192.168.31.35
  • kubernetes-node-2 192.168.31.194

禁用 swap

swapoff -a
vim /etc/fstab // 把swap分区注释

runtime 安装

kubernetes 1.20 已经支持 containerd 和 CRI-O 作为运行时,这里为了方便在每台机器上安装并使用 Docker 作为运行时。

curl -sSL https://get.docker.com/ | sh

安装 kubeadm、kubelet 和 kubectl

需要在每台机器上安装以下的软件包:

  • kubeadm:用来初始化集群的指令。
  • kubelet:在集群中的每个节点上用来启动 Pod 和容器等。
  • kubectl:用来与集群通信的命令行工具。

更新 apt 包索引并安装使用 Kubernetes apt 仓库所需要的包:

apt-get update
apt-get install -y apt-transport-https ca-certificates curl

下载 Google Cloud 公开签名秘钥:

curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg

添加 Kubernetes apt 仓库:

echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
更新 apt 包索引,安装 kubelet、kubeadm 和 kubectl,并锁定其版本:
apt update
apt-cache madison kubeadm
apt install -y kubelet=1.20.8-00 kubeadm=1.20.8-00 kubectl=1.20.8-00
apt-mark hold kubelet=1.20.8-00 kubeadm=1.20.8-00 kubectl=1.20.8-00

初始化 Kubernetes 集群

初始化 master 节点

因为后续集群网络使用 flannel ,所以根据官方文档加入对应 pod 网络指定 ip 段参数初始化

kubeadm init --kubernetes-version=v1.20.8 --pod-network-cidr=10.244.0.0/16

为普通用户设置 kubectl

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

为 root 用户设置 kubectl

export KUBECONFIG=/etc/kubernetes/admin.conf
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile

安装 Pod 网络附加组件

这里选用 flannel

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

等待集群网络安装完毕以及 CoreDNS 正常启动

kubectl get pods -n kube-system

加入节点

kubeadm join --token <token> <control-plane-host>:<control-plane-port> --discovery-token-ca-cert-hash sha256:<hash>

如果没有令牌,可以通过在控制平面节点上运行以下命令来获取令牌:

kubeadm token list

查看集群状态

kubectl get nodes

Reference