如何在CentOS 8上安装Kubernetes集群

时间:2019-04-29 03:17:12  来源:igfitidea点击:

从CentOS 8开始,docker现在已经被podman和buildah所取代,这两个工具都来自Redhat。事实上,docker包现在已经从默认的包存储库中删除了。

结构

主节点——充当控制平台,运行集群数据库和API服务。

Kubernetes集群示意图

在主节点上安装Kubernetes集群

要让Kubernetes工作,需要一个容器化引擎。
我们将使用Docker-CE。

下面的命令都是在CentOS 8主节点上执行的

配置主机名、防火墙和SELinux

修改 /etc/hosts设置系统的主机名

192.168.1.97 master-node
192.168.1.98 node-1 worker-node-1
192.168.1.99 node-2 worker-node-2

禁用selinux

# setenforce 0 ### 临时禁用selinux

### 永久禁用selinux
# sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
# reboot

Kubernetes的端口

Kubernetes 使用了下面的各种端口进行通信:

协议方向端口作用使用者
tcp6443*Kubernetes api服务器所有
tcp2379-2380etcd服务器,客户端apikube-apiserver,etcd
tcp10250Kubelet Apiapi和控制面板
tcp10251Kube-schedulerkube调度器
tcp10252kube-controller-managerkube控制管理器

设置防火墙

# 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

在CentOS 8上安装Docker-CE

添加Docker存储库,因为它不再在默认包仓库中。

# dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

同时安装containerd.io包

它是一个守护进程,用于管理其主机系统的完整容器生命周期,从映像传输和存储到容器执行和监视,再到底层存储和网络附件等等。

# dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm

安装最新版本的docker-ce包

# dnf install docker-ce

启动docker服务

# systemctl enable docker
# systemctl start docker

在CentOS 8上安装Kubernetes (Kubeadm)

添加Kubernetes安装源

创建一个新文件 /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

安装kubeadm包

Kubeadm可以协助创建最小的Kubernetes集群, 能够通过Kubernetes一致性测试。

它还支持集群生命周期功能,比如升级、降级和管理引导令牌。同时Kubeadm还可以与Ansible和Terraform等其他工具进行集成。

# dnf install kubeadm -y 

启动kubelet服务,并设置开机自启动

# systemctl enable kubelet
# systemctl start kubelet

用kubeadm创建一个控制面板

Kubernetes主节点充当集群的控制平台,运行集群所需的一些关键服务。

禁用swap以便能运行“kubeadm init”命令

# swapoff -a

初始化Kubernetes主节点

# kubeadm init

记下最后的命令,稍后需要在工作节点上运行该命令。

kubeadm join 192.168.1.97:6443 --token nuxlu.xrsdfs0ixtnms5 --discovery-token-ca-cert-hash ha256:f776ea35r4353dffdea2a997a1cf8caedddafd6d4360d60sdc82314683478hjmf783

使用Kubernetes

Kubernetes初始化成功后,就开始使用集群了。

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

现在确认kubectl命令已激活。

# kubectl get nodes
NAME STATUS ROLES 
master-node NotReady master

可以看到状态是NotReady

设置pod网络

pod网络是集群的覆盖网络,部署在当前节点网络的顶部。它的设计是为了让pod能相互连接。

根据需要,部署集群网络是一个很灵活的过程,有许多选项可以选择。为了安装尽可能简单,我们将使用Weavenet插件,它不需要任何配置或额外的代码,它为每个pod提供一个IP地址。

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

现在再次 检查master-node的状态, 应该变成了 Ready

# kubectl get nodes

NAME STATUS ROLES 
master-node Ready master

添加工作节点到Kubernetes 集群中

设置工作节点的主机名,防火墙和SELinux

  1. 修改 /etc/hosts
192.168.1.97 master-node
192.168.1.98 node-1 worker-node-1
192.168.1.99 node-2 worker-node-2
  1. 禁用selinux
# setenforce 0
# sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
  1. 更新防火墙
# 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

配置Docker-CE和Kubernetes的安装源

# dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

# dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm

安装docker-ce最新版本

# dnf install docker-ce

启动docker服务,并设置开机启动

# systemctl enable docker
# systemctl start docker

添加Kubernetes安装源

创建一个新文件 /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

在CentOS 8上安装Kubeadm

# dnf install kubeadm -y 

启动Kubeadm服务,并设置开机启动

# systemctl enable kubelet
# systemctl start kubelet

将工作节点加入Kubernetes集群

在两个工作节点上运行之前记下的命令:

kubeadm join 192.168.1.97:6443 --token nuxlu.xrsdfs0ixtnms5 --discovery-token-ca-cert-hash ha256:f776ea35r4353dffdea2a997a1cf8caedddafd6d4360d60sdc82314683478hjmf783

检查主节点状态

返回主节点,运行下面命令查看状态:

# kubectl get nodes

如果所有步骤都成功运行,那么应该看到主节点上的node-1和node-2处于“ready”状态。