如何在 CentOS 7 上安装 Kubernetes 集群
Kubernetes 由 Google 捐赠给开源社区,现已成为首选的容器管理工具。它不仅可以管理和编排 docker 运行时,还可以管理和编排容器和 Rkt 运行时。
典型的 Kubernetes 集群通常有一个主节点和多个工作节点或 Minions。然后,工作节点由主节点进行管理,从而确保集群由中心点进行管理。
值得一提的是,您还可以部署单节点 Kubernetes 集群,通常建议用于非常轻的非生产工作负载。为此,您可以使用 Minikube,这是一个在节点上的虚拟机中运行单节点 Kubernetes 集群的工具。
推荐阅读:如何在 CentOS 8 上安装 Kubernetes 集群
在本教程中,我们将演练在 CentOS 7 Linux 上安装多节点 Kubernetes 集群。本教程基于命令行,因此您需要访问终端窗口。
先决条件
- 多台运行 Centos 7 的服务器(1 个主节点、2 个工作节点)。建议您的主节点至少有 2 个 CPU,但这不是严格要求。
- 所有节点上的互联网连接。我们将从存储库中获取 Kubernetes 和 docker 包。同样,您需要确保默认安装 yum 包管理器并且可以远程获取包。
- 您还需要访问具有 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-1 和 worker-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
软件包存储库现已准备就绪,您可以继续安装 kubeadm 和 docker 软件包。
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-1 和 worker-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
软件包存储库现已准备就绪,您可以继续安装 kubeadm 和 docker 软件包。
yum install kubeadm docker -y
启动并启用这两个服务。
systemctl enable docker
systemctl start docker
systemctl enable kubelet
systemctl start kubelet
步骤4:将Worker节点加入Kubernetes集群
我们现在需要 kubeadm init 生成的令牌来加入集群。如果您已将其复制到某处,则可以将其复制并粘贴到您的 node-1 和 node-2 中。
kubeadm join 10.128.0.27:6443 --token nu06lu.xrsux0ss0ixtnms5 --discovery-token-ca-cert-hash sha256:f996ea3564e6a07fdea2997a1cf8caeddafd6d4360d606dbc82314688425cd41
按照最后一行的建议,返回到您的主节点并检查工作节点1和工作节点2是否已加入使用以下命令进行集群。
kubectl get nodes
如果所有步骤都成功运行,那么您应该在主节点上看到node-1和node-2处于就绪状态。
推荐阅读:如何在 Kubernetes 集群上部署 Nginx
至此,我们已经在 Centos 7 上成功完成了 Kubernetes 集群的安装,并且成功加载了两个工作节点。您现在可以开始创建 Pod 并部署服务。