在 RHEL、CentOS、AlmaLinux、Rocky Linux 中使用 Kubeadm 安装 Kubernetes 集群

在本文中,我们将学习在 RHEL 8 中使用 Kubeadm 安装 Kubernetes 集群,以及它的克隆版本,如 AlmaLinux 8、CentOS 8 和 Rocky Linux 8。

在进入它之前,你必须有一个 对 Kubernetes 概念和架构的基本了解. 在本文中,我们将演示两个节点集群。

要继续安装,我们需要下面提到的基本要求。

  • 最少 2 台主机。
  • 2 个 CPU。
  • 2GB 物理内存 (RAM)。
  • 20GB 磁盘空间。
  • Internet 连接以下载软件包。

1.配置主机名和IP地址

在 Master 和 Workers 中设置主机名并配置主机。 操作系统文件 hosts 用于将主机名或域名转换为 IP 地址。

在这里,我们将有两个主机:

  • ostechmaster – 大师
  • ostechworker – 工人

使用以下命令设置主机名,设置主机名后需要重新启动。

# hostnamectl set-hostname ostechmaster

编辑 /etc/hosts 文件:

# vi /etc/hosts

将服务器和客户端主机名和 IP 地址添加到 /etc/hosts 文件:

配置主机名和 IP 地址

做 ping 测试以确保连通性:

[[email protected] ~]# ping ostechworker
PING ostechworker (172.31.5.141) 56(84) bytes of data.
64 bytes from ostechworker (172.31.5.141): icmp_seq=1 ttl=64 time=0.472 ms
64 bytes from ostechworker (172.31.5.141): icmp_seq=2 ttl=64 time=0.492 ms
64 bytes from ostechworker (172.31.5.141): icmp_seq=3 ttl=64 time=1.43 ms
64 bytes from ostechworker (172.31.5.141): icmp_seq=4 ttl=64 time=0.425 ms

2.禁用SElinux

在 Master 和 Workers 中禁用 SElinux,因此如果禁用 SElinux,所有容器都可以轻松访问主机文件系统。
制作 ‘SELINUX=disabled‘在配置文件中 /etc/selinux/config 使用 vi 编辑器。 需要重新启动以反映 SElinux 更改。

[[email protected] ~]# vi /etc/selinux/config
禁用 SElinux

使用以下命令确保 SElinux 状态。

[[email protected] ~]# sestatus
SELinux status: disabled

3.禁用Master和Worker的交换

需要在所有 Kubernetes 主机(Master 和 Workers)上停用 Swap。 这是 Kubernetes 社区的首选部署方法。 如果未禁用交换,kubelet 服务将不会在 master 和 worker 上启动。

运行以下命令以禁用 SWAP:

[[email protected] ~]# swapoff -a && sed -i '/swap/d' /etc/fstab

4.在防火墙中允许需要的端口

为了使 Kubernetes 组件能够相互交互,某些基本端口必须可用。 以下是要打开的端口以利用 Kubernetes 组件之间的连接。

控制平面/主服务器:

协议方向端口范围目的使用者
TCP入站6443Kubernetes API 服务器全部
TCP入站2379-2380etcd 服务器客户端 APIkube-apiserver, etcd
TCP入站10250Kubelet API自我,控制平面
TCP入站10259kube-调度器自己
TCP入站10257kube-控制器-管理器自己

工作节点:

协议方向 端口范围目的使用者
TCP入站10250Kubelet API自我,控制平面
TCP入站30000-32767节点端口服务全部

要允许所需端口通过防火墙,请运行以下命令。

主节点:

[[email protected] ~]# firewall-cmd --permanent --add-port=6443/tcp
[[email protected] ~]# firewall-cmd --permanent --add-port=2379-2380/tcp
[[email protected] ~]# firewall-cmd --permanent --add-port=10250/tcp
[[email protected] ~]# firewall-cmd --permanent --add-port=10251/tcp
[[email protected] ~]# firewall-cmd --permanent --add-port=10259/tcp
[[email protected] ~]# firewall-cmd --permanent --add-port=10257/tcp
[[email protected] ~]# firewall-cmd --reload

工作节点:

[[email protected] ~]# firewall-cmd --permanent --add-port=10250/tcp
[[email protected] ~]# firewall-cmd --permanent --add-port=30000-32767/tcp
[[email protected] ~]# firewall-cmd --reload

我们正在禁用 Master 和 Worker 中的防火墙,因为它是出于演示目的。 但是,不建议将其用于实时生产实践。

使用以下命令停止和禁用防火墙。

[[email protected] ~]# systemctl stop firewalld
[[email protected] ~]# systemctl disable firewalld

5. 安装 Docker

