当前位置:   article > 正文

使用kubeadm在VMware虚拟机从0开始搭建k8s集群,踩完所有坑_flannel-cni-plugin:v1.5.1-flannel1

flannel-cni-plugin:v1.5.1-flannel1

介绍

官网介绍:概述 | Kubernetes

本次部署将从虚拟机创建到k8s搭建完成,需准备4个虚拟机,宿主机需准备至少12G的运行内存

环境准备

        k8s是一个master节点管理其他所有工作节点,为此准备了一个master虚拟机,三个工作node虚拟机

初始环境要求

  • 一台或多台机器,操作系统 CentOS7.x-86_x64【CentOs官网下载,CentOS国内镜像下载_centos镜像下载官网-CSDN博客

  • 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多

  • 可以访问外网,需要拉取镜像,如果服务器不能上网,需要提前下载镜像并导入节点

  • 禁止swap分区【会导致shell工具文件上下传功能失效】

  • 每个机器有自己的固定ip

虚拟机创建

准备4个虚拟机

需提前规划号ip,名称尽量主机名与虚拟机名称一致,名称中不要带下划线,带下划线则kubeadm不能正常初始化【踩坑】

虚拟机名称IP
k8smaster192.168.1.201
k8snode1192.168.1.202
k8snode2192.168.1.203
k8snode3192.168.1.204
 虚拟机搭建,基本都是下一步下一步的无脑操作
创建虚拟机

 

 

名称:见名知意即可

位置:自定义的虚拟机位置,我为D盘

 

 

网络尽量使用桥接方式【踩坑】

 

重复上述操作,再创建3个node节点虚拟机,其他步骤都是一模一样,只是虚拟机名称不一样

 

 初始化虚拟机

选择“测试并安装”,回车开始执行

 等待1分钟

把网络连接开启,现在开启就不用后面使用命令开启了【踩坑】

安装位置如果报红,只需要点击进去再点击左上角【完成】按钮即可

 

软件安装

开始安装

设置root用户的密码

密码设置完后点击“完成配置”按钮

重启,等待1分钟即可

使用root用户,与刚才设置的密码登录进去

验证网络是否正常,使用下面两个命令分别查看本机ip与是否能正常使用网络

  1. # 查看本机ip
  2. ip a
  3. # 查看是否可以正常访问互联网
  4. ping www.baidu.com

此时显示的网络配置为ens33,记住这个名称后面要使用

K8S服务搭建

准备软件环境

配置固定ip

为什么要配置固定IP:1.方便使用shell工具;2.后续k8s服务搭建需要使用到固定IP

按照最上面表格的ip与名称的对应关系配置k8smaster虚拟机的固定ip,同一个网段ip值大的一般都不会因为ip重复导致连不了网,比如192.168.1.201

  1. # 配置固定ip,进入ifcfg-ens33,这个网络配置就是上面使用命令【ip a】看到的网卡
  2. vi /etc/sysconfig/network-scripts/ifcfg-ens33
  3. # 键入i进入编辑模式
  4. # 1.把ip配置修改为静态【BOOTPROTO="static"】
  5. BOOTPROTO="static"
  6. # 2.在末尾添加这三个个配置
  7. # ip为最开始准备的固定IP,
  8. # 子码掩网:255.255.255.0表示只要192.168.1.X的就是同一个网段,可相互通信,
  9. # 网关ip:网关IP可以在宿主机的cmd使用命令【ipconfig】可以看到
  10. IPADDR="192.168.1.201"
  11. NETMASK="255.255.255.0"
  12. GATEWAY="192.168.1.1"
  13. # 保存并退出【按esc后,键入冒号【:】再输入wq回车】
  14. # 3.使用命令重启网络服务
  15. service network restart

此处为配置一台虚拟机的示例,其他的node虚拟机也需要安装表格的ip分配,配置自己的固定ip

有了固定的ip,就可以使用shell工具连接虚拟机执行后面操作了,不使用shell工具也可以,但不太方便,我使用的工具是finalshell,官网下载地址【FinalShell SSH工具,服务器管理,远程桌面加速软件,支持Windows,macOS,Linux,版本4.3.10,更新日期2023.12.31 - FinalShell官网 (hostbuf.com)】,使用FinalShell工具的命令窗口时,可使用【Ctrl+Shift+v】快速粘贴命令

yum命令国内镜像源配置【踩坑】

所有机器都要配置,不配置在执行安装时总是会报baseurl不对

  1. # yum 命令安装 ,如果yum命令不能正常使用则需要重新配置源
  2. # 把原配置重命名
  3. mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
  4. # 现在新的配置
  5. curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
  6. # 清除缓存
  7. yum clean all
  8. # 生成缓存
  9. yum makecache
  10. # 查看使用有可用的仓库,如果所有仓库都是禁用,则需要在网上查找可用的yum镜像源,并重新配置
  11. yum repolist all

