网站搜索

如何在 CentOS 7 上安装 Kubernetes 集群


KubernetesGoogle 捐赠给开源社区,现已成为首选的容器管理工具。它不仅可以管理和编排 docker 运行时,还可以管理和编排容器和 Rkt 运行时。

典型的 Kubernetes 集群通常有一个主节点和多个工作节点或 Minions。然后,工作节点由主节点进行管理,从而确保集群由中心点进行管理。

值得一提的是,您还可以部署单节点 Kubernetes 集群,通常建议用于非常轻的非生产工作负载。为此,您可以使用 Minikube,这是一个在节点上的虚拟机中运行单节点 Kubernetes 集群的工具。

推荐阅读:如何在 CentOS 8 上安装 Kubernetes 集群

在本教程中,我们将演练在 CentOS 7 Linux 上安装多节点 Kubernetes 集群。本教程基于命令行,因此您需要访问终端窗口。

先决条件

  1. 多台运行 Centos 7 的服务器(1 个主节点2 个工作节点)。建议您的主节点至少有 2 个 CPU,但这不是严格要求。
  2. 所有节点上的互联网连接。我们将从存储库中获取 Kubernetesdocker 包。同样,您需要确保默认安装 yum 包管理器并且可以远程获取包。
  3. 您还需要访问具有 sudo 或 root 权限的帐户。在本教程中,我将使用我的 root 帐户。

我们的 3 节点集群看起来像这样:

在主节点上安装 Kubernetes 集群

为了让 Kubernetes 工作,您需要一个容器化引擎。对于此安装,我们将使用 docker,因为它是最流行的。

以下步骤将在主节点上运行。

第 1 步:准备主机名、防火墙和 SELinux

在您的主节点上,设置主机名,如果您没有 DNS 服务器,则还要更新您的 /etc/hosts 文件。

hostnamectl set-hostname master-node
cat <<EOF>> /etc/hosts
10.128.0.27 master-node
10.128.0.29 node-1 worker-node-1
10.128.0.30 node-2 worker-node-2
EOF

您可以使用 ping 命令 ping worker-node-1worker-node-2 来测试更新后的主机文件是否正常。

ping 10.128.0.29
ping 10.128.0.30

接下来,禁用 SElinux 并更新您的防火墙规则。

setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
reboot

在端口上设置以下防火墙规则。确保每个firewall-cmd命令返回成功。

firewall-cmd --permanent --add-port=6443/tcp
firewall-cmd --permanent --add-port=2379-2380/tcp
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=10251/tcp
firewall-cmd --permanent --add-port=10252/tcp
firewall-cmd --permanent --add-port=10255/tcp
firewall-cmd –reload
modprobe br_netfilter
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables

第 2 步:设置 Kubernetes 存储库

您需要手动添加 Kubernetes 存储库,因为 CentOS 7 上默认情况下不会安装它们。

cat <<EOF > /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
EOF

第 3 步:安装 Kubeadm 和 Docker

软件包存储库现已准备就绪,您可以继续安装 kubeadmdocker 软件包。

yum install kubeadm docker -y 

安装成功完成后,启用并启动这两个服务。

systemctl enable kubelet
systemctl start kubelet
systemctl enable docker
systemctl start docker

步骤 4:初始化 Kubernetes Master 并设置默认用户

现在我们已准备好初始化 kubernetes master,但在此之前您需要禁用交换才能运行“kubeadm init”命令。

swapoff -a

初始化 Kubernetes master 是一个完全自动化的过程,由您将运行的“kubeadm init”命令管理。

kubeadm init

您可能需要复制最后一行并将其保存在某个位置,因为您需要在工作节点上运行它。

kubeadm join 10.128.0.27:6443 --token nu06lu.xrsux0ss0ixtnms5  \ --discovery-token-ca-cert-hash sha256:f996ea3564e6a07fdea2997a1cf8caeddafd6d4360d606dbc82314688425cd41 

提示:有时此命令可能会抱怨传递的参数 (args),因此请对其进行编辑以避免任何错误错误。因此,您将删除 --token 附带的 ‘\’ 字符,最终命令将如下所示。

