在本文中,我们将了解在 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 - Master
- ostechworker – Worker
使用以下命令设置主机名,设置主机名后需要重新启动。
# hostnamectl set-hostname ostechmaster
编辑/etc/hosts文件:
# vi /etc/hosts
在/etc/hosts文件中添加服务器和客户端主机名和 IP 地址:
进行ping测试以确保连通性:
[root@ostechmaster ~]# 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,所有容器都可以轻松访问主机文件系统,使用 vi 编辑器在配置文件中制作“ SELINUX=disabled” /etc/selinux/config。需要重新启动以反映 SElinux 更改。
[ root@ostechmaster ~]# vi /etc/selinux/config
使用以下命令确保 SElinux 状态。
[root@ostechmaster ~]# sestatus
SELinux status: disabled
3. 在 Master 和 Worker 中禁用交换
需要在所有 Kubernetes 主机(Master 和 Workers)上停用交换,这是 Kubernetes 社区首选的部署方式,如果没有禁用交换,kubelet 服务将不会在 master 和 worker 上启动。
运行以下命令以禁用 SWAP:
[ root@ostechmaster ~]# swapoff -a && sed -i '/swap/d' /etc/fstab
4.在防火墙中允许所需的端口
要使 Kubernetes 组件彼此交互,某些基本端口必须可用,以下是要打开以实现 Kubernetes 组件之间的连接的端口。
控制平面/主服务器:
工作节点:
主节点:
[ root@ostechmaster ~]# firewall-cmd --permanent --add-port=6443/tcp
[ root@ostechmaster ~]# firewall-cmd --permanent --add-port=2379-2380/tcp
[ root@ostechmaster ~]# firewall-cmd --permanent --add-port=10250/tcp
[ root@ostechmaster ~]# firewall-cmd --permanent --add-port=10251/tcp
[ root@ostechmaster ~]# firewall-cmd --permanent --add-port=10259/tcp
[ root@ostechmaster ~]# firewall-cmd --permanent --add-port=10257/tcp
[ root@ostechmaster ~]# firewall-cmd --reload
工作节点:
[ root@ostechworker ~]# firewall-cmd --permanent --add-port=10250/tcp
[ root@ostechworker ~]# firewall-cmd --permanent --add-port=30000-32767/tcp
[ root@ostechworker ~]# firewall-cmd --reload
我们正在禁用 Master 和 Worker 中的防火墙,因为它是出于演示目的,但是,不建议用于实时生产实践。
使用以下命令停止和禁用防火墙。
[ root@ostechmaster ~]# systemctl stop firewalld
[root@ostechmaster ~]# systemctl disable firewalld
5. 安装 Docker
Docker 可以更轻松地“构建”容器,而 Kubernetes 可以实时“管理”它们,要打包和运送软件,请使用 Docker,要启动和扩展您的应用程序,请使用 Kubernetes。
在 Cluster 中的所有机器中添加 docker 存储库。
docker.repo在/etc/yum.repos.d/目录下创建名为的文件:
[ root@ostechmaster ~]# vi /etc/yum.repos.d/docker.repo
在其中添加以下几行:
[docker]
baseurl=https://download.docker.com/linux/centos/8/x86_64/stable/
gpgcheck=0
按 ESC 键并键入:wq以保存文件并关闭它。
在 Master 和 Worker 节点上安装 docker:
# yum -y install docker-ce
安装后,在两个节点上启用并启动 Docker:
# systemctl enable docker
# systemctl start docker
检查并确保 Docker 正在两台机器上运行。
# systemctl status 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以保存文件并关闭它。
使用以下命令在 Master 和 Worker 节点中安装 kubeadm、kubelet、kubectl:
# yum install -y kubelet kubeadm kubectl --disableexcludes=Kubernetes
kubelet在两台机器上启用并启动服务:
# systemctl enable kubelet
# systemctl start kubelet
检查 Kubelet 服务的状态并确保它在两台机器上都运行良好。
# systemctl status kubelet
7. 初始化 Kubernetes
使用以下命令在 Master Server 中初始化 Kubernetes
[ root@ostechmaster ~]# 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
由于我们正在处理root用户,因此在主服务器中运行以下命令,如上述输出中所述。
[ root@ostechmaster ~]# export KUBECONFIG=/etc/kubernetes/admin.conf
8.配置POD网络
Kubernetes Pod 网络是 Kubernetes 中互连组件的网络,这个网络概念可以以几种不同的方式实现。在我们的演示中,我们将使用“Weave Net”。
在主服务器中运行以下命令来设置 POD 网络。
[ root@ostechmaster ~]# export kubever=$(kubectl version | base64 | tr -d '\n')
[ root@ostechmaster ~]# 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
[root@ostechmaster ~]#
9.加入Worker节点
运行“ kubeadm join”命令将工作节点加入集群,这是我们从“ kubeadm init”输出中复制的命令。
[root@ostechworker ~]# 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 30m v1.23.1