其他配置

以下命令只在master执行

  1. # 在master添加hosts
  2. # 下面六行是一个命令
  3. cat >> /etc/hosts << EOF
  4. 192.168.1.201 k8smaster
  5. 192.168.1.202 k8snode1
  6. 192.168.1.203 k8snode2
  7. 192.168.1.204 k8snode3
  8. EOF
  9. # 使用ping命令测试是否配置成功,都可以ping通则配置成功
  10. ping k8smaster
  11. ping k8snode1
  12. ping k8snode2
  13. ping k8snode3

下面命令需在所有机器都要执行的命令,包括master

  1. # 关闭防火墙
  2. systemctl stop firewalld #临时关闭防火墙
  3. systemctl disable firewalld #启动时禁用防火墙
  4. # 关闭selinux
  5. sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
  6. setenforce 0 # 临时
  7. # 关闭swap,注意swap关闭后将不能使用文件finalshell工具的文件上下传功能【踩坑】
  8. swapoff -a # 临时
  9. sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久
  10. # 根据规划设置主机名,尽量与虚拟机名称一致
  11. # hostnamectl set-hostname k8smaster
  12. # hostnamectl set-hostname k8snode1
  13. # hostnamectl set-hostname k8snode2
  14. # hostnamectl set-hostname k8snode3
  15. hostnamectl set-hostname <hostname>
  16. # 将桥接的IPv4流量传递到iptables的链
  17. # 下面这四行是一个命令
  18. cat > /etc/sysctl.d/k8s.conf << EOF
  19. net.bridge.bridge-nf-call-ip6tables = 1
  20. net.bridge.bridge-nf-call-iptables = 1
  21. EOF
  22. sysctl --system # 生效
  23. # wget 安装,wget是k8s用于递归下载文件的工具,如果wget不能使用则需要按钮,-y表示不需要再次输入y确认
  24. yum install wget -y
  25. # vim 文本编辑命令安装
  26. yum install vim -y
  27. # 时间同步
  28. yum install ntpdate -y
  29. ntpdate time.windows.com

安装docker

所有机器都要执行的命令,包括master

  1. # 下载docker的yum命令镜像源
  2. curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  3. # 执行安装目录
  4. yum -y install docker-ce-18.06.1.ce-3.el7
  5. # 设置开机启动,并立即启动docker
  6. systemctl enable docker && systemctl start docker
  7. # 检查是否安装成功
  8. docker --version
  9. # 看到下面版本号表示安装成功
  10. # Docker version 18.06.1-ce, build e68fc7a
  11. ## 注意,在执行这个步骤之前,需要先测试这个docker源是否还能正常使用,
  12. ping b9pmyelo.mirror.aliyuncs.com
  13. ## 若不能使用则需要找到能使用的
  14. # 下面这四行是一个命令
  15. cat > /etc/docker/daemon.json << EOF
  16. {
  17. "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
  18. }
  19. EOF
  20. # 重启docker
  21. systemctl restart docker
  22. # 查看docker服务状态
  23. service docker status

安装kubeadm,kubelet和kubectl

所有机器都要执行的命令,包括master

  1. # 在安装之前需要先下载国内k8s的yum镜像源
  2. # 下面十行是一个命令
  3. cat > /etc/yum.repos.d/kubernetes.repo << EOF
  4. [kubernetes]
  5. name=Kubernetes
  6. baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
  7. enabled=1
  8. gpgcheck=0
  9. repo_gpgcheck=0
  10. gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
  11. EOF
  12. # 执行安装命令,把三个工具一次性安装好
  13. yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
  14. # 设置开机启动
  15. systemctl enable kubelet

部署Kubernetes Master

以下命令只在master执行

  1. ## 注意apiserver-advertise-address要为master的本机ip,
  2. # 等初始化待命令执行完成
  3. kubeadm init --apiserver-advertise-address=192.168.1.201 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.0 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16
  4. # 确保 $HOME/.kube 目录存在,如果不存在则创建
  5. mkdir -p $HOME/.kube
  6. # 将 Kubernetes 集群的管理员配置文件复制到 $HOME/.kube/config,以便 kubectl 命令可以使用它来连接到集群
  7. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  8. # 将 $HOME/.kube/config 文件的所有者和所属组修改为当前用户和当前用户的主要组,这样当前用户就有权限读取和修改这个配置文件了
  9. sudo chown $(id -u):$(id -g) $HOME/.kube/config

加入Kubernetes Node

