如何用 Kubeadm 在 Debian 11 上安装 Kubernetes 集群
  

暴躁的钢索 13991人觉得有帮助

{{ttag.title}}
这份分步指南将向你展示如何使用 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 文件
在主控节点和工作节点上使用 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、在所有节点上关闭交换分区
我推荐关闭交换分区,以便更丝滑地使用 kubelet。在所有节点上执行以下命令来关闭交换分区:
  • $ sudo swapoff -a
  • $ sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

3、配置 Kubernetes 集群相关的防火墙规则
如果你的操作系统防火墙是打开的,请分别在主控节点和工作节点允许以下的端口。
在主控节点,执行:
  • $ 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 运行时
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

systemdCgroup-true-containerd-config-toml
保存并退出文件。
在所有节点上重启并启用 containerd 服务:
  • $ sudo systemctl restart containerd
  • $ sudo systemctl enable containerd

5、添加 Kubernetes Apt 库
执行以下命令,添加 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
在所有节点上执行以下 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 集群
现在我们可以创建 Kubernetes 集群了,在主控节点上执行以下命令:
  • $ sudo kubeadm init --control-plane-endpoint=k8s-master

命令输出:
Kubernetes-Control-Plane-Initialization-Debian11
出现以上内容,说明控制平面初始化成功。在输出中,有普通用户与集群交互的命令,也有把任何工作节点加入到集群的命令。
要开始与集群进行交互,请在主控节点上运行以下命令:
  • $ 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

以上命令的输出:
Nodes-Cluster-Info-Kubectl
通过执行 kubeadm join 命令来把两个工作节点加入到集群。
注意:请从 kubeadm init 命令的输出中复制完整的命令。在我的例子中,命令如下:
  • $ sudo kubeadm join k8s-master:6443 --token ta622t.enl212euq7z87mgj \
  •    --discovery-token-ca-cert-hash sha256:2be58f54458d0e788c96b8841f811069019161f9a3dd8502a38c773e5c6ead17

在工作节点 1 上的输出如下:
Worker-Node1-Join-Kunernetes-Cluster
在工作节点 2 上的输出如下:
Worker-Node2-Join-Kubernetes-Cluster
在主控节点上执行以下命令,检查节点的状态:
  • $ 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 网络插件
在主控节点上执行以下命令安装 Calico:
  • $ kubectl apply -f https://projectcalico.docs.tigera.io/manifests/calico.yaml

输出:
Install-calico-pod-network-addon-debian11
在所有节点上执行以下命令,配置防火墙允许 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

Calico-Pods-Status-Kuberenetes-Debian11
完美!现在再检查下节点状态:
Nodes-status-after-calico-Installation
非常棒!上面的输出说明主控节点和工作节点的状态都是 ready。现在这个集群可以正常工作了。
9、检查 Kubernetes 集群安装是否正确
我们尝试通过 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

以上命令的输出:
Nginx-Based-App-Kubernetes-Cluster-Debian11
使用以下的 curl 命令通过节点端口 30036 来访问基于 nginx 的应用程序。
注意:在 curl 命令中,可以使用两个工作节点任一的主机名。
  • $ curl http://k8s-worker1:30036

Access-Nginx-Based-App-via-NodePort-Kubernetes-Debian11
以上的输出说明我们可以正常访问基于 nginx 的应用程序了。

打赏鼓励作者,期待更多好文!

打赏
17人已打赏

白鹭先生 发表于 2022-12-9 14:45
  
楼主的文章图文并茂,清晰易懂
白鹭先生 发表于 2022-12-11 11:05
  
每天学习一点新知识,谢谢分享
木棉 发表于 2022-12-11 11:11
  
每天学习一点点,每天进步一点点。
沙鸥 发表于 2022-12-11 11:17
  
感谢楼主分享,学习一下
嘀嘀柠柠 发表于 2022-12-13 09:54
  
楼主分享的案例很实用,具有典型性,希望有更多这样的干货供我们学习参考,非常感谢!
嘀嘀嗒嗒 发表于 2022-12-13 09:56
  
楼主分析的很详细,不错的实战经验,小白用户一看就懂,非常好的技术干货帖,顶一个!
糖醋排骨 发表于 2022-12-13 10:03
  

感谢楼主分享,对工作很有帮助
新手081074 发表于 2022-12-16 08:22
  

每天学习一点新知识,谢谢分享
暴躁的钢索 发表于 2022-12-16 08:35
  
每天学习一点点,每天进步一点点。
发表新帖
热门标签
全部标签>
每日一问
技术笔记
新版本体验
功能体验
技术咨询
2023技术争霸赛专题
干货满满
技术盲盒
标准化排查
GIF动图学习
产品连连看
安装部署配置
自助服务平台操作指引
秒懂零信任
技术晨报
信服课堂视频
运维工具
深信服技术支持平台
安全攻防
每日一记
答题榜单公布
卧龙计划
畅聊IT
答题自测
云计算知识
通用技术
sangfor周刊
资源访问
排障笔记本
专家问答
技术圆桌
在线直播
MVP
网络基础知识
升级
上网策略
测试报告
日志审计
问题分析处理
流量管理
用户认证
原创分享
解决方案
VPN 对接
项目案例
SANGFOR资讯
专家分享
技术顾问
信服故事
SDP百科
功能咨询
终端接入
授权
设备维护
迁移
地址转换
虚拟机
存储
加速技术
产品预警公告
玩转零信任
信服圈儿
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
社区帮助指南
纪元平台
华北区拉练
天逸直播
以战代练
山东区技术晨报
文档捉虫活动
齐鲁TV
华北区交付直播
每周精选

本版达人

新手89785...

本周建议达人

YangZhe...

本周分享达人