• 腾讯云部署K8s集群


    腾讯云部署K8s集群

    0. 导读(重要!!!一定要读)

    该篇文章记录了使用腾讯云轻量级应用服务器创建k8s集群,因使用云服务器创建时和通过vmware创建在网卡配置上有很大的不同,我在配置过程中遇到了很多坑,文章中都进行了详细的记录。

    个人建议先通读全文,不要着急下手,其中Master节点操作时只需要走前两步骤即可,其它步骤不要走(那是我踩过的坑),子节点操作整个步骤都不要走,也是我踩过的坑。Master节点操作前两步执行后,直接走虚拟网卡创建这一步骤即可,文章里面有详细的解释。

    1. 环境准备

    版本

    集群版本:

    1. k8s=v1.21.0

    2. kube-apiserver:v1.21.0

    3. kube-proxy:v1.21.0

    4. kube-controller-manager:v1.21.0

    5. kube-scheduler:v1.21.0

    6. coredns:v1.8.0

    7. etcd:3.4.13-0

    8. pause:3.4.1

    服务器配置

    云产商Ip地址系统环境配置角色
    腾讯云轻量级应用服务器XX.XX.236.133CentOS 7.6CPU: 4核 内存: 2GBmaster
    腾讯云轻量级应用服务器XX.XX.91.15CentOS 8.0CPU: 4核 内存: 4GBnode1

    端口配置

    主节点:

    image-20220624154913978

    NodePort Services是pod服务的默认端口范围。这里如果希望Master的IP也可以访问Pod服务,那么也可以给Master主机开放这些端口(建议)

    子节点:

    image-20220624155820105

    所有节点:

    Flannel网络组件构建Pod之间的通信时需要的配置(本文使用的不是Flannel网络,可不配置此项)

    协议方向端口范围作用使用者
    UDP入站8472vxlan Overlay 网络通信Overlay 网络

    2. 安装步骤

    所有主机操作

    1. 提前准备

    1. 配置各主机的名称和hosts

      1. 配置主机名称:vi /etc/hostname

        命令: 
        master服务器:
        k8s-master
        node1号服务器:
        k8s-node01
        
        • 1
        • 2
        • 3
        • 4
        • 5
      2. 修改hosts:

        添加:  IP地址  hostname
        XX.XX.236.113 k8s-master
        XX.XX.91.15 k8s-node01 
        
        • 1
        • 2
        • 3
    2. 在K8s中为了高效运行,整个集群的机器需要关闭防火墙、SWAP分区以及Selinux,使用如下命令:

    #关闭防火墙
    systemctl stop firewalld
    systemctl disable firewalld
    
    # 暂时关闭SWAP分区
    swapoff -a
    # 永久禁用SWAP分区
    swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
    
    # 禁用Selinux
    setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    image-20220623110434765

    1. 将系统中桥接的IPv4以及IPv6的流量串通:
    cat >/etc/sysctl.d/k8s.conf << EOF
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    EOF
    sysctl --system
    
    • 1
    • 2
    • 3
    • 4
    • 5

    image-20220623110543220

    1. 时间同步

      # 时间同步
      yum install ntpdate -y
      ntpdate time.windows.com
      
      • 1
      • 2
      • 3

    2. 安装docker

    详细看这一篇:mystudy/服务器部署/Docker基础篇.md · Zhang-HaoQi/Knowledge - 码云 - 开源中国 (gitee.com)

    3. 安装Kubernetes的安装组件

    1. 查看最新版的k8s

      curl -sSL https://dl.k8s.io/release/stable.txt
      
      • 1

      image-20220623110809785

      目前最新版本是1.24.2,k8s1.24版本之后不再使用docker作为容器,因此我们暂不使用该版本,使用1.21.0版本进行安装

    2. 安装k8s的yum源

      vi /etc/yum.repos.d/kubernetes.repo
      
      # 在这个文件中输入
      [kubernetes]
      name=Kubernetes
      baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
      enable=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
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
    3. 移除旧版本

       yum remove -y kubelet kubeadm kubectl
      
      • 1
    4. 查看可安装的版本

       yum list kubelet --showduplicates | sort -r
      
      • 1

      image-20220623111912246

    5. 安装kubelet、kubeadm、kubectl 指定版本

       yum install -y kubelet-1.21.0 kubeadm-1.21.0 kubectl-1.21.0
      
      • 1

      image-20220623112218491

    6. 设置开机启动

      systemctl enable kubelet.service
      
      • 1

      image-20220623112258298

    Master节点操作(只进行第一步和第二步操作,之后直接走虚拟网卡创建步骤)

    1. 安装初始化master节点镜像

       #!/bin/bash
       images=(
         kube-apiserver:v1.21.0
         kube-proxy:v1.21.0
         kube-controller-manager:v1.21.0
         kube-scheduler:v1.21.0
         coredns:v1.8.0
         etcd:3.4.13-0
         pause:3.4.1
       )
       for imageName in ${images[@]} ; do
           docker pull registry.cn-hangzhou.aliyuncs.com/xue_k8s_images/$imageName
       done
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13

      开启执行权限并运行脚本

      chmod +x images.sh && ./images.sh

      image-20220623164541163

    2. 注意1.21.0版本的k8s coredns镜像比较特殊,结合阿里云需要特殊处理,重新打标签

      docker tag registry.cn-hangzhou.aliyuncs.com/xue_k8s_images/coredns:v1.8.0 registry.cn-hangzhou.aliyuncs.com/xue_k8s_images/coredns/coredns:v1.8.0

      image-20220623164655075

    3. 初始化主节点**(该操作废弃,直接查看虚拟网卡创建这一步)**

     kubeadm init \
     --apiserver-advertise-address=10.0.24.17 \
     --image-repository registry.cn-hangzhou.aliyuncs.com/xue_k8s_images \
     --kubernetes-version v1.21.0 \
     --service-cidr=10.96.0.0/16 \
     --pod-network-cidr=10.244.0.0/16
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    注意:–apiserver-advertise-address是内网ip,即云服务器的ip地址(如果配置成内网ip,则会)

    image-20220623165228581

    出现报错:

    image-20220623170551031

    [警告IsDockerSystemdCheck]:检测到“cgroupfs”作为Docker cgroup驱动程序。 推荐的驱动程序是“systemd”。

    解决措施:

    1. 修改/etc/docker/daemon.json文件,添加推荐的驱动

      "exec-opts":["native.cgroupdriver=systemd"]

      image-20220623170755968

    2. 重启docker并查看状态

      systemctl restart docker
      systemctl status docker
      
      • 1
      • 2

      image-20220623170910411

    执行完成后再次执行初始化主节点语句

     kubeadm init \
     --apiserver-advertise-address=10.0.24.17 \
     --image-repository registry.cn-hangzhou.aliyuncs.com/xue_k8s_images \
     --kubernetes-version v1.21.0 \
     --service-cidr=10.96.0.0/16 \
     --pod-network-cidr=10.244.0.0/16
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    成功:

    image-20220623172939991

    1. 按照上方图片提示,继续下一步。(该操作废弃,直接查看虚拟网卡创建这一步)

      1. 复制相关文件

        image-20220623171500572

        To start using your cluster, you need to run the following as a regular user:
        要开始使用集群,您需要以常规用户的身份运行以下命令:
        mkdir -p $HOME/.kube
        sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
        sudo chown $(id -u):$(id -g) $HOME/.kube/config
        
        • 1
        • 2
        • 3
        • 4
        • 5
      2. 部署一个pod网络

        image-20220623171644191

        提示部署一个docker网络

         kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
        
        • 1

        image-20220623172542335

        命令检查

        查看集群中所有部署好的pod:kubectl get pod -A

      image-20220623172648371

      ​ 查看集群所有机器的状态kubectl get nodes

      image-20220623172740034

    2. 将子节点加入到master节点**(该操作废弃,直接查看虚拟网卡创建这一步)**

      token过期

       kubeadm token create --print-join-command
       kubeadm token create --ttl 0 --print-join-command # 生成永久token
       kubeadm token list  查看token的列表
      
      • 1
      • 2
      • 3

      子节点执行命令

      kubeadm join 10.0.24.17:6443 --token ixhnzj.f2yevqsxq4clfhwx \
              --discovery-token-ca-cert-hash sha256:e4aeb1795bbcb00c4a5bd60c8953841789765e69ebb63836fbbb1b62ece1cecb
      
      • 1
      • 2

    子节点操作(该操作废弃,直接查看虚拟网卡创建这一步)

    1. 不确定者两步骤是否必要(出现了问题配置了这两步,但是配置好后还是不行)
    # node节点执行
    iptables -t nat -A OUTPUT -d 10.0.24.17 -j DNAT --to-destination 82.157.236.133
    # master节点执行
    iptables -t nat -A OUTPUT -d 10.0.12.14 -j DNAT --to-destination 159.75.91.15
    
    • 1
    • 2
    • 3
    • 4
    1. 加入主节点

      kubeadm join 10.0.24.17:6443 --token ixhnzj.f2yevqsxq4clfhwx \
              --discovery-token-ca-cert-hash sha256:e4aeb1795bbcb00c4a5bd60c8953841789765e69ebb63836fbbb1b62ece1cecb
      
      • 1
      • 2
    2. 此时卡死,无法进行下一步

      在命令后方添加–v=2,查看详细的日志

      kubeadm join 10.0.24.17:6443 --token ixhnzj.f2yevqsxq4clfhwx \
              --discovery-token-ca-cert-hash sha256:e4aeb1795bbcb00c4a5bd60c8953841789765e69ebb63836fbbb1b62ece1cecb --v-2
      
      • 1
      • 2

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lIeIWEXa-1656059397278)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20220624085653130.png)]

    ​ 发现,请求超时。回想了一下,原因可能在于不同的云服务之间,内网可能是无法直接互通的,因此我决定在master节点初始化(init)的时候,使用外网ip (真实的服务器地址)。

    因为之前配置好了,因此需要重置一下k8s。

    kubeadm reset    # 重置
     rm -rf $HOME/.kube # 移除相关配置
     
     # 使用外网ip初始化master节点
     kubeadm init \
     --apiserver-advertise-address=XX.XX.236.113 \ # 服务器ip
     --image-repository registry.cn-hangzhou.aliyuncs.com/xue_k8s_images \
     --kubernetes-version v1.21.0 \
     --service-cidr=10.96.0.0/16 \
     --pod-network-cidr=10.244.0.0/16
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    结果出现了这个报错(可能跟应用服务器的本身有关,看网上资料大概是购买的服务器真实的IP并不在网卡上,需要另外配置)

    找到了一篇阿里云配置k8s的文章,但是没有成功,还是一直卡在这里:(149条消息) 基于阿里云ECS服务器搭建k8s集群_落日后的余晖的博客-CSDN博客_阿里云搭建kubernetes

    image-20220624090146274

    解决:

    后经过查找资料,我们直接使用服务器公网IP启动K8S集群,但是直接是不行的,服务器上没有这个IP的网卡,所以我们需要在对应网卡上创建一个对应公网IP的虚拟网卡:

    注意:这里是创建一个新的虚拟网卡,我当时没开仔细,直接在eth0:里面添加了真实服务器的ip地址作为网卡,结果服务器直接链接不上了,在腾讯云官网使用vnc登陆后,将eth0改成默认的才得以正常链接

    虚拟网卡创建

    由于云主机网卡绑定的都是内网 IP, 而且几台云服务器位于不同的内网中(VPC网络不互通), 直接搭建会将内网 IP 注册进集群导致搭建不成功。

    image-20220624143212422

    解决方式:使用虚拟网卡绑定公网 IP, 使用该公网 IP 来注册集群。

    1. 创建虚拟网卡,并绑定公网ip(每台机器都需要执行)

      # 所有主机都要创建虚拟网卡,并绑定对应的公网 ip
      # 临时生效,重启会失效
      ifconfig eth0:1 <你的公网IP>
       
      # 永久生效
      cat > /etc/sysconfig/network-scripts/ifcfg-eth0:1 <<EOF
      BOOTPROTO=static
      DEVICE=eth0:1
      IPADDR=<你的公网IP>
      PREFIX=32
      TYPE=Ethernet
      USERCTL=no
      ONBOOT=yes
      EOF
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14

      查看配置的虚拟网卡:ifconfig

    image-20220624143558584

    1. 修改kubelet启动参数文件(每台机器都需要执行)

      # 此文件安装kubeadm后就存在了
      vim /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
       
      # 注意,这步很重要,如果不做,节点仍然会使用内网IP注册进集群
      # 在末尾添加参数 --node-ip=公网IP
      ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS --node-ip=<公网IP>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
    2. 初始化master节点

      执行初始化操作(master节点操作)

        kubeadm init \
       --apiserver-advertise-address=XX.XX.236.113 \  # 真实ip地址
       --image-repository registry.cn-hangzhou.aliyuncs.com/xue_k8s_images \
       --kubernetes-version v1.21.0 \
       --service-cidr=10.96.0.0/16 \
       --pod-network-cidr=10.244.0.0/16
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6

    ​ 终于:执行成功了,在不配置虚拟网卡之前,使用公网ip进行init的时候,总是异常。

    image-20220624150119438

    # 创建相应文件夹
    要开始使用集群,您需要以常规用户的身份运行以下命令:
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    # 配置网络
     kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    1. 根据提示,创建文件夹和布置好网络后,进入子节点服务器,使用join命令

      如果之前join过,最好先重置子节点(kubeadm reset),再加入主节点

    kubeadm reset    # 重置
    rm -rf $HOME/.kube # 移除相关配置
     # 加入主节点
    kubeadm join xx.xx.236.113:6443 --token cy8q3s.esmh256v2kk5vayp \
            --discovery-token-ca-cert-hash sha256:7caec2dcfedb6906319df9685bd5f300e29d1dfadadd131ec3bbc91a8cc8127a 
    
    • 1
    • 2
    • 3
    • 4
    • 5

    成功

    image-20220624150239795

    在主节点执行查看命令:kubectl get nodes,发现node01已经成功添加到集群中。配置完成

    image-20220624150316889

    3. 问题汇总

    1. cgroupfs作为doker驱动,推荐systemd

    image-20220624161928888

    1. 腾讯云不同帐号不同服务器的内网不互通问题

    腾讯云的轻量级服务器默认同一帐号,同一区域的服务器内网是互通的,我这里是两个帐号,两台区域不同的服务器,因此内网不互通,只能配置外网,但是云服务器提供的ip地址不能直接当作网卡使用,需要创建虚拟网卡。

    云服务器 修改内网 IP 地址-操作指南-文档中心-腾讯云 (tencent.com)

    2. 腾讯云轻量级应用服务器修改网卡后,链接不上

    注意:在上方blog中,人家提到的是创建虚拟网卡,而我直接修改了网卡,导致链接不上。

    vnc登陆后,把配置还原到修改前,重新启动就可以了。

    进入:

    image-20220624105032434

    4. 参考blog

    (149条消息) 基于阿里云ECS服务器搭建k8s集群_落日后的余晖的博客-CSDN博客_阿里云搭建kubernetes

    (152条消息) 三、公网环境搭建Kubernetes (k8s) 集群的详细图解_胖太乙的博客-CSDN博客_k8s公网搭建

    (152条消息) 在Linux公网、云服务器搭建K8s集群_水妖3的博客-CSDN博客

  • 相关阅读:
    猿创征文|Java中的IO流大家族 (两万字详解)
    HTTP协议,HTTP模块,express框架
    快速学会linux中ssh服务的连接
    无胁科技-TVD每日漏洞情报-2022-9-8
    HTML5七夕情人节表白网页制作【唯美3D相册】HTML+CSS+JavaScript
    数据结构之栈
    Geteway
    python学习笔记之word文档提取
    第14讲:DCL类型的SQL语句之用户管理
    科大讯飞--C++开发工程师一面
  • 原文地址:https://blog.csdn.net/zhang19903848257/article/details/125447578