Kubernetes集群搭建----超详细总结说明(Centos7版本)

0 必要条件

服务器需要满足以下几个条件:
① 由于网络问题,需要配置国内yum源进行相关的下载,以保证能够正常部署k8s。如果没有配置,详情看这篇文章

② 要求64位Linux操作系统,且内核版本要求3.10及以上,能满足安装Docker项目所需的要求;

③ 机器之间要保持网络互通,这是未来容器之间网络互通的前提条件;

④ 要有外网访问权限,因为部署的过程中需要拉取相应的镜像,要求能够访问到gcr.io、quay.io这两个docker registry,因为有小部分镜像需要从这里拉取;

⑤ 单机可用资源建议2核CPU、8G内存或以上,如果小一点也可以但是能调度的Pod数量就比较有限了;

⑥ 磁盘空间要求在30GB以上,主要用于存储Docker镜像及相关日志文件;

1 安装kubeadm及Docker环境

1.1 编辑操作系统安装源配置文件,添加kubernetes镜像源

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

在这里插入图片描述
注:这里如果未安装wget命令,可以使用yum install -y wget进行安装(需要联网,且正常配置yum源)

1.2 安装docker

yum -y install docker-ce-18.09.9-3.el7

在这里插入图片描述
设置docker开机自启动

systemctl enable docker

在这里插入图片描述
执行docker images查看,如果此时报错如下:
在这里插入图片描述
解决方案如下:

systemctl enable docker
systemctl start docker
systemctl restart docker

在这里插入图片描述

1.3 添加阿里云Kubernetes yum镜像源

# cat > /etc/yum.repos.d/kubernetes.repo << EOF
 
[kubernetes]
 
name=Kubernetes
 
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
 
enabled=1
 
gpgcheck=0
 
repo_gpgcheck=0
 
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
 
EOF

在这里插入图片描述

1.4 安装kubeadm

 yum install -y kubelet-1.20.0 kubeadm-1.20.0 kubectl-1.20.0

在这里插入图片描述安装完成后,可以通过kubectl version查看当前的版本
在这里插入图片描述

1.5 Docker服务启动及限制修改

在具体运行kubernetes部署之前需要对Docker的配置信息进行一些调整。首先,编辑系统/etc/default/grub文件,在配置项GRUB_CMDLINE_LINUX中添加如下参数:

GRUB_CMDLINE_LINUX=" cgroup_enable=memory swapaccount=1"

完成编辑后保存执行如下命令,并重启服务器
在这里插入图片描述

1.6 创建/etc/docker/daemon.json

添加如下内容:

cat > /etc/docker/daemon.json <<EOF
 
{
    
    
 
 "registry-mirrors": ["https://6ze43vnb.mirror.aliyuncs.com"],
 
 "exec-opts": ["native.cgroupdriver=systemd"],
 
 "log-driver": "json-file",
 
 "log-opts": {
    
    
 
   "max-size": "100m"
 
 },
 
 "storage-driver": "overlay2"
 
}
 
EOF
 

在这里插入图片描述
完成保存后执行重启Docker命令,如下:

# systemctl restart docker

此时可以查看Docker的Cgroup信息,如下:

# docker info | grep Cgroup

在这里插入图片描述
需要注意由于kubernetes禁用虚拟内存,所以要先关闭掉swap否则就会在kubeadm初始化kubernetes的时候报错

# swapoff -a

该命令只是临时禁用swap,如要保证系统重启后仍然生效则需要“vim /etc/fstab”文件,并注释掉swap那一行
在这里插入图片描述

2 部署Kubernetes的Master节点

在Kubernetes中Master节点是集群的控制节点,它是由三个紧密协作的独立组件组合而成,分别是负责API服务的kube-apiserver、负责调度的kube-scheduler以及负责容器编排的kube-controller-manager,其中整个集群的持久化数据由kube-apiserver处理后保存在Etcd中。

要部署Master节点可以直接通过kubeadm进行一键部署,但这里我们希望能够部署一个相对完整的Kubernetes集群,可以通过配置文件来开启一些实验性的功能。具体在系统中新建/opt/kubernetes-config/目录,并创建一个给kubeadm用的YAML文件(kubeadm.yaml),具体内容如下:

apiVersion: kubeadm.k8s.io/v1beta2
 
kind: ClusterConfiguration
 
controllerManager:
 
