如何在 Debian 下使用 Kubeadmin 安装 Kubernetes 集群 ?

Kubernetes (k8s) 集群包含用于运行容器应用程序的主节点和工作节点。主节点作为控制计划,工作节点为实际工作提供环境。

必备条件

  • Minimal Installed Debian 11
  • 2 CPU / vCPU
  • 2 GB RAM
  • 20 GB free disk space
  • Sudo User with Admin rights
  • Stable Internet Connectivity

实验准备

在演示中,我使用三个 Debian 11 系统,详细信息如下

  • Master Node (k8s-master) – 192.168.1.236
  • Worker Node 1 (k8s-worker1) – 192.168.1.237
  • Worker Node 2 (k8s-worker2) – 192.168.1.238

(1) 设置主机名并更新 /etc/hosts文件

使用 hostnamectl 命令在主节点和工作者节点上设置主机名。

$ sudo hostnamectl set-hostname "k8s-master"       // Run on master node
$ sudo hostnamectl set-hostname "k8s-worker1"      // Run on 1st worker node
$ sudo hostnamectl set-hostname "k8s-worker2"      // Run on 2nd worker node

在所有节点上的 /ect/hosts 文件中添加以下内容

192.168.1.236       k8s-master
192.168.1.237       k8s-worker1
192.168.1.238       k8s-worker2

(2) 在所有节点上禁用 Swap

为了让 kubelet 能够顺利工作,建议禁用 swap。在主节点和工作节点上运行以下命令关闭交换。

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

(3) 配置 Kubernetes 集群防火墙规则

如果您的 debian 系统上启用了系统防火墙,那么在主节点和工作节点上分别允许以下端口。

在主节点上执行

$ 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 命令,安装 containerd。

$ sudo apt  update
$ sudo apt -y install containerd

配置 containerd,使其与 Kubernetes 一起工作,在所有节点上运行下面的命令

$ containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1

在所有节点上执行以下操作:

编辑 /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

Worker Node 1 输出如下

Worker-Node1-Join-Kunernetes-Cluster

Worker Node 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
$

为了使节点状态就绪,我们必须安装 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 端口,在所有节点的 ufw 命令下运行

$ 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 pods 的状态,运行

$ kubectl get pods -n kube-system

Calico-Pods-Status-Kuberenetes-Debian11

现在再次检查节点状态

Nodes-status-after-calico-Installation

上面的输出表明主节点和工作节点处于就绪状态,这个集群已经为工作负载做好了准备。

(9) 测试 Kubernetes 集群安装

为了测试 Kubernetes 集群安装,让我们尝试通过部署部署基于 nginx 的应用程序。运行下面的命令

$ 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 命令访问基于 nginx 的应用程序。

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

$ curl http://k8s-worker1:30036

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

以上命令的输出表明我们能够访问基于 nginx 的应用程序。

我的开源项目

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值