kubeadm join 10.128.0.27:6443 --token nu06lu.xrsux0ss0ixtnms5  --discovery-token-ca-cert-hash sha256:f996ea3564e6a07fdea2997a1cf8caeddafd6d4360d606dbc82314688425cd41

成功初始化 Kubernetes 后,您需要允许用户开始使用集群。在我们的例子中,我们希望以 root 用户身份运行此安装,因此我们将继续以 root 身份运行这些命令。您可以更改为您喜欢的启用 sudo 的用户,并使用 sudo 运行以下命令。

要使用root,请运行:

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

要使用启用 sudo 的用户,请运行:

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

此时,您还会注意到主节点的状态为“NotReady”。这是因为我们尚未将 pod 网络部署到集群。

pod 网络是集群的覆盖网络,部署在当前节点网络之上。它旨在允许跨 Pod 进行连接。

第 5 步:设置 Pod 网络

部署网络集群是一个高度灵活的过程,具体取决于您的需求,并且有许多可用选项。由于我们希望安装尽可能简单,因此我们将使用 Weavenet 插件,该插件不需要任何配置或额外代码,并且它为每个 Pod 提供一个 IP 地址,这对我们来说非常有用。如果您想查看更多选项,请查看此处。

这些命令对于 pod 网络设置非常重要。

export kubever=$(kubectl version | base64 | tr -d '\n')
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$kubever"

现在,如果您检查主节点的状态,它应该是“就绪”。

kubectl get nodes

接下来,我们将工作节点添加到集群中。

设置工作节点加入 Kubernetes 集群

以下步骤将在工作节点上运行。加入 Kubernetes 集群时,应在每个工作节点上运行这些步骤。

第 1 步:准备主机名、防火墙和 SELinux

在您的 worker-node-1worker-node-2 上,设置主机名,如果您没有 DNS 服务器,则还要更新您的 master 和worker /etc/hosts 文件上的节点。

hostnamectl set-hostname 'node-1'
cat <<EOF>> /etc/hosts
10.128.0.27 master-node
10.128.0.29 node-1 worker-node-1
10.128.0.30 node-2 worker-node-2
EOF

您可以 ping master-node 来测试更新后的主机文件是否正常。

接下来,禁用 SElinux 并更新您的防火墙规则。

setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

在端口上设置以下防火墙规则。确保所有的firewall-cmd命令都返回成功。

firewall-cmd --permanent --add-port=6783/tcp
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=10255/tcp
firewall-cmd --permanent --add-port=30000-32767/tcp
firewall-cmd  --reload
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables

第 2 步:设置 Kubernetes 存储库

您需要手动添加 Kubernetes 存储库,因为它们没有预安装在 CentOS 7 上。

cat <<EOF > /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
EOF

第 3 步:安装 Kubeadm 和 Docker

软件包存储库现已准备就绪,您可以继续安装 kubeadmdocker 软件包。

yum install kubeadm docker -y 

启动并启用这两个服务。

systemctl enable docker
systemctl start docker
systemctl enable kubelet
systemctl start kubelet

步骤4:将Worker节点加入Kubernetes集群

我们现在需要 kubeadm init 生成的令牌来加入集群。如果您已将其复制到某处,则可以将其复制并粘贴到您的 node-1node-2 中。

kubeadm join 10.128.0.27:6443 --token nu06lu.xrsux0ss0ixtnms5  --discovery-token-ca-cert-hash sha256:f996ea3564e6a07fdea2997a1cf8caeddafd6d4360d606dbc82314688425cd41 

按照最后一行的建议,返回到您的主节点并检查工作节点1工作节点2是否已加入使用以下命令进行集群。

kubectl get nodes

如果所有步骤都成功运行,那么您应该在主节点上看到node-1node-2处于就绪状态。

推荐阅读:如何在 Kubernetes 集群上部署 Nginx

至此,我们已经在 Centos 7 上成功完成了 Kubernetes 集群的安装,并且成功加载了两个工作节点。您现在可以开始创建 Pod 并部署服务。