Kubernetes(k8s)集群部署全过程+常见问题详解——基于CentOS8(图文)


自己在进行k8s部署集群时,遇到了很多很多问题,可以说是非常麻烦,本文主要是记录部署全过程以及常见问题的一些解决方案

一、设备准备

虚拟机: VMware Workstation Pro 15

这里用到了三台
k8s-master01
k8s-node01
k8s-node02

在这里插入图片描述

操作系统 CentOS8

具体设置可参考另一篇文章 https://blog.csdn.net/qq_46595591/article/details/107151939

设置完成后,在终端输入命令 systemctl set-default multi-user.target 永久关闭图形界面,这样可以减少内存使用

二、Master节点部署

注意,以下均在超级用户下执行

1.设置hostname

操作命令

1.hostnamectl set-hostname 主机名(master/node)
2. cat <<EOF > /etc/hosts 
   127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 
    ::1        localhost localhost.localdomain localhost6 localhost6.localdomain6 
    masters虚拟机ip   master节点名(例如 k8s-master01) 
    node虚拟机ip      node 节点名(例如 k8s-node01)       //有几台加几台
    EOF
  或者 vim /etc/hosts 进入文档修改


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.关闭防火墙

操作命令

systemctl stop firewalld    //必须关闭

3.关闭selinux

操作命令

setenforce 0

4.关闭swap

操作命令

1.swapoff -a     //仅一次,重启后需重新关闭
2.vim /etc/fstab  注释掉最后一句 //永久关闭


在这里插入图片描述

5.将桥接的IPV4流量传递到iptables 的链

操作命令

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


在这里插入图片描述

6.安装docker

操作命令

1.yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine                         //卸载已安装的docker
2.yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2
3.yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  
    //注意这里不要用国外的网址,用阿里云镜像仓库网址,下载速度快
4.yum install docker-ce docker-ce-cli containerd.io
5.docker --version               //成功后查看docker版本信息
6.mkdir -p /etc/docker
 tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://v12afuoi.mirror.aliyuncs.com"]
}
EOF                          //增加镜像加速
7.tee /etc/docker/daemon.json <<-'EOF'
{
  "exec-opts": ["native.cgroupdriver=systemd"]
}         //docker文件驱动默认由cgroupfs 改成 systemd,与k8s保持一致避免conflict,也可以vim /etc/docker/daemon.json
8.systemctl enable docker
  systemctl start docker               //设置开机启动
9.docker info | grep driver            //查看文件驱动

注意,这里可能会出现错误,在下面的问题解决中会有详细的解决方案


在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.Kubernetes yum源配置

操作命令

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


在这里插入图片描述

8.安装k8s

操作命令

1.yum install -y docker-ce kubelet kubeadm kubectl --nobest
2.systemctl enable kubelet           //设置开机启动
3.systemctl start kubelet            //启动后台daemon


在这里插入图片描述

在这里插入图片描述

9.部署Master

9.1初始化获取要下载的镜像列表

因为国外的网站无法直接访问,只能通过镜像下载来安装

操作命令

1.kubeadm config images list   //查看需要安装的镜像
2.kubeadm config print init-defaults > kubeadm.conf   //生成默认kubeadm.conf文件
3.sed -i "s/imageRepository: .*/imageRepository: registry.aliyuncs.com\/google_containers/g" kubeadm.conf
  //把google镜像仓库地址改为国内阿里云镜像仓库地址
4.sed -i "s/kubernetesVersion: .*/kubernetesVersion: v1.18.1/g" kubeadm.conf //指定kubeadm安装的Kubernetes版本
5. kubeadm config images pull --config kubeadm.conf  //下载需要用到的镜像
6. docker images                         //查看下载好的镜像
7. cat tag.sh 
#!/bin/bash
newtag=k8s.gcr.io
for i in $(docker images | grep -v TAG |awk '{print $1 ":" $2}')
do
   image=$(echo $i | awk -F '/' '{print $3}')
   docker tag $i $newtag/$image
   docker rmi $i
done

bash tag.sh                              //给从阿里云镜像仓库下载下来的镜像打上k8s.gcr.io标识


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9.2kubeadm init 初始化master节点