执行创建token的命令,并把创建出来的token在所有node机器上面都执行,在master生成token,在node执行加入节点命令

  1. # 在master执行创建创建token的命令,
  2. # 该token的有效期为24小时,过了24小时重新加入节点则需要重新创建token
  3. kubeadm token create --print-join-command
  4. # 把生成的命令在其他node机器上面都执行一遍
  5. ################注意!注意!注意!下面的命令为上面的命令动态生成的################
  6. kubeadm join 192.168.1.201:6443 --token ms93fv.wl4kgvcblos3vcvo --discovery-token-ca-cert-hash sha256:bff26f8f08e0f0abfc4e0aceb4b021e3132998afbe4b23841f012dcd1ca3fb15
  7. # 在master查看节点是否加入成功,
  8. # 看到有三个node则表示加入成功,但还是未准备状态,还需要继续配置
  9. kubectl get nodes

部署CNI网络插件

CNI为节点与master通信的插件,在master执行以下命令

  1. # 上述网址为国外源,使用下面网址访问
  2. kubectl apply -f https://raw.gitmirror.com/coreos/flannel/master/Documentation/kube-flannel.yml
  3. # 查看docker镜像服务情况
  4. kubectl get pod -A

使用看到命令【kubectl get pod -A】后如果看到Init:ImagePullBackOff,或者其他镜像问题,大概率是kubectl工具根据kube-flannel.yml配置自动拉取镜像拉取失败了,需按下面排查步骤排查【开始踩大坑】

以下排查步骤为【踩坑、踩坑、踩坑】,踩出来的;没有提到所有机器都有执行,则只在master执行

  1. #############问题排查start###############
  2. # 1.先使用命令【kubectl get pod -A】查看服务的情况,根据镜像的情况,比如检查失败,或者拉取失败等# 执行应对措施
  3. kubectl get pod -A
  4. # 2.1.检查失败,重新拉取
  5. # 2.2.拉取失败,检查docker的镜像源是否可用,不可以则替换为可用的镜像源,参考【https://gitee.com/xxxgod/Java-DevSpace/tree/master/doc】
  6. # 2.3.注意,以下镜像源只是作为参考,需ping通了才算可使用状态,并且是所有机器都要执行的操作
  7. vim /etc/docker/daemon.json # 打开docker镜像源配置文件
  8. # 把下载这些可用ping通的镜像源放置进去,或者自己去网上找可以ping通的docker镜像源
  9. {
  10. "registry-mirrors": [
  11. "https://b9pmyelo.mirror.aliyuncs.com",
  12. "https://ustc-edu-cn.mirror.aliyuncs.com/",
  13. "https://ccr.ccs.tencentyun.com/",
  14. "https://docker.m.daocloud.io/"
  15. ]
  16. }
  17. # 2.4.注意:配置好了需要重启docker,不然配置不生效
  18. systemctl restart docker
  19. # 3.检查【kube-flannel.yml】文件中的【image:】后面的镜像配置与上面看到的是否都拉取到了
  20. # 3.1.在浏览器打开上述【kubectl apply -f https://raw.gitmirror.com/coreos/flannel/master/Documentation/kube-flannel.yml】命令对应的配置文件地址,即可查看到kube-flannel.yml文件的内容
  21. # 4.每台机器都手动执行命令拉取镜像【docker pull docker.io/flannel/flannel:v0.25.4】
  22. docker pull docker.io/flannel/flannel-cni-plugin:v1.5.1-flannel1
  23. docker pull docker.io/flannel/flannel:v0.25.4
  24. # 5.等待5分钟,等待服务自动恢复,若服务自动恢复则不需要执行下面的步骤,以下命令在master执行
  25. kubectl get pod -A #查看各个pod的运行状态
  26. kubectl get nodes #查看节点的运行就绪状态
  27. # 5.1.删除应用,
  28. kubectl delete -f https://raw.gitmirror.com/coreos/flannel/master/Documentation/kube-flannel.yml
  29. # 5.2.重新创建应用
  30. kubectl apply -f https://raw.gitmirror.com/coreos/flannel/master/Documentation/kube-flannel.yml
  31. ##############问题排查end################

如图所示即表示k8s集群搭建成功

测试kubernetes集群

在master执行以下命令

  1. # 在 Kubernetes 集群中创建一个名为 nginx 的 Deployment,使用的容器镜像是官方的 Nginx 镜像
  2. kubectl create deployment nginx --image=nginx
  3. # 在 Kubernetes 中创建一个名为 nginx 的服务,并将该服务与 nginx Deployment 关联起来
  4. kubectl expose deployment nginx --port=80 --type=NodePort
  5. # 列出当前 Kubernetes 集群中所有的 Pod 和 Service 的信息
  6. kubectl get pod,svc
  7. # 查看拉取到的pod
  8. kubectl get pod

看到以下日志则表示nginx在master与所有node都部署成功了,

通过master或者node的ip:30924即可访问到nginx,分别访问

192.168.1.201:30924 master

192.168.1.202:30924 node1

192.168.1.203:30924 node2

192.168.1.204:30924 node3

可以看到一个master与三个node都可以正常访问

至此K8S使用最简单的部署方式部署就算完成了

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/1009465
推荐阅读
  

闽ICP备14008679号