Docker 使“构建”容器变得更容易,而 Kubernetes 使实时“管理”它们成为可能。 要打包和发布软件,请使用 Docker。 要启动和扩展您的应用程序,请使用 Kubernetes。

在集群中的所有机器中添加 docker 存储库。

创建名为 docker.repo 在下面 /etc/yum.repos.d/ 目录:

[[email protected] ~]# vi /etc/yum.repos.d/docker.repo

在其中添加以下行:

[docker]
baseurl=https://download.docker.com/linux/centos/8/x86_64/stable/
gpgcheck=0

按 ESC 键并输入 :wq 保存文件并 close 它。

在 Master 和 Worker 节点上安装 docker:

# yum -y install docker-ce

安装后,在两个节点上启用并启动 Docker:

# systemctl enable docker
# systemctl start docker

检查并确保 Docker 正在两台机器上运行。

# systemctl status docker
检查 Docker 状态 检查 Docker 状态

6. 安装 Kubernetes

在 Master 和 Worker 中添加 Kubernetes 存储库。

创建文件 kubernetes.repo 在 Master 和 worker 下 /etc/yum.repos.d/ 目录:

# vi /etc/yum.repos.d/kubernetes.repo

添加以下行:

[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg

按 ESC 并输入 :wq 保存文件并 close 它。

使用以下命令在 Master 和 Worker 节点中安装 kubeadm、kubelet、kubectl:

# yum install -y kubelet kubeadm kubectl --disableexcludes=Kubernetes

启用并启动 kubelet 两台机器的服务:

# systemctl enable kubelet
# systemctl start kubelet

检查 Kubelet 服务的状态,确保它在两台机器上都运行良好。

# systemctl status kubelet
检查 Kubelet 服务状态 检查 Kubelet 服务状态

7. 初始化 Kubernetes

使用以下命令在 Master Server 中初始化 Kubernetes

[[email protected] ~]# kubeadm init

您将获得以下输出,说明 Kubernetes 控制平面已成功初始化。 并且将提到某些步骤以开始使用集群,请遵循。

同时复制并保存 'kubeadm join' 命令,它将用于加入集群中的工作节点。

样本输出:

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

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

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 172.31.10.29:6443 --token 220tvj.051bkeyj5tg6v55r 
        --discovery-token-ca-cert-hash sha256:434c49c7969256a7fae3880b340202cadd4fd29d3d381ab37e1cb8b1d05e86f2
初始化 Kubernetes 初始化 Kubernetes

由于我们正在进行 root 用户,如上述输出中所述,在主服务器中运行以下命令。

[[email protected] ~]#  export KUBECONFIG=/etc/kubernetes/admin.conf

8.配置POD网络

Kubernetes Pod 网络是 Kubernetes 中互连组件的网络。 这个网络概念可以以几种不同的方式实现。 在我们的演示中,我们将使用 《织网》.

在主服务器中运行以下命令来设置 POD 网络。

[[email protected] ~]# export kubever=$(kubectl version | base64 | tr -d 'n')
[[email protected] ~]# kubectl apply -f https://cloud.weave.works/k8s/net?k8s-version=$kubever

样本输出:

serviceaccount/weave-net created
clusterrole.rbac.authorization.k8s.io/weave-net created
clusterrolebinding.rbac.authorization.k8s.io/weave-net created
role.rbac.authorization.k8s.io/weave-net created
rolebinding.rbac.authorization.k8s.io/weave-net created
daemonset.apps/weave-net created
[[email protected] ~]#

9.加入工作节点

跑过 ‘kubeadm join‘ 命令将工作节点加入集群。 这是我们从 ‘ 复制的命令kubeadm init‘ 输出。

[[email protected] ~]# kubeadm join 172.31.10.29:6443 --token 220tvj.051bkeyj5tg6v55r         --discovery-token-ca-cert-hash sha256:434c49c7969256a7fae3880b340202cadd4fd29d3d381ab37e1cb8b1d05e86f2
将工作节点加入集群 将工作节点加入集群

您可以使用以下命令验证主服务器中的节点

# kubectl get nodes

样本输出:

NAME           STATUS     ROLES                  AGE   VERSION
ostechmaster   Ready      control-plane,master   32m   v1.23.1
ostechworker   Ready   <none>                 30m   v1.23.1

结论

在本文中,我们看到了使用 Kubeadm 设置和配置 Kubernetes 集群的详细步骤。 参考我们之前的 Kubernetes系列 文章以详细了解 Kubernetes 架构和概念。 我们将在接下来的文章中看到 Kubernetes 操作。

阅读下一篇:

  • 如何在 Linux 中创建和管理 Kubernetes Pod

资源: