Redian新闻
>
如何用 Kubeadm 在 Debian 11 上安装 Kubernetes 集群 | Linux 中国

如何用 Kubeadm 在 Debian 11 上安装 Kubernetes 集群 | Linux 中国

科技
 
导读:你是否在寻找一份在 Debian 11(Bullseye)上安装 Kubernetes 集群的简易指南?
本文字数:5979,阅读时长大约:7分钟

你是否在寻找一份在 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 文件

在主控节点和工作节点上使用 hostnamectl 命令来设置主机名:

  1. $ sudo hostnamectl set-hostname "k8s-master"       // 在主控节点运行
  2. $ sudo hostnamectl set-hostname "k8s-worker1"      // 在工作节点 1 运行
  3. $ sudo hostnamectl set-hostname "k8s-worker2"      // 在工作节点 2 运行

在所有节点的 /etc/hosts 文件末尾添加下面几行内容:

  1. 192.168.1.236       k8s-master
  2. 192.168.1.237       k8s-worker1
  3. 192.168.1.238       k8s-worker2

2、在所有节点上关闭交换分区

我推荐关闭交换分区,以便更丝滑地使用 kubelet。在所有节点上执行以下命令来关闭交换分区:

  1. $ sudo swapoff -a
  2. $ sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

3、配置 Kubernetes 集群相关的防火墙规则

如果你的操作系统防火墙是打开的,请分别在主控节点和工作节点允许以下的端口。

在主控节点,执行:

  1. $ sudo ufw allow 6443/tcp
  2. $ sudo ufw allow 2379/tcp
  3. $ sudo ufw allow 2380/tcp
  4. $ sudo ufw allow 10250/tcp
  5. $ sudo ufw allow 10251/tcp
  6. $ sudo ufw allow 10252/tcp
  7. $ sudo ufw allow 10255/tcp
  8. $ sudo ufw reload

在工作节点,执行:

  1. $ sudo ufw allow 10250/tcp
  2. $ sudo ufw allow 30000:32767/tcp
  3. $ sudo ufw reload

注意:如果你的 Debian 11 系统防火墙是关闭的,可以跳过此步骤。

4、在所有节点安装 Containerd 运行时

Containerd 是容器运行时的行业标准,所有节点必须安装 Containerd。

先在所有节点上配置如下的核心参数,再安装 Containerd。

  1. $ cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
  2. overlay
  3. br_netfilter
  4. EOF
  5. $ sudo modprobe overlay
  6. $ sudo modprobe br_netfilter
  7. $ cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-k8s.conf
  8. net.bridge.bridge-nf-call-iptables = 1
  9. net.ipv4.ip_forward = 1
  10. net.bridge.bridge-nf-call-ip6tables = 1
  11. EOF

运行如下命令,以使上面的更改生效:

  1. $ sudo sysctl --system

现在,在所有节点上运行如下 apt 命令来安装 Conatinerd。

  1. $ sudo apt  update
  2. $ sudo apt -y install containerd

在所有节点上运行如下命令来配置 Containerd:

  1. $ 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

  1. $ sudo vi /etc/containerd/config.toml

systemdCgroup-true-containerd-config-toml

保存并退出文件。

在所有节点上重启并启用 containerd 服务:

  1. $ sudo systemctl restart containerd
  2. $ sudo systemctl enable containerd

5、添加 Kubernetes Apt 库

执行以下命令,添加 Kubernetes Apt 库:

  1. $ sudo apt install gnupg gnupg2 curl software-properties-common -y
  2. $ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/cgoogle.gpg
  3. $ sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"

6、在所有节点上安装 kubelet、kubectl 和 kubeadm

在所有节点上执行以下 apt 命令,安装 Kubernetes 集群组件,如 kubeletkubectl 以及 kubeadm

  1. $ sudo apt update
  2. $ sudo apt install kubelet kubeadm kubectl -y
  3. $ sudo apt-mark hold kubelet kubeadm kubectl

7、使用 Kubeadm 创建 Kubernetes 集群

现在我们可以创建 Kubernetes 集群了,在主控节点上执行以下命令:

  1. $ sudo kubeadm init --control-plane-endpoint=k8s-master

命令输出:

Kubernetes-Control-Plane-Initialization-Debian11

出现以上内容,说明控制平面初始化成功。在输出中,有普通用户与集群交互的命令,也有把任何工作节点加入到集群的命令。

要开始与集群进行交互,请在主控节点上运行以下命令:

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

执行以下 kubectl 命令来获取节点和集群的信息:

  1. $ kubectl get nodes
  2. $ kubectl cluster-info

以上命令的输出:

Nodes-Cluster-Info-Kubectl

通过执行 kubeadm join 命令来把两个工作节点加入到集群。

注意:请从 kubeadm init 命令的输出中复制完整的命令。在我的例子中,命令如下:

  1. $ sudo kubeadm join k8s-master:6443 --token ta622t.enl212euq7z87mgj \
  2.   --discovery-token-ca-cert-hash sha256:2be58f54458d0e788c96b8841f811069019161f9a3dd8502a38c773e5c6ead17

在工作节点 1 上的输出如下:

Worker-Node1-Join-Kunernetes-Cluster

在工作节点 2 上的输出如下:

Worker-Node2-Join-Kubernetes-Cluster

