暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ESXi搭建K8s运行环境

数据中心知识 2023-03-14
1358

第一部分:系统安装,用MobaXterm连接


01


新建3台虚拟机

设置如下

操作系统centos7.9(core)2C 2G 20G

master(192.168.3.160)

node1(192.168.3.161)

node2(192.168.3.162)

node3(192.168.3.163)



提前将iso文件上传至data,光驱选择centos系统文件



更改时区、支持语言、最小安装、默认分区设置



设置静态ip、主机、网卡名



安装



其他三台node节点服务器,按照相同的步骤完成安装备用。

MobaXterm的安装省略!设置登录账户密码信息



登录192.168.3.160~163虚机



全部登录后,可使用MobaXterm工具带的Muti-execution功能批量命令行操作!




第二部分:设置系统环境安装docker


01

主机名解析(以下命令 所有节点都要执行)

编辑三台服务器的 etc/hosts 文件 ,添加下面内容:

192.168.3.160 master

192.168.3.161 node1

192.168.3.162 node2

192.168.3.163 node3


02

时间同步chrony

使用 rpm -qa |grep chrony 查看系统是否已安装chrony,没有安装环境可使用

    yum install chrony 
    systemctl start chronyd
    systemctl enable chronyd
    date



    03


    禁用selinux和firewalld服务

      systemctl stop firewalld 
      systemctl disable firewalld
      systemctl status firewalld 查看防火墙状态
      sed -i 's/enforcing/disabled/' etc/selinux/config #重启后生效




      swap分区指的是虚拟内存分区,它的作用是物理内存使用完,之后将磁盘空间虚拟成内存来使用,启用swap设备会对系统的性能产生非常负面的影响,因此kubernetes要求每个节点都要禁用swap设备,但是如果因为某些原因确实不能关闭swap分区,就需要在集群安装过程中通过明确的参数进行配置说明

      编辑分区配置文件/etc/fstab,注释掉swap分区一行 # 注意修改完毕之后需要重启linux服务


      04

      关闭swap

        vi etc/fstab 
        #注释掉下面的设置 dev/mapper/centos-swap swap



        05

        添加网桥过滤和地址转发功能


          cat <<EOF | sudo tee etc/sysctl.d/k8s.conf
          net.bridge.bridge-nf-call-iptables = 1
          net.bridge.bridge-nf-call-ip6tables = 1
          net.ipv4.ip_forward = 1
          EOF
          # 应用 sysctl 参数而不重新启动
          sudo sysctl --system




          06

          docker安装

            #安装docker依赖 
            yum install -y yum-utils
            #设置docker仓库镜像地址 
            yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
            #安装下载
            docker yum install docker-ce docker-ce-cli containerd.io 
            #设置docker开机启动 
            systemctl enable docker && systemctl start docker 
            重启docker服务 
            systemctl restart docker




            第三部分:安装k8s


            01

            kubernetes镜像切换成国内源

              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.gpghttps://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg 
              EOF


              02

              安装 kubeadm,kubelet 和 kubectl

              yum install kubelet-1.19.4 kubeadm-1.19.4 kubectl-1.19.4 -y

              #设置kubelet开机启动

              systemctl enable kubelet.service

              查看有没有安装:

              yum list installed | grep kubelet

              yum list installed | grep kubeadm

              yum list installed | grep kubectl

              查看安装的版本:kubelet --version

              此时应该重启一下centos;

              Kubelet:运行在cluster所有节点上,负责启动POD和容器;

              Kubeadm:用于初始化cluster的一个工具;

              Kubectl:kubectl是kubenetes命令行工具,通过kubectl可以部署和管理应用,查看各种资源,创建,删除和更新组件;




              第四部分:部署Kubernetes


              下面的操作只需要在master节点上执行即可(初始化完成后,最后会输出一个join命令,可以先保存后面会用)


              01

              在master主机上运行

                kubeadm init --apiserver-advertise-address=192.168.3.160 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=1.19.4 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16


                –apiserver-advertise-address #集群通告地址(master 机器IP)

                –image-repository #由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址

                –kubernetes-version #K8s版本,与上面安装的一致

                –service-cidr #集群内部虚拟网络,Pod统一访问入口

                –pod-network-cidr #Pod网络,与下面部署的CNI网络组件yaml中保持一致




                会报以下错误



                解决方法,下载coredns/coredns,改名后,重新运行

                先重启

                  daemon systemctl daemon-reload 
                  systemctl restart docker.service
                  docker pull coredns/coredns
                  docker tag docker.io/coredns/coredns k8s.gcr.io/coredns/coredns:v1.8.0 

                  再次运行

                    kubeadm init --apiserver-advertise-address=192.168.3.160 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=1.19.4 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16

                    提示安装成功!把join内容先记录下来


                      kubeadm join 192.168.3.160:6443 --token mk7699.s26ez7olybm1vc1s --discovery-token-ca-cert-hash sha256:262f1c27c206ea157b04c69d1c1dd93aca7fef53e4da731aad2dbd97168841a0


                      接下来在master机器上执行:拷贝kubectl使用的连接k8s认证文件到默认路径:


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

                        查看节点

                          kubectl get nodes


                          发现status状态为NotReady


                          安装下面的容器

                            kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml


                            再次查看状态,已变为Ready


                            Node节点加入集群(3个node节点)

                            在192.168.3.161、

                                                162、

                                                163(Node节点) 执行 向集群添加新节点,执行在kubeadm init输出的kubeadm join命令:

                              kubeadm join 192.168.3.160:6443 --token mk7699.s26ez7olybm1vc1s --discovery-token-ca-cert-hash sha256:262f1c27c206ea157b04c69d1c1dd93aca7fef53e4da731aad2dbd97168841a0


                              如果还是报错,同样下载上文中的容器即可解决!



                              最后查看节点是否已经添加,K8s部署完毕!



                              如上图,可以用下面代码修改节点的标签

                                kubectl label no node2 kubernetes.io/role=xxx

                                文章转载自数据中心知识,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                评论