如何在 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,但这不是严格要求。
- 所有节点均具备 Internet 连接。我们将从存储库中获取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 Repo
您需要手动添加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
软件包 repo 现已准备好,您可以继续安装kubeadm和docker软件包。
# yum install kubeadm docker -y
安装成功完成后,启用并启动这两项服务。
# systemctl enable kubelet # systemctl start kubelet # systemctl enable docker # systemctl start docker
步骤 4:初始化 Kubernetes Master 并设置默认用户
现在我们准备初始化 kubernetes master,但在此之前,您需要禁用 swap 才能运行“ 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 服务器,则还要在/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主节点来测试更新的主机文件是否正常。
接下来,禁用SElinux并更新防火墙规则。
# setenforce 0 # sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
在端口上设置以下防火墙规则。确保所有防火墙命令都返回成功。
# 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 Repo
您需要手动添加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
软件包 repo 现已准备好,您可以继续安装kubeadm和docker软件包。
# yum install kubeadm docker -y
启动并启用这两项服务。
# systemctl enable docker # systemctl start docker # systemctl enable kubelet # systemctl start kubelet
步骤 4:将工作节点加入 Kubernetes 集群
我们现在需要kubeadm init 生成的令牌来加入集群。如果您已将其复制到某个地方,则可以将其复制并粘贴到节点 1和节点 2 。
# kubeadm join 10.128.0.27:6443 --token nu06lu.xrsux0ss0ixtnms5 --discovery-token-ca-cert-hash sha256:f996ea3564e6a07fdea2997a1cf8caeddafd6d4360d606dbc82314688425cd41
正如最后一行所建议的,返回到主节点并使用以下命令检查工作节点 1和工作节点 2是否已加入集群。
# kubectl get nodes
如果所有步骤成功运行,那么您应该在主节点上看到节点 1和节点 2处于就绪状态。
推荐阅读:如何在 Kubernetes 集群上部署 Nginx
至此,我们已经成功完成了在Centos 7上Kubernetes集群的安装,并且成功加入了两个工作节点。现在您可以开始创建 Pod 并部署服务了。