你是否在寻找一份在 Debian 11(Bullseye)上安装 Kubernetes 集群的简易指南?
这份分步指南将向你展示如何使用 Kubeadm 工具在 Debian 11 上安装 Kubernetes 集群。
Kubernetes(k8s)集群包含主控节点和工作节点,用于运行容器化的应用程序。主控节点作为控制平面,工作节点为实际工作负载提供环境。
前置条件:
- 已安装 Debian 11
- 2 CPU / vCPU
- 2 GB RAM
- 20 GB 空闲硬盘空间
- 有管理员权限的 sudo 用户
- 稳定的网络连接
实验环境配置:
在本文中,我使用了 3 个 Debian 11 系统的节点,配置如下
- 主控节点(
k8s-master
) -- 192.168.1.236 - 工作节点 1(
k8s-worker1
) -- 192.168.1.237 - 工作节点 2(
k8s-worker2
) -- 192.168.1.238
事不宜迟,我们直接进入安装步骤。
1、设置主机名和更新 /etc/hosts 文件 {#1-%E8%AE%BE%E7%BD%AE%E4%B8%BB%E6%9C%BA%E5%90%8D%E5%92%8C%E6%9B%B4%E6%96%B0-etchosts-%E6%96%87%E4%BB%B6}
在主控节点和工作节点上使用 hostnamectl
命令来设置主机名:
$ sudo hostnamectl set-hostname "k8s-master" // 在主控节点运行
$ sudo hostnamectl set-hostname "k8s-worker1" // 在工作节点 1 运行
$ sudo hostnamectl set-hostname "k8s-worker2" // 在工作节点 2 运行
在所有节点的 /etc/hosts
文件末尾添加下面几行内容:
192.168.1.236 k8s-master
192.168.1.237 k8s-worker1
192.168.1.238 k8s-worker2
2、在所有节点上关闭交换分区 {#2-%E5%9C%A8%E6%89%80%E6%9C%89%E8%8A%82%E7%82%B9%E4%B8%8A%E5%85%B3%E9%97%AD%E4%BA%A4%E6%8D%A2%E5%88%86%E5%8C%BA}
我推荐关闭交换分区,以便更丝滑地使用 kubelet
。在所有节点上执行以下命令来关闭交换分区:
$ sudo swapoff -a
$ sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
3、配置 Kubernetes 集群相关的防火墙规则 {#3-%E9%85%8D%E7%BD%AE-kubernetes-%E9%9B%86%E7%BE%A4%E7%9B%B8%E5%85%B3%E7%9A%84%E9%98%B2%E7%81%AB%E5%A2%99%E8%A7%84%E5%88%99}
如果你的操作系统防火墙是打开的,请分别在主控节点和工作节点允许以下的端口。
在主控节点,执行:
$ sudo ufw allow 6443/tcp
$ sudo ufw allow 2379/tcp
$ sudo ufw allow 2380/tcp
$ sudo ufw allow 10250/tcp
$ sudo ufw allow 10251/tcp
$ sudo ufw allow 10252/tcp
$ sudo ufw allow 10255/tcp
$ sudo ufw reload
在工作节点,执行:
$ sudo ufw allow 10250/tcp
$ sudo ufw allow 30000:32767/tcp
$ sudo ufw reload
注意:如果你的 Debian 11 系统防火墙是关闭的,可以跳过此步骤。
4、在所有节点安装 Containerd 运行时 {#4-%E5%9C%A8%E6%89%80%E6%9C%89%E8%8A%82%E7%82%B9%E5%AE%89%E8%A3%85-containerd-%E8%BF%90%E8%A1%8C%E6%97%B6}
Containerd 是容器运行时的行业标准,所有节点必须安装 Containerd。
先在所有节点上配置如下的核心参数,再安装 Containerd。
$ cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
$ sudo modprobe overlay
$ sudo modprobe br_netfilter
$ cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-ip6tables = 1 EOF
运行如下命令,以使上面的更改生效:
$ sudo sysctl --system
现在,在所有节点上运行如下 apt
命令来安装 Conatinerd。
$ sudo apt update
$ sudo apt -y install containerd
在所有节点上运行如下命令来配置 Containerd:
$ containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1
在所有节点上设置 cgroupdriver
为 systemd
,编辑 /etc/containerd/config.toml
文件,找到 [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
部分,添加一行内容:SystemdCgroup = true
:
$ sudo vi /etc/containerd/config.toml
保存并退出文件。
在所有节点上重启并启用 containerd
服务:
$ sudo systemctl restart containerd
$ sudo systemctl enable containerd
5、添加 Kubernetes Apt 库 {#5-%E6%B7%BB%E5%8A%A0-kubernetes-apt-%E5%BA%93}
执行以下命令,添加 Kubernetes Apt 库:
$ sudo apt install gnupg gnupg2 curl software-properties-common -y
$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/cgoogle.gpg
$ sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
6、在所有节点上安装 kubelet、kubectl 和 kubeadm {#6-%E5%9C%A8%E6%89%80%E6%9C%89%E8%8A%82%E7%82%B9%E4%B8%8A%E5%AE%89%E8%A3%85-kubelet-kubectl-%E5%92%8C-kubeadm}
在所有节点上执行以下 apt
命令,安装 Kubernetes 集群组件,如 kubelet
、kubectl
以及 kubeadm
。
$ sudo apt update
$ sudo apt install kubelet kubeadm kubectl -y
$ sudo apt-mark hold kubelet kubeadm kubectl
7、使用 Kubeadm 创建 Kubernetes 集群 {#7-%E4%BD%BF%E7%94%A8-kubeadm-%E5%88%9B%E5%BB%BA-kubernetes-%E9%9B%86%E7%BE%A4}
现在我们可以创建 Kubernetes 集群了,在主控节点上执行以下命令:
$ sudo kubeadm init --control-plane-endpoint=k8s-master
命令输出:
出现以上内容,说明控制平面初始化成功。在输出中,有普通用户与集群交互的命令,也有把任何工作节点加入到集群的命令。
要开始与集群进行交互,请在主控节点上运行以下命令:
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
执行以下 kubectl
命令来获取节点和集群的信息:
$ kubectl get nodes
$ kubectl cluster-info
以上命令的输出:
通过执行 kubeadm join
命令来把两个工作节点加入到集群。
注意:请从 kubeadm init
命令的输出中复制完整的命令。在我的例子中,命令如下:
$ sudo kubeadm join k8s-master:6443 --token ta622t.enl212euq7z87mgj \
--discovery-token-ca-cert-hash sha256:2be58f54458d0e788c96b8841f811069019161f9a3dd8502a38c773e5c6ead17
在工作节点 1 上的输出如下:
在工作节点 2 上的输出如下:
在主控节点上执行以下命令,检查节点的状态:
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master NotReady control-plane 23m v1.25.0
k8s-worker1 NotReady <none> 9m27s v1.25.0
k8s-worker2 NotReady <none> 2m19s v1.25.0
$
为了使节点状态变为 ready
,我们需要安装容器荚Pod网络插件,如 Calico 或 flannel。
8、安装 Calico Pod 网络插件 {#8-%E5%AE%89%E8%A3%85-calico-pod-%E7%BD%91%E7%BB%9C%E6%8F%92%E4%BB%B6}
在主控节点上执行以下命令安装 Calico:
$ kubectl apply -f https://projectcalico.docs.tigera.io/manifests/calico.yaml
输出:
在所有节点上执行以下命令,配置防火墙允许 Calico 的端口:
$ sudo ufw allow 179/tcp
$ sudo ufw allow 4789/udp
$ sudo ufw allow 51820/udp
$ sudo ufw allow 51821/udp
$ sudo ufw allow 4789/udp
$ sudo ufw reload
执行以下命令检查下 Calico 的状态:
$ kubectl get pods -n kube-system
完美!现在再检查下节点状态:
非常棒!上面的输出说明主控节点和工作节点的状态都是 ready
。现在这个集群可以正常工作了。
9、检查 Kubernetes 集群安装是否正确 {#9-%E6%A3%80%E6%9F%A5-kubernetes-%E9%9B%86%E7%BE%A4%E5%AE%89%E8%A3%85%E6%98%AF%E5%90%A6%E6%AD%A3%E7%A1%AE}
我们尝试通过 deployment
命令来部署基于 Nginx 的应用程序,来验证 Kubernetes 集群的安装是否正确。执行以下命令:
$ kubectl create deployment nginx-app --image=nginx --replicas 2
$ kubectl expose deployment nginx-app --name=nginx-web-svc --type NodePort --port 80 --target-port 80
$ kubectl describe svc nginx-web-svc
以上命令的输出:
使用以下的 curl
命令通过节点端口 30036 来访问基于 nginx 的应用程序。
注意:在 curl
命令中,可以使用两个工作节点任一的主机名。
$ curl http://k8s-worker1:30036
以上的输出说明我们可以正常访问基于 nginx 的应用程序了。
以上为全部内容。希望本文对你有用,参照本文可以在 Debian 11 上正常安装 Kubernetes 集群。如有任何问题,请在下面评论区告诉我。
via: https://www.linuxtechi.com/install-kubernetes-cluster-on-debian/
作者:Pradeep Kumar 选题:lkxed 译者:lxbwolf 校对:wxy