在主控节点上执行以下命令,检查节点的状态:

  1. $ kubectl get nodes
  2. NAME          STATUS     ROLES           AGE     VERSION
  3. k8s-master    NotReady   control-plane   23m     v1.25.0
  4. k8s-worker1   NotReady   <none>          9m27s   v1.25.0
  5. k8s-worker2   NotReady   <none>          2m19s   v1.25.0
  6. $

为了使节点状态变为 ready,我们需要安装容器荚(Pod)网络插件,如 Calico 或 flannel。

8、安装 Calico Pod 网络插件

在主控节点上执行以下命令安装 Calico:

  1. $ kubectl apply -f https://projectcalico.docs.tigera.io/manifests/calico.yaml

输出:

Install-calico-pod-network-addon-debian11

在所有节点上执行以下命令,配置防火墙允许 Calico 的端口:

  1. $ sudo ufw allow 179/tcp
  2. $ sudo ufw allow 4789/udp
  3. $ sudo ufw allow 51820/udp
  4. $ sudo ufw allow 51821/udp
  5. $ sudo ufw allow 4789/udp
  6. $ sudo ufw reload

执行以下命令检查下 Calico 的状态:

  1. $ kubectl get pods -n kube-system

Calico-Pods-Status-Kuberenetes-Debian11

完美!现在再检查下节点状态:

Nodes-status-after-calico-Installation

非常棒!上面的输出说明主控节点和工作节点的状态都是 ready。现在这个集群可以正常工作了。

9、检查 Kubernetes 集群安装是否正确

我们尝试通过 deployment 命令来部署基于 Nginx 的应用程序,来验证 Kubernetes 集群的安装是否正确。执行以下命令:

  1. $ kubectl create deployment nginx-app --image=nginx --replicas 2
  2. $ kubectl expose deployment nginx-app --name=nginx-web-svc --type NodePort --port 80 --target-port 80
  3. $ kubectl describe svc nginx-web-svc

以上命令的输出:

Nginx-Based-App-Kubernetes-Cluster-Debian11

使用以下的 curl 命令通过节点端口 30036 来访问基于 nginx 的应用程序。

注意:在 curl 命令中,可以使用两个工作节点任一的主机名。

  1. $ curl http://k8s-worker1:30036

Access-Nginx-Based-App-via-NodePort-Kubernetes-Debian11

以上的输出说明我们可以正常访问基于 nginx 的应用程序了。

以上为全部内容。希望本文对你有用,参照本文可以在 Debian 11 上正常安装 Kubernetes 集群。如有任何问题,请在下面评论区告诉我。


via: https://www.linuxtechi.com/install-kubernetes-cluster-on-debian/

作者:Pradeep Kumar 选题:lkxed 译者:lxbwolf 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

LCTT 译者 :Xiaobin.Liu
🌟🌟🌟🌟
翻译: 47.0 篇
|
贡献: 1092 天
2019-11-30
2022-11-25
https://linux.cn/lctt/lxbwolf
欢迎遵照 CC-BY-SA 协议规定转载,
如需转载,请在文章下留言 “转载:公众号名称”,
我们将为您添加白名单,授权“转载文章时可以修改”。

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
你现在可以在 Arch Linux 上安装 Unity 7.6 桌面了 | Linux 中国Kubernetes 1.26 版本正式发布:改进 Windows 支持,加强网络安全和管理功能2022的九月琐碎:在路上优化 Kubernetes 中的 Java 无服务器函数 | Linux 中国如何在最小安装的 CentOS、RHEL、Rocky Linux 中设置互联网 | Linux 中国报告称Kubernetes 安全大量使用开源解决方案在混合云下,我们将Kubernetes与Fluid结合后性能提升了30%如何通过 chroot 恢复 Arch Linux 安装 | Linux 中国Kubernetes是如何实现数据持久化存储的?如何在 Arch Linux 中安装 elementary OS 的 Pantheon 桌面 | Linux 中国一文读懂Kubernetes存储设计在 Ubuntu 上安装 WoeUSB 来创建一个可启动 Windows USB | Linux 中国娄岩一周诗词四首Kubernetes上千规模Pod最佳实践完整指南:使用 VirtualBox 在 Windows 上安装 Ubuntu | Linux 中国如何在 Ubuntu 和其他相关 Linux 中安装 Python 3.10 | Linux 中国Kubernetes入门之Pod健康状态监测机制后Kubernetes时代的未来?Wasmer 3.0 发布,可在浏览器外运行 WebAssembly关于毛主席遗体的处置意见Kubernetes 1.24发布,支持网络策略状态、上下文日志记录和子资源7 款 DevOps 工具管理 KubernetesKubernetes 缺少的多租户功能,你可以通过这些方式实现如何在 Ubuntu 等 Linux 中安装 Python 3.11 | Linux 中国使用 PowerFlex 在 Kubernetes 平台上部署 Microsoft SQL Server 大数据集群浅聊上海百年风情史老照片:80年代的纽约如何在 RHEL 9 上安装 Node.js | Linux 中国Kubernetes 集群的关闭与重启没有银弹,只有取舍 - Serverless Kubernetes 的思考与征程(一)面向 OLTP 场景,火山引擎跑在 Kubernetes 上的数据库有何不同?| Q推荐准备好在 Debian Linux 上获得 Ubuntu MATE 的体验吧! | Linux 中国16 张图硬核讲解 Kubernetes 网络Kubernetes 能否帮助解决自动化挑战? | Linux 中国2022年回顾:Kubernetes盛行之年如何在 Arch Linux 中安装 Cinnamon 桌面 | Linux 中国
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。