Kubernetes也称为k8s,是一个开源的、可移植的容器编排平台,用于自动部署和管理容器化应用程序。Kubernetes最初是由Google使用Go编程语言创建的。目前,它由云原生应用计算基金会维护。
在本文中中,小编将简单介绍如何在RHEL 8系统上安装Kubernetes集群。这里将使用一个主节点和一个工作节点来演示这一点,并将其添加到我们的集群中。
主节点:master-node-k8 10.128.15.228
工作节点:worker-node-1-k8 10.128.15.230
注意:以下骤1到6应该同时应用于主节点和工作节点。
步骤一、禁用交换内存
为了获得最佳性能,Kubernetes要求在主机系统上禁用交换内存,这是因为内存交换会显着导致不稳定和性能下降。
要禁用交换内存,请运行以下命令:
$ sudo swapoff -a
如果要使更改持久化,请编辑/etc/fstab文件并删除或注释掉包含交换条目的行并保存更改。
步骤二、禁用SELinux
此外,还需要禁用SELinux并将其设置为 ‘permissive’ 以允许节点和pod之间的顺畅通信。
为此,请打开SELinux配置文件,命令如下:
$ sudo vi /etc/selinux/config
将SELINUX值从强制更改为许可。
SELINUX=permissive
或者,也可以使用sed命令,如下所示。
$ sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
步骤三、在主节点和工作节点中配置网络
主节点和工作节点需要一些额外的网络配置才能有效通信,在每个节点上,编辑/etc/hosts配置文件。
$ sudo vi /etc/hosts
接下来,更新条目,命令如下:
10.128.15.228 master-node-k8 #对于主节点 10.128.15.230 worker-node-1-k8 #对于Worker节点
保存并退出配置文件。接下来,还需安装流量控制实用程序包:
$ sudo dnf install -y iproute-tc
步骤四、允许k8s的防火墙规则
为了在主节点和工作节点之间进行完整通信,这里需要配置防火墙并允许一些相关的端口和服务,具体如下。
在主节点上,允许以下端口:
$ sudo firewall-cmd --permanent --add-port=6443/tcp $ sudo firewall-cmd --permanent --add-port=2379-2380/tcp $ sudo firewall-cmd --permanent --add-port=10250/tcp $ sudo firewall-cmd --permanent --add-port=10251/tcp $ sudo firewall-cmd --permanent --add-port=10252/tcp $ sudo firewall-cmd --reload
在工作节点上,允许以下端口:
$ sudo firewall-cmd --permanent --add-port=10250/tcp $ sudo firewall-cmd --permanent --add-port=30000-32767/tcp $ sudo firewall-cmd --reload
步骤五、安装CRI-O container runtime
Kubernetes需要容器运行时才能运行pod,Kubernetes 1.23及更高版本要求安装与容器运行时接口确认的container runtime。
Container Runtime是支持运行容器的应用程序。Kubernetes支持以下container runtime:
- Containerd
- CRI-O
- Docker Engine
- Mirantis Container Runtime
在本文中,小编将安装CRI-O,它是一个高级容器运行时。为此需要启用两个关键的内核模块——overlay和br_netfilter模块。
为此,需要配置以下先决条件:
首先,为Kubernetes创建一个模块配置文件,命令如下:
$ sudo vi /etc/modules-load.d/k8s.conf
添加这些行并保存更改:
overlay br_netfilter
然后使用modprobe命令加载两个模块。
$ sudo modprobe overlay $ sudo modprobe br_netfilter
接下来配置所需的sysctl参数如下,命令如下:
$ sudo vi /etc/sysctl.d/k8s.conf
然后添加以下行:
net.bridge.bridge-nf-call-iptables=1 net.ipv4.ip_forward=1 net.bridge.bridge-nf-call-ip6tables=1
保存更改并退出。要确认已应用更改,请运行以下命令:
$ sudo sysctl --system
要安装CRI-O,请设置$VERSION 环境变量以匹配你的CRI-O 版本。例如,要安装CRI-O版本 1.21,请设置$VERSION,如下所示:
$ export VERSION=1.21
接下来,运行以下命令:
$ sudo curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable.repo https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/CentOS_8/devel:kubic:libcontainers:stable.repo
$ sudo curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.repo https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$VERSION/CentOS_8/devel:kubic:libcontainers:stable:cri-o:$VERSION.repo
然后使用DNF包管理器安装CRI-O:
$ sudo dnf install cri-o
接下来,在启动时启用CRI-O并启动它:
$ sudo systemctl enable cri-o $ sudo systemctl start cri-o
步骤六、安装Kubernetes包
安装完Kubernetes工作所需的一切准备工作之后,现在继续安装Kubernetes软件包,如kubelet、kubeadm 和kubectl。首先创建Kubernetes存储库文件,命令如下:
$ sudo 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 exclude=kubelet kubeadm kubectl
保存更改并退出,最后安装k8s包,命令如下:
$ sudo dnf install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
安装之后,请务必启用并启动Kubelet服务。
$ sudo systemctl enable kubelet $ sudo systemctl start kubelet
此时,安装Kubernetes集群的准备工作已经完成。
步骤七、创建Kubernetes集群
这里将使用kubeadm命令初始化一个Kubernetes集群,如下所示,这会初始化主节点中的控制平面:
$ sudo kubeadm init --pod-network-cidr=192.168.10.0/16
创建控制平面后,还需要执行一些额外的命令才能开始使用集群:
因此,按以下顺序运行命令。
$ mkdir -p $HOME/.kube $ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config $ sudo chown $(id -u):$(id -g) $HOME/.kube/config
在输出的最后,你将获得在工作节点上运行以加入集群的命令,后面会说到。此外,请务必从主节点中删除污点:
$ kubectl taint nodes –all node-role.kubernetes.io/master-
步骤八、安装Calico Pod网络插件
下一步是安装Calico CNI(容器网络接口),它是一个开源项目,用于提供容器网络和安全性。安装CalicoCNI 后,节点状态将变为Ready状态,集群内的DNS服务将正常运行,容器可以开始相互通信。
Calico提供与现有Kubernetes工作负载的可扩展性、高性能和互操作性,它可以部署在本地和流行的云技术上,例如Google Cloud、AWS和Azure。
要安装Calico CNI,请从主节点运行以下命令
$ kubectl create -f https://docs.projectcalico.org/manifests/tigera-operator.yaml
完成后,执行以下命令:
$ kubectl create -f https://docs.projectcalico.org/manifests/custom-resources.yaml
要确认pod 是否已启动,请运行以下命令:
$ watch kubectl get pods -n calico-system
这是应该看到每个pod都是“ READY ”并且具有“ RUNNING ”状态,如下图第三列所示:
要验证集群中主节点的可用性,请运行以下命令:
$ kubectl get nodes
此外,您可以使用 -o wide选项检索更多信息。
$ kubectl get nodes -o wide
以上输出确认主节点已准备就绪。此外,你还可以检查pod命名空间:
$ kubectl get pods --all-namespaces
步骤九、将工作节点添加到集群
要将工作节点添加到Kubernetes 集群,请按照上述步骤1到步骤 6进行设置。完成之后,运行主节点生成的命令以将工作节点加入集群。在本文中,这将是:
$ sudo kubeadm join 10.128.15.228:6443 --token cqb8vy.iicmmqrb1m8u9cob --discovery-token-ca-cert-hash sha256:79748a56f603e6cc57f67bf90b7db5aebe090107d540d6cc8a8f65b785de7543
如果一切顺利,那你应该会收到节点已加入集群的通知。如果你有多个工作节点,则对其他节点重复相同的过程即可:
现在,返回主节点,再次验证集群中的节点。这一次,工作节点将出现在集群中的节点列表中,
$ kubectl get nodes
十、结论
以上就是RHEL 8系统安装Kubernetes(k8s)集群的详细步骤,如果有不清楚的小伙伴可以参考上述过程进行设置。
由于Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化,所以目前已经被广泛的应用。