1. 一些真心话
在开始之前,需要将重要的事情说三遍:一定要认真阅读官方文档!一定要认真阅读官方文档!!一定要认真阅读官方文档!!!
我在搭建k8s之前看了网上很多教程,也尝试的执行了几次,但都是失败而告终(有的是网络原因,你懂得;有的是由于版本问题),因为k8s一直在迭代升级,某个版本可能会有重要更新,导致之前的安装教程失效。所以才强调:一定要以官方文档为主,最终解释权也在官方文档。
这里给出官方文档链接使用 kubeadm 引导集群 | Kubernetes。有一点需要提醒下,文档中能点击的链接一定要多留心看一下,防止掉坑。
2. 环境准备
我是在Macbook Pro(CPU为M1 Pro)上使用虚拟机搭建的,使用的操作系统是Ubuntu 20.04 LTS。
虚拟机说明如下:
机器名(hostname) | 配置 | 虚拟机IP地址 | 说明 |
k8s-master | 2核心4GB | 192.168.181.130 | k8s的控制平面,目前master是单点 |
k8s-worker1 | 2核心4GB | 192.168.181.131 | k8s的Node节点,主要运来运行k8s pod |
k8s-worker2 | 2核心4GB | 192.168.181.132 | k8s的Node节点,主要运来运行k8s pod |
因为需要12GB的内存,所以对你的宿主机有一些要求,最少8核心16GB,推荐8核心32GB。
3. master节点配置与安装
注意--》操作系统配置:
禁止swap:
sudo swapoff -a
配置网络相关:
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
# 设置所需的 sysctl 参数,参数在重新启动后保持不变
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
# 应用 sysctl 参数而不重新启动
sudo sysctl --system
修改hostname:
sudo hostnamectl set-hostname k8s-master
修改/etc/hosts配置文件:
127.0.0.1 localhost
# 127.0.1.1 k8s-master
192.168.181.130 k8s-master
3.1 安装容器运行时
使用容器运行时可以参考这篇文档容器运行时安装与配置。这里我使用的是containerd,安装方式可以参考containerd/getting-started.md at main · containerd/containerd (github.com)。本文采用的是apt安装方式:
sudo apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=arm64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt install -y containerd.io
生成containerd默认配置文件并修改相应设置:
containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1
sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
sudo sed -i 's/k8s.gcr.io/registry.aliyuncs.com\/google_containers/g' /etc/containerd/config.toml
重启containerd并设置开机启动:
sudo systemctl restart containerd
sudo systemctl enable containerd
3.2 安装 kubeadm、kubelet 和 kubectl
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
sudo apt-add-repository "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main"
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
使用kubeadm version
查看k8s版本。
3.3 配置cgroup驱动
cgroup推荐使用 systemd
驱动,不推荐 cgroupfs
驱动。3.1和3.2已经配置好,这里只是提下,官方建议使用systemd驱动,我们按照官方建议操作即可。
3.4 使用 kubeadm 创建集群
更新:我这里使用的是aliyun源,因此可以正常初始化,如果使用K8s的源,这里你就要栽大跟头了(网络问题):
sudo kubeadm init --kubernetes-version=v1.24.4 --image-repository registry.aliyuncs.com/google_containers --control-plane-endpoint=192.168.181.130 --pod-network-cidr=192.168.0.0/16 --v=5
control-plane-endpoint这个设置成你的master节点的IP即可。pod-network-cidr这个取决于你使用的网络插件(见3.5内容)。
然而就是这么一条命令,之前花了我很多时间,添加了好多参数,然而最终还是失败。所以如果需要相关参数,一定要认真查看官方文档啊!官方的才是解释最清楚的。
这条命令我经常遇到的一个问题是kubelet找不到k8s-master。原因大概率是网络问题,一直没能解决,所以换源后就正常了!
如果这里安装失败的话,使用sudo kubeadm reset -f
重置然后重新执行上述kubeadm init
命令。
这条命令需要运行一段时间,貌似时长取决于你的网速。运行好后会有一大段文本,其中最后几行的文本比较重要,为了完整性,我将我运行的整个文本都贴出来了:
xxx
然后执行下面的命令就OK了:
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的权限。
下面这条命令可以添加控制平面节点:
kubeadm join 192.168.181.130:6443 --token y379vb.8p3j5g7szhf9jtmz \
--discovery-token-ca-cert-hash sha256:883270368ba74e3949c58f827ec5c02144e05da350fce65cb51db0dd88a4206c \
--control-plane
下面这条命令可以添加工作节点:
kubeadm join 192.168.181.130:6443 --token y379vb.8p3j5g7szhf9jtmz \
--discovery-token-ca-cert-hash sha256:883270368ba74e3949c58f827ec5c02144e05da350fce65cb51db0dd88a4206c
这两条命令都是前面那一大段文本生成的,你用你自己生成的,我这里只是展示。
3.5 安装网络附加组件
执行kubectl get po -n kube-system
后你看到coredns貌似没有正常运行,就是因为缺少网络附加组件,官方文档说就是这么设计的,所以我们需要安装一个网络组件。详细可以参考k8s网络附加组件这篇官方文档。
这里我选用了Calico。Calico的文档可以参考这里:Quickstart for Calico on Kubernetes (tigera.io)
安装Calico的命令如下:
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.24.0/manifests/tigera-operator.yaml
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.24.0/manifests/custom-resources.yaml
确认下是否正常运行:
kubectl get pods -n calico-system
执行下面命令使master参与调度(可选,optional):
kubectl taint nodes --all node-role.kubernetes.io/control-plane- node-role.kubernetes.io/master-
查看节点情况:
kubectl get nodes -o wide
4 woker节点配置与安装
将3.1、3.2的内容在worker节点执行一遍。然后运行kubeadm init输出的kubeadm join命令即可:
到此你的3节点(1个master,2个 worker)K8s集群搭建成功,祝你顺利!!!
参考文档:
- Ubuntu 22.04 上安装 Kubernetes 1.24.3 - 腾讯云开发者社区-腾讯云 (tencent.com)【强力推荐】
- k8s创建完集群之后coredns一直处于pending状态 - 风的低吟 - 博客园 (cnblogs.com)
- (75条消息) Ubuntu 安装k8s集群_萌褚的博客-CSDN博客_k8s ubuntu集群搭建