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

K8s集群搭建

巴韭特锁螺丝 2024-12-15
9

一、准备工作

1、3台centerOS系统

192.168.40.204

Master

192.168.40.205

Noder1

192.168.40.206

Noder2

 

2、修改主机名称(3台)

  1. hostnamectl set-hostname k8s-master

  2. hostnamectl set-hostname k8s-node1

  3. hostnamectl set-hostname k8s-node2


复制

3、关闭防火墙(3台)

  1. #关闭防火墙

  2. systemctl stop firewalld

  3. systemctl stop firewalldsystemctl disable firewalld

  4. #关闭SELinux

  5. sed -i 's/enforcing/disabled/' /etc/selinux/config


复制

4、关闭SWAP(3台)

    • 方式1(注释掉fstab下面一行):
      vim etc/fstab
      #/dev/mapper/rhel-swap   none    swap    defaults        0 0
      方式2
      sed -ri 's/.*swap.*/#&/' etc/fstab

    复制

     5、修改hosts文件(3台都做)

    1. vim etc/hosts

    2. 192.168.40.204 k8s-master

    3. 192.168.40.205 k8s-node1

    4. 192.168.40.206 k8s-node2


    复制

    6、修改网卡配置(3台都做)

    1. vim etc/sysctl.d/kubernetes.conf


    2. net.bridge.bridge-nf-call-ip6tables = 1

    3. net.bridge.bridge-nf-call-iptables = 1

    4. net.ipv4.ip_forward = 1

    5. sysctl -p


    复制

    解释:

    vim etc/sysctl.d/kubernetes.conf

            这个配置用于启用IPv6数据包的防火墙规则检查。在Kubernetes集群中,网络通信可能会涉及IPv6,因此需要启用此选项来确保正确的网络功能

    net.bridge.bridge-nf-call-ip6tables = 1

            net.b这个配置用于启用iptables规则检查。Kubernetes使用iptables来管理容器的网络流量,这个选项确保iptables规则能够正确地应用于容器通信ridge.bridge-nf-call-iptables = 1

    net.ipv4.ip_forward = 1

            这个配置用于启用Linux主机上的IP数据包转发功能。在Kubernetes中,通常需要将网络流量从一个节点路由到另一个节点,以实现容器之间的通信。启用IP数据包转发是实现这一功能的关键。

    sysctl -p

            sysctl -p 命令用于重新加载系统的 sysctl 配置文件,以应用其中的更改,而无需重新启动系统。在你之前提到的 etc/sysctl.d/kubernetes.conf 文件中进行的更改将在运行 sysctl -p 命令后生效,以确保系统的网络配置按照你的要求进行了调整。

    7、系统模块配置(3台都做)

    1. modprobe br_netfilter

    2. lsmod | grep br_netfilter


    复制

    解释:

            运行 modprobe br_netfilter 命令是为了在 Linux 内核中启用桥接网络的网络包过滤功能,以满足容器化和容器编排环境中的网络需求和安全性要求。

    8、安装k8s和docker(3台都做)

      • #安装K8S
        yum install -y kubelet-1.27.0 kubeadm-1.27.0 kubectl-1.27.0
        #安装docker
        yum install -y docker-ce-20.10.18 docker-ce-cli-20.10.18
        #设置K8S开机自启
        systemctl enable kubelet

      复制

       

       注意!!!!!:K8S集群和docker的版本必须兼容。

      9、修改K8S和docker配置文件(3台都做)

        #设置K8S镜像
        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
         
        #设置docker配置文件,如果没有daemon.json文件需要手动进行创建。
        vim etc/docker/daemon.json
        {"exec-opts": ["native.cgroupdriver=systemd"],"registry-mirrors": ["https://8zs3633v.mirror.aliyuncs.com"]
        }
         
        #重启docker
        systemctl restart docker
        systemctl enable docker.service
        复制


        二、集群搭建

        1、启动master(master)

        kubeadm init --apiserver-advertise-address=192.168.40.204 --image-repository=registry.aliyuncs.com/google_containers --kubernetes-version v1.23.0 --service-cidr=10.10.10.0/24 --pod-network-cidr=10.20.20.0/24 --ignore-preflight-errors=all
        复制

        解释:

        kubeadm init:这部分是命令本身,用于启动 Kubernetes 初始化过程。

        --apiserver-advertise-address=192.168.40.204:这个选项指定了 Kubernetes API 服务器向集群中的其他节点和外部客户端宣布的 IP 地址。在这里,API 服务器将使用 192.168.40.204 这个 IP 地址来与其他节点和客户端通信。

        --image-repository=registry.aliyuncs.com/google_containers:这个选项用于指定容器镜像的仓库地址。在这里,使用了 registry.aliyuncs.com/google_containers 作为容器镜像仓库,以加速容器镜像的下载。

        --kubernetes-version v1.23.0:这个选项用于指定要安装的 Kubernetes 版本。在这里,使用的版本是 v1.23.0。

        --service-cidr=10.10.10.0/24:这个选项用于指定 Kubernetes 集群中的服务 IP 地址范围。服务 IP 地址是用于访问 Kubernetes 服务的虚拟 IP 地址。在这里,服务 IP 地址范围被设置为 10.10.10.0/24。

        --pod-network-cidr=10.20.20.0/24:这个选项用于指定 Kubernetes 集群中的 Pod 网络 IP 地址范围。Pod 网络 IP 地址用于容器之间的通信。在这里,Pod 网络 IP 地址范围被设置为 10.20.20.0/24。

        --ignore-preflight-errors=all:这个选项用于忽略 Kubernetes 初始化过程中的预检错误。在这里,使用 all 来表示忽略所有预检错误,这样可以绕过一些可能会引起初始化失败的问题。请注意,这个选项在生产环境中应该谨慎使用,只在特定情况下才使用它,例如在非生产环境中进行实验或调试。

        执行上述代码的结果如下,需要复制标注中的内容在node1,node2执行。

        2、启动noder1和noder2(在node1和node2) 

        在node1和node2上执行启动master中的token命令进行加入。



        1. 4f9ff4a2b6b5afeb3

          • kubeadm join 192.168.40.204:6443 --token




            84yx13.vtuiffikqo9ln33m \
            --discovery-token-ca-cert-hash




            sha256:4b5d495d83d9dffe5c91c5e11be365402606ffadf843086

          复制

          3、查看是否加入集群 

          kubectl get nodes
          复制

          3、查看是否加入集群

          kubectl get nodes
          复制

           

          4、排错

          (1)在启动master或noder报错:

          “[kubelet-check] TheHTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed witherrorGet"http://localhost:10248/healthz": dial tcp [::1]:10248connect: connection refused.”
          复制

          解决方案:

             设置docker配置文件有没有出错daemon.json。

          (2)在启动noder时如果报错:
           

          1. “xecution phase preTlight


          2. fetch the kubeadm-config (onfioMap: failed to get component configs: could not download the kubelet configu


          复制

          解决:

             判断master和noder的K8S集群的版本是否一致是否进行重启。通过如下命令进行检查。

          1. #卸载当前docker

          2. yum remove -y docker-ce-x.x.x docker-ce-cli-x.x.x

          3. #卸载当前k8s

          4. yum remove -y  kubelet-x.x.0 kubeadm-x.x.x kubectl-x.x.x


          复制

          (3)在noder启动失败后会显示一些配置信息已经存在已经存在的报错信息。

          解决:

          1. kubeadm reset   -y

          2. rm -rf /etc/kubernetes/kubelet.conf

          3. rm -rf /etc/kubernetes/pki/ca.crt

          4. systemctl restart kubelet


          复制

          三、部署网络

          1、下载calico(maseter)

             Calico(Calico网络,或Calico项目)是一个用于容器网络和网络策略的开源网络解决方案,特别是在Kubernetes和容器编排环境中广泛使用。Calico旨在提供高性能、可扩展性和安全性的容器网络功能。

            方式一:
            wget https://docs.projectcalico.org/v3.19/manifests/calico.yaml --no-check-certificate
            方式二:
            wget https://docs.projectcalico.org/manifests/calico.yaml --n
            复制

            2、修改pod网络(master)

            修改pod网络“CALICO_IPV4POOL_CIDR”与--pod-network-cidr一致。

            3、修改calico.yaml镜像源(master) 

              cat calico.yaml |grep 'image:'
              sed -i 's#docker.io/##g' calico.yaml
              复制


              4、进行部署(master)

              1. #部署

              2. kubectl apply -f calico.yaml


              3. #查看状态,执行完上一条命令需要等一会才全部running

              4. kubectl get pods -n kube-system


              复制

               5、排错

              1、在部署kubectl apply -f calico.yaml时如果报错:

              error: error parsing calico.yaml: error converting YAML to JSONyaml: line 182: did not find expected '-' indicator
              复制

              解决:请查看回车是否严格正确。

              四、部署Dashboard

              1、下载并配置Dashboard(master)

                      Dashboard是官方提供的一个Web UI,可用于基本管理K8s资源,执行如下命令下载yaml文件。默认Dashboard只能集群内部访问,修改Service为NodePort类型,暴露到外部。

              wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml
              复制

                      修改recommended.yaml中nodePort为31000,添加并且添加type:NodePort。

              注意空格!!!!不然会报错。之后执行如下命令:

                kubectl apply -f recommended.yaml
                kubectl get pods -n kubernetes-dashboard
                复制

                解释:

                kubectl apply -f recommended.yaml

                        用于应用 Kubernetes 资源清单文件 recommended.yaml 中定义的资源配置到 Kubernetes 集群。这个命令将创建、更新或删除集群中的资源,具体取决于清单文件中定义的内容和集群的当前状态

                kubectl get pods -n kubernetes-dashboard

                        获取位于 kubernetes-dashboard 命名空间中的所有 Pod 的信息。

                2、创建service account(master)

                在master节点创建service account并绑定默认cluster-admin管理员集群角色。

                  # 创建用户
                  kubectl create serviceaccount dashboard-admin -n kube-system
                  # 用户授权
                  kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
                  # 获取用户Token
                  kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
                  复制

                  执行命令后复制其中的tocken

                  3、登录Dashboard(master)

                  复制结果中token值登陆Dashboard。登陆https://master ip 或 node ip:31000 都可以。

                  结果:

                    版权声明:本文内容来自CSDN:FlynnAAAA,遵循CC 4.0 BY-SA版权协议上原文接及本声明。
                    本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行可。
                    原文链接:https://blog.csdn.net/m0_59924300/article/details/132648351
                    如有涉及到侵权,请联系,将立即予以删除处理。
                    在此特别鸣谢原作者的创作。
                    此篇文章的所有版权归原作者所有,与本公众号无关,商业转载建议请联系原作者,非商业转载请注明出处。
                    复制

                     

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

                    评论