extraArgs:
 
    horizontal-pod-autoscaler-use-rest-clients: "true"
 
    horizontal-pod-autoscaler-sync-period: "10s"
 
    node-monitor-grace-period: "10s"
 
apiServer:
 
 extraArgs:
 
    runtime-config: "api/all=true"
 
kubernetesVersion: "v1.20.0"

在上述yaml配置文件中“horizontal-pod-autoscaler-use-rest-clients: “true””这个配置,表示将来部署的kuber-controller-manager能够使用自定义资源(Custom Metrics)进行自动水平扩展

2.1 docker拉取相关镜像

#从阿里云Docker仓库拉取Kubernetes组件镜像
 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver-amd64:v1.20.0
 
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager-amd64:v1.20.0
 
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler-amd64:v1.20.0
 
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy-amd64:v1.20.0
 
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2
 
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.13-0
 
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.7.0

在这里插入图片描述

2.2 修改tag标签

#重新tag镜像
 
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler-amd64:v1.20.0 k8s.gcr.io/kube-scheduler:v1.20.0
 
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager-amd64:v1.20.0 k8s.gcr.io/kube-controller-manager:v1.20.0
 
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver-amd64:v1.20.0 k8s.gcr.io/kube-apiserver:v1.20.0
 
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy-amd64:v1.20.0 k8s.gcr.io/kube-proxy:v1.20.0
 
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2
 
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.13-0 k8s.gcr.io/etcd:3.4.13-0
 
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.7.0 k8s.gcr.io/coredns:1.7.0

此时执行docker images命令可看到如下镜像:
在这里插入图片描述
解决镜像拉取问题后再次执行kubeadm部署命令就可以完成Kubernetes Master控制节点的部署了,具体命令及执行结果如下:

kubeadm init --config kubeadm.yaml --v=5

发生报错,报错内容如下:
在这里插入图片描述
在这里插入图片描述

[ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1
[WARNING Firewalld]: firewalld is active, please ensure ports [6443 10250] are open or your cluster may not function correctly

解决办法:执行如下命令

echo "1" >/proc/sys/net/bridge/bridge-nf-call-iptables

执行成功之后,重新执行命令

kubeadm init --config kubeadm.yaml --v=5

在这里插入图片描述

2.3 执行成功后输出内容

这个kubeadm join命令就是用来给该Master节点添加更多Worker(工作节点)的命令,后面具体部署Worker节点的时候将会使用到它。此外,kubeadm还会提示我们第一次使用Kubernetes集群所需要配置的命令:

kubeadm join 192.168.2.220:6443 --token zgu5i2.5tgvv44te798evgt \
    --discovery-token-ca-cert-hash sha256:981171e21e5631108f4fb24c1a2298f5c5522283e6e2d8e93f24bdddc542e7c3

此外,kubeadm还会提示我们第一次使用Kubernetes集群所需要配置的命令:

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

这几条命令就是将刚才部署生成的Kubernetes集群的安全配置文件保存到当前用户的.kube目录,之后kubectl会默认使用该目录下的授权信息访问Kubernetes集群。如果不这么做的化,那么每次通过集群就都需要设置“export KUBECONFIG 环境变量”来告诉kubectl这个安全文件的位置。

执行完上述命令后,现在我们就可以使用kubectl get node 命令来查看当前Kubernetes集群节点的状态了,执行效果如下
在这里插入图片描述
当前node状态为Not Ready,需要查看其原因,执行如下命令查看日志

# kubectl describe node k8s-1

注:k8s-1是当前服务器的主机名
在这里插入图片描述
当前节点Not Ready原因是:前面部署Master节点中由于没有部署网络插件

runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized

2.4 部署k8s网络插件

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

在这里插入图片描述
重新执行kubectl get node命令可以查看节点状态,当前已经是Ready状态了。
在这里插入图片描述

3 部署WORKER节点

为了构建一个完整的Kubernetes集群,还需要继续部署Worker节点。实际上Kubernetes的Worker节点和Master节点几乎是相同的,它们都运行着一个kubelet组件,主要的区别在于“kubeadm init”的过程中,kubelet启动后,Master节点还会自动启动kube-apiserver、kube-scheduler及kube-controller-manager这三个系统Pod。

3.1 安装docker

3.1.1 设置yum源

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

3.1.2 安装docker

yum -y install docker-ce-18.09.9-3.el7

3.1.3 设置docker

systemctl enable docker
systemctl restart docker
systemctl start docker

编辑/etc/default/grub文件,在配置项GRUB_CMDLINE_LINUX中添加如下参数:

GRUB_CMDLINE_LINUX=" cgroup_enable=memory swapaccount=1"

编辑/etc/docker/daemon.json,添加如下内容:

cat > /etc/docker/daemon.json <<EOF
 
{
    
    
 
 "registry-mirrors": ["https://6ze43vnb.mirror.aliyuncs.com"],
 
 "exec-opts": ["native.cgroupdriver=systemd"],
 
 "log-driver": "json-file",
 
 "log-opts": {
    
    
 
   "max-size": "100m"
 
 },
 
 "storage-driver": "overlay2"
 
}
 
EOF

3.1.4 添加完成后重启docker

reboot

3.2 安装kubeadm

3.2.1 配置yum源

cat > /etc/yum.repos.d/kubernetes.repo << EOF
 
[kubernetes]
 
name=Kubernetes
 
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
 
enabled=1
 
gpgcheck=0
 
repo_gpgcheck=0
 
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
 
EOF

3.2.2 开始安装kubeadm

yum install -y kubelet-1.20.0 kubeadm-1.20.0 kubectl-1.20.0

3.2.3 验证是否安装成功

kubectl version

看到如下输出,则说明已经完成安装
在这里插入图片描述

3.3.4 修改系统配置

swapoff -a

该命令只是临时禁用swap,如要保证系统重启后仍然生效则需要“vim /etc/fstab”文件,并注释掉swap那一行
修改完以上配置后,执行reboot重启服务器

3.4 将worker节点加入集群

kubeadm join 192.168.2.220:6443 --token siyejy.8e1bppolr3ya7ccx     --discovery-token-ca-cert-hash sha256:981171e21e5631108f4fb24c1a2298f5c5522283e6e2d8e93f24bdddc542e7c3

在这里插入图片描述
注:如果这里无法正常链接,可能是由于token过期或未正常关闭防火墙导致
token过期解决方法:重新生成新的token

[root@k8s-1 ~]# kubeadm token generate
siyejy.8e1bppolr3ya7ccx
[root@k8s-1 ~]# kubeadm token create siyejy.8e1bppolr3ya7ccx  --print-join-command --ttl=0 
kubeadm join 192.168.2.220:6443 --token siyejy.8e1bppolr3ya7ccx     --discovery-token-ca-cert-hash sha256:981171e21e5631108f4fb24c1a2298f5c5522283e6e2d8e93f24bdddc542e7c3 

在这里插入图片描述
防火墙未关闭解决办法:

systemctl status firewalld

完成集群加入后为了便于在Worker节点执行kubectl相关命令,需要进行如下配置:

#创建配置目录
 
root@k8s-2:~# mkdir -p $HOME/.kube
 
#将Master节点中$/HOME/.kube/目录中的config文件拷贝至Worker节点对应目录
 
root@k8s-2:~# scp [email protected]:$HOME/.kube/config $HOME/.kube/
 
#权限配置
 
root@k8s-2:~# sudo chown $(id -u):$(id -g) $HOME/.kube/config

执行完上述操作之后,执行节点状态查看命令“kubectl get nodes”

在这里插入图片描述

3.5 下载网络插件

当前节点是Not Ready状态,说明当前节点的网络通信出现了异常

3.5.1 从阿里云拉取必要镜像

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy-amd64:v1.20.0
 
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2

在这里插入图片描述

3.5.2 将镜像重新打tag

docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy-amd64:v1.20.0 k8s.gcr.io/kube-proxy:v1.20.0
 
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2

3.5.3 如若一切正常,则继续查看节点状态

在这里插入图片描述

3.5.6 等待Pod初始化完成

在这里插入图片描述
等待weave-net-pqqgc初始化完成

kubectl get node

在这里插入图片描述
此时Worker节点成功加入到k8s集群中
此时Worker节点的状态已经变成“Ready”,不过细心的读者可能会发现Worker节点的ROLES并不像Master节点那样显示“master”而是显示了,这是因为新安装的Kubernetes环境Node节点有时候会丢失ROLES信息,遇到这种情况可以手工进行添加,具体命令如下:

kubectl label node k8s-2 node-role.kubernetes.io/worker=worker

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Keyuchen_01/article/details/121962301
今日推荐