操作命令

kubeadm init --kubernetes-version=v1.18.1 --pod-network-cidr=自己定义pod网段(尽量不和master主机在同一个网段) --apiserver-advertise-address=master主机ip

注意,这里可能会出现问题,在下面会有详解

在这里插入图片描述

9.3.验证测试

操作命令

1.mkdir -p /root/.kube
cp /etc/kubernetes/admin.conf /root/.kube/config             //配置kubectl命令
2.kubectl get node                                           //查看状态


在这里插入图片描述
在这里插入图片描述

10.安装calico网络

操作命令

1.kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
2.kubectl get pods -n kube-system   //查看calico网络是否创建成功


在这里插入图片描述
在这里插入图片描述

三、Node节点部署

1.1-8步与上述相同

2.下载安装镜像

操作命令

1.docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.13.0
docker pull registry.aliyuncs.com/google_containers/pause:3.1
docker pull calico/node:v3.1.4
docker pull calico/cni:v3.1.4
docker pull calico/typha:v3.1.4

docker tag registry.aliyuncs.com/google_containers/kube-proxy:v1.13.0 k8s.gcr.io/kubeproxy:v1.13.0
docker tag registry.aliyuncs.com/google_containers/pause:3.1 k8s.gcr.io/pause:3.1
docker tag calico/node:v3.1.4 quay.io/calico/node:v3.1.4
docker tag calico/cni:v3.1.4 quay.io/calico/cni:v3.1.4
docker tag calico/typha:v3.1.4 quay.io/calico/typha:v3.1.4

docker rmi registry.aliyuncs.com/google_containers/kube-proxy:v1.13.0
docker rmi registry.aliyuncs.com/google_containers/pause:3.1
docker rmi calico/node:v3.1.4
docker rmi calico/cni:v3.1.4
docker rmi calico/typha:v3.1.4
2.kubeadm join 10.0.0.180:6443 --token 8urlva.75zrerl6uctfenec \(此证书在之前master节点成功时会有)
>     --discovery-token-ca-cert-hash sha256:c462c05da6c3685a334b1b1743d4d9b30a38b78208c338f03f5e7d67befaf8bb
3.kubectl get nodes  //查看是否成功

注意,这里可能会出现问题,在下面会有详解


在这里插入图片描述

四、常见问题

1.在安装docker时centos8yum库中没有符合最新版docker-ce对应版本的containerd.io

在输入命令yum install docker-ce docker-ce-cli containerd.io时,出现以下报错
在这里插入图片描述
解决方案

通过阿里云镜像库安装符合最新docker-ce版本的containerd.io

yum install -y https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/edge/Packages/containerd.io-1.2.13-3.2.el7.x86_64.rpm 


在这里插入图片描述

2.在配置docker文件驱动时,文件不存在或其他

通过vim /etc/docker/daemon.json时,文件可能不存在或不可写

解决方案

建议采取第一种

tee /etc/docker/daemon.json <<-'EOF'
{
  "exec-opts": ["native.cgroupdriver=systemd"]
}     

3.在kubeadm init 初始化master节点时,端口被占用

在kubeadm init 初始化master节点时,出现以下报错
在这里插入图片描述
解决方案

kubeadm reset    //重启

4.在kubeadm init 初始化master节点时,swap未关闭

在这里插入图片描述
解决方案:

1.swapoff -a     //仅一次,重启后需重新关闭
2.vim /etc/fstab  注释掉最后一句 //永久关闭

5.在kubeadm init 初始化master节点时,出现The connection to the server :6443 was refused - did you specify the right host or pot

解决方案

1.systemctl restart kube-apiserver
2.systemctl restart kube-controller-manager
3.systemctl restart kube-scheduler                     //重启APISever

6.在k8s后续添加节点失效couldn’t validate the identity of the API Server

在添加node节点时,出现以下报错
在这里插入图片描述
是token失效

解决方案

1.kubeadm token create    //在master节点上输入 获取新的token

猜你喜欢

转载自blog.csdn.net/qq_46595591/article/details/107520114