使用 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