在CentOS 7上使用Kubeadm部署Kubernetes

注:本教程在Vultr VPS上测试通过,如需部署请前往Vultr.com

总览

本文旨在帮助您立即建立Kubernetes集群并使用kubeadm运行。本指南将部署两台服务器,一台主服务器和一台工作者,但是您可以部署任意数量的服务器。

什么是kubeadm?

Kubeadm是Kubernetes开发的工具,通过遵循最佳实践,您可以使它最小限度地建立和运行。它只会引导您的集群,而不会配置机器。诸如插件,Kubernetes仪表板,监视解决方案等之类的东西并不是kubeadm可以为您做的。

先决条件

我们将要部署的服务器有一些要求。一台或多台运行deb / rpm兼容操作系统的机器。我们将使用CentOS。

每台机器2 GB或更多RAM
主站上2个CPU或更多

群集中所有计算机之间的完全网络连接

本指南中部署的两台服务器如下:
-1个CPU 2GB RAM和CentOS 7(Worker节点)
-2个带有CentOS 7的CPU 4GB RAM(主节点)

两台服务器上都有如此多的RAM,Kubernetes将有足够的空间来呼吸。

配置工人和主人

这是我们在主节点和工作节点上都必须执行的步骤:

百胜更新和软件包
安装泊坞窗
禁用selinux
禁用交换
禁用防火墙
更新IPTable
安装kubelet / kubeadm / kubectl

安装Docker

我们将使用版本 1.14 本教程中的Kubernetes对于此版本,Kubernetes建议运行Docker版本 18.06.2。确保为您的Kuberenetes版本检查推荐的Docker版本

我们将Docker存储库添加到yum并专门安装 18.06.2。安装Docker之后,我们需要将Docker守护程序配置为Kubernetes建议的设置。

###Add yum-utils, if not installed already
yum install yum-utils

###Add Docker repository.
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

###Install Docker CE.
yum update && yum install docker-ce-18.06.2.ce

###Create /etc/docker directory.
mkdir /etc/docker

###Setup daemon.
cat > /etc/docker/daemon.json <

禁用SELinux

由于我们使用的是CentOS,因此我们需要禁用SELinux。这是允许容器访问主机文件系统所必需的。

setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=disable/' /etc/selinux/config

禁用掉期

需要禁用交换以使kubelet正常工作。

sed -i '/swap/d' /etc/fstab
swapoff -a

禁用防火墙

Kubernetes使用IPTables处理入站和出站流量-为了避免出现任何问题,我们禁用了firewalld。

systemctl disable firewalld
systemctl stop firewalld

更新IPTable

Kubernetes建议我们确保 net.bridge.bridge-nf-call-iptables 设置为1。这是由于REHL / CentOS 7遇到了由于绕过iptables而导致流量无法正确路由的问题。

cat < /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system

安装kubelet / kubeadm / kubectl

我们需要将kubernetes存储库添加到yum中。完成后,我们只需要运行install命令并启用kubelet。

cat < /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=kube*
EOF

yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
systemctl enable --now kubelet

现在,我们已经完全配置了主节点和工作节点。现在,我们可以初始化我们的主节点,并将我们的工作节点加入主节点!

注意 如果要添加更多的工作程序节点,则也必须在所有这些节点上完成上述过程。

主节点设置

我们想通过运行以下命令来初始化主节点。您需要在以下命令中替换主节点的IP地址。此外,我们将传入pod-network-cidr,以便以后安装Flannel网络覆盖图时使我们更轻松。

kubeadm init --apiserver-advertise-address=YOUR_IP_HERE --pod-network-cidr=10.244.0.0/16

这可能需要一段时间才能完成,但是一旦完成,您将在输出末尾看到类似如下的内容。

kubeadm join YOUR_IP:6443 --token 4if8c2.pbqh82zxcg8rswui 
--discovery-token-ca-cert-hash sha256:a0b2bb2b31bf7b06bb5058540f02724240fc9447b0e457e049e59d2ce19fcba2

您的工作节点需要执行此命令才能加入集群,因此请注意它。

接下来是法兰绒。绒布是Pod到Pod通讯的基础。您可以安装其他各种类型的网络覆盖,但为简单起见,本指南将使用Flannel。

复制 kube/config 归档到您的 $Home 这样你就可以执行 kubectl 命令。

mkdir $HOME/.kube
cp /etc/kubernetes/admin.conf $HOME/.kube/config

主节点上的最后一步是安装Flannel。运行以下命令。

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

复制此配置后,您将可以运行 kubectl get cs 并得到回应。

NAME                 STATUS    MESSAGE             ERROR
scheduler            Healthy   ok
controller-manager   Healthy   ok
etcd-0               Healthy   {"health":"true"}

您的主节点已设置并准备就绪。进入工作节点!

工作节点

此时,在工作程序节点上不需要进行任何额外的工作。我们需要做的就是运行 kubeadm join 从我们得到的命令 kubeadm init 输出。

如果您偶然将kubeadm join命令放错了位置,则可以通过运行以下命令在主节点上生成另一个
kubeadm token create --print-join-command

运行kubeadm join命令后,如果运行 kubectl get nodes 在master上,您将看到与以下类似的输出。

NAME          STATUS   ROLES    AGE    VERSION
k8-master   Ready    master   107m   v1.14.2
k8-worker   Ready       45m    v1.14.2

总结

就像您使用kubeadm引导Kubernetes集群一样。您也可以使用专用网络执行此操作。 Vultr以及其他云提供商都允许使用专用网络。另外,如果要从本地计算机对集群执行kubectl命令,可以通过在本地安装kubectl并拉下 .kube/config 文件从群集到本地计算机 $HOME/.kube/config

希望本指南可以帮助您遍历kubeadm,并让您立即使用kubernetes!

有用的链接:

库贝姆
绒布

注:本教程在Vultr VPS上测试通过,如需部署请前往Vultr.com