在CentOS 7上使用Kubeadm部署Kubernetes

・8 分钟阅读

概述

本文旨在帮助你在短时间内建立,并且运行Kubernetes集群,本指南将部署两个服务器,一个master和一个worker,但是你可以部署尽可能多的服务器。

什么是Kubeadm?

Kubeadm是Kubernetes开发的工具,它允许你通过遵循最佳实践来获得和运行最小的可行群集。

前提条件

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

  • 每台机器2GB或更多RAM
  • master上有2个CPU或更多

在本指南中部署的两台服务器如下所示: - CentOS 7 1个CPU 2GB 内存(worker) - CentOS 7 2个CPU 4GB 内存(master)

配置worker和master

以下是我们必须在master和worker上采取的步骤:

  • Yum更新包
  • 安装Docker
  • 禁用se linux
  • 禁用swap
  • 禁用防火墙
  • 更新IPTables
  • 安装kubelet/kubeadm/kubectl

安装Docker

我们将在本教程中使用Kubernetes 1.14版本,对于此版本,kubernetes建议使用Docker18.06.2版本 。 一定要检查Kuberenetes推荐的Docker版本。

我们将向yum添加Docker库,并指定安装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 <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver":"json-file",
"log-opts": {
"max-size":"100m"
 },
"storage-driver":"overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
 ]
}
EOF

mkdir -p /etc/systemd/system/docker.service.d

###Restart Docker
systemctl daemon-reload
systemctl enable docker.service
systemctl restart docker

禁用SELinux

因为我们使用CentOS,我们需要禁用SELinux ,


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

禁用Swap

需要禁用Swap才能使Kubelet正常工作。


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

禁用防火墙

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


systemctl disable firewalld
systemctl stop firewalld

更新IPTables

Kubernetes建议我们确保net.bridge.bridge-nf-call-iptables设置为1,这是由于rehl centos 7由于绕过iptables而导致流量被错误重新路由的问题。


cat <<EOF > /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 repo协议添加到yum中,一旦我们这样做,我们只需要运行install命令,并且启用kubelet。


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

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

现在我们已经完全配置了我们的master节点和worker 节点,现在我们可以初始化master节点并将worker节点加入到master节点!

注意如果要添加更多的worker节点,上面的进程也必须在所有这些节点上完成。

Master节点设置

我们希望通过运行以下命令来初始化Master节点 ,你将希望在下面的命令中替换节点地址的主IP ,另外,当我们安装Flannel网络覆盖层时,我们将通过pod-network-cidr,以便于我们以后使用。


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

此命令是你的worker节点需要执行以加入群集的,因此请注意它。

接下来是Flannel,Flannel是让pod进行通讯的东西,你可以安装各种其他类型的网络覆盖,但是,为了简便起见,本指南将使用Flannel。

kube/config文件复制到$Home,以便执行kubectl命令。


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

在Master节点上的最后一步是安装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"}

你的Master节点已经设置好。

worker节点

此时,worker节点上不需要额外的工作,我们只需要运行从kubeadm init输出得到的kubeadm join命令。

如果你有没有可能把kubeadm join命令放错了位置,那么可以通过在master上运行生成另一个命令,kubeadm token create --print-join-command

一旦运行kubeadm join命令,如果在master上运行kubectl get nodes,你将看到类似的输出到以下内容。


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

有用的链接:

月月 profile image