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

k8s系列-09-一键部署k8s集群之kubespary

运维家 2022-03-14
483

老板们,点个关注吧。


第一:为什么中断两天没有更新:

        因为前两天突然发现kubespary已经更新到了2.18的版本了,所以想弄到最新版看看什么情况,觉得还是应该写最新版的部署方式,研究时间较长,就断了。


第二:本文能学到什么:

        通过本文可以让你从只有几台裸机的情况,获得一个成熟的k8s集群。


声明

前两篇文章的可参考性非常强,并不是说前两篇的内容就没用了,尽管前两篇的内容是2.15版本的,但是本文也是在前两篇的基础上进行的扩展。理论知识看前面的文章,本篇不说废话,只有实操。

环境

hostname

IP
role
cpumem
node1
192.168.112.130
master
>=2
>=2
node2
192.168.112.131master
>=2
>=2
node3192.168.112.132worker
>=2
>=2


主机名修改

node1:
    [root@localhost ~]# vim etc/hostname
    node1
    [root@localhost ~]# hostname node1
    [root@localhost ~]# bash
    [root@node1 ~]#

    node2:
      [root@localhost ~]# vim etc/hostname
      node2
      [root@localhost ~]# hostname node2
      [root@localhost ~]# bash
      [root@node2 ~]

      node3:
        [root@localhost ~]# vim etc/hostname
        node3
        [root@localhost ~]# hostname node3
        [root@localhost ~]# bash
        [root@node3 ~]


        关闭安全策略

        PS:每台服务器上都要进行操作。
          [root@node1 ~]# systemctl stop firewalld.service
          [root@node1 ~]# systemctl disable firewalld.service
          [root@node1 ~]vim /etc/selinux/config 
          SELINUX=disabled # 修改成这样
          [root@node1 ~]# getenforce 0
          [root@node1 ~]reboot # 每台服务器重启一遍


          设置iptables、dns

          PS:每台服务器上都要进行操作。
            [root@node1 ~]# iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT
            [root@node1 ~]# systemctl stop dnsmasq.service
            [root@node1 ~]# systemctl disable dnsmasq.service


            k8s参数配置

            PS:每台服务器上都要进行操作。
              [root@node1 ~]# vim /etc/sysctl.d/kubernetes.conf 
              net.bridge.bridge-nf-call-ip6tables = 1
              net.bridge.bridge-nf-call-iptables = 1
              net.ipv4.ip_nonlocal_bind = 1
              net.ipv4.ip_forward = 1
              vm.swappiness = 0
              vm.overcommit_memory = 1
              [root@node1 ~]# sysctl -p /etc/sysctl.d/kubernetes.conf


              移除依赖

              PS:每台服务器上都要进行操作。
                [root@node1 ~]# yum remove -y docker*
                [root@node1 ~]# rm -f /etc/docker/daemon.json


                配置免密

                略过,不熟悉的同学看上一篇文章的该步骤,仅仅只看这一个“配置免密”步骤即可。


                往期推荐

                k8s系列-08-kubespray的安装配置



                下载软件包

                这里需要下载两个软件包,一个是2.18版本的kubespary,另一个是前文提到的libseccomp包,kubespary软件包从公众号“运维家”后台回复“kubespary2.18”,即可获取下载地址
                libseccomp软件包从公众号“运维家”后台回复“libseccomp”,如何安装请查看往期文章如下的“前置安装”那一小节,有具体信息。


                往期推荐

                k8s系列-06-containerd的基本操作


                安装准备
                上传从上一步骤中获取到的2.18版本的kubespary安装包,至node1节点上。
                  [root@node-1 ~]# yum install -y epel-release python36 python36-pip git
                  [root@node-1 ~]# tar xf kubespray-2.18.0.tar.gz
                  [root@node-1 ~]# cd kubespray-2.18.0/
                  [root@node1 kubespray-2.18.0]# pip3.6 install setuptools_rust
                  [root@node1 kubespray-2.18.0]# pip3.6 install --upgrade pip
                  [root@node1 kubespray-2.18.0]# cat requirements.txt
                  ansible==3.4.0
                  ansible-base==2.10.15
                  cryptography==2.8
                  jinja2==2.11.3
                  netaddr==0.7.19
                  pbr==5.4.4
                  jmespath==0.9.5
                  ruamel.yaml==0.16.10
                  ruamel.yaml.clib==0.2.4
                  MarkupSafe==1.1.1
                  [root@node1 kubespray-2.18.0]# pip3.6 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
                  [root@node1 kubespray-2.18.0]# ln -s usr/bin/python3.6 usr/local/python3/bin/python3


                  生成配置

                  PS:只需要在node1节点操作。
                    [root@node1 kubespray-2.18.0]# cp -rpf inventory/sample inventory/mycluster
                    [root@node1 kubespray-2.18.0]# declare -a IPS=(192.168.112.130 192.168.112.131 192.168.112.132)
                    [root@node1 kubespray-2.18.0]# CONFIG_FILE=inventory/mycluster/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]}


                    修改代理地址

                    PS:只需要在node1节点操作。
                      [root@node1 kubespray-2.18.0]# vim inventory/mycluster/group_vars/all/all.yml 
                      # 原本是注释的,需要取消注释,并配置自己的代理地址
                      http_proxy: "http://192.168.112.119:19000"
                      https_proxy: "http://192.168.112.119:19000"
                      [root@node1 kubespray-2.18.0]#


                      集群调整

                      PS:只需要在node1节点操作。
                      有时候k8s默认提供的IP地址池,和我们现有环境冲突,这个时候就需要我们手动进行更改了:
                        [root@node1 kubespray-2.18.0]# vim inventory/mycluster/group_vars/k8s_cluster/k8s-cluster.yml 
                        kube_service_addresses: 10.200.0.0/16
                        kube_pods_subnet: 10.233.0.0/16
                        [root@node1 kubespray-2.18.0]#


                        添加界面和ingress

                        PS:只需要在node1节点操作。
                          [root@node1 kubespray-2.18.0]# vim inventory/mycluster/group_vars/k8s_cluster/addons.yml 
                          dashboard_enabled: true
                          ingress_nginx_enabled: true
                          [root@node1 kubespray-2.18.0]#


                          修改超时时间

                          PS:只需要在node1节点操作。

                          由于我们走的是代理的方式,可能会比较慢,这个时候我们就修改下默认的超时时间,否则会报错:

                            [root@node1 kubespray-2.18.0]# ansible --version
                            ansible 2.10.15
                            config file = root/jier/kubespray-2.18.0/ansible.cfg
                            configured module search path = ['/root/jier/kubespray-2.18.0/library']
                            ansible python module location = usr/local/lib/python3.6/site-packages/ansible
                            executable location = usr/local/bin/ansible
                            python version = 3.6.8 (default, Nov 16 2020, 16:55:22) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]
                            [root@node1 kubespray-2.18.0]#
                            # 从上面可以获取到目录,而后找到配置文件
                            [root@node1 kubespray-2.18.0]# vim /usr/local/lib/python3.6/site-packages/ansible/config/base.yml  
                            # 找到参数 Gather facts timeout 和 Connection timeout,时间改为60
                            DEFAULT_TIMEOUT:
                            name: Connection timeout
                              default60


                            DEFAULT_GATHER_TIMEOUT:
                            name: Gather facts timeout
                            default: 60
                            [root@node1 kubespray-2.18.0]#


                            直接安装

                              [root@node1 kubespray-2.18.0]# ansible-playbook -i inventory/mycluster/hosts.yaml  --become --become-user=root cluster.yml -vvvv
                              PS:此步骤非常慢,我在这里停留了一个小时左右,具体取决于你的网速和服务器性能,中途可能会遇到报错,虽然本文的书写前提已经提前解决了我部署过程中遇到的各种问题,但是免不了你会遇到其他问题,遇到问题的时候先尝试自己解决,如果解决不了的,大可以后台给我留言,咱们一起排查。


                              安装完成的结果

                              一定要看下有没有报错哈,有时候比较有迷惑性,如果不会的话可以按照下面简单的验证方法验证下,



                              简单验证

                              node1节点:
                                [root@node1 ~]# crictl ps
                                CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID
                                a10b0cf798fbb 935d8fdc2d521 4 hours ago Running kube-scheduler 2 fc943ad8f7dcb
                                da4b3d99e168a 059e6cd8cf78e 4 hours ago Running kube-apiserver 1 6bbf6ff712afb
                                c00dcd8164b7e 1e7da779960fc 4 hours ago Running autoscaler 0 168c46aea2adb
                                71679721e6633 a9f76bcccfb5f 4 hours ago Running ingress-nginx-controller 0 9c247cf93113b
                                81c0dd9fd30d7 6570786a0fd3b 5 hours ago Running calico-node 0 a2ce1e05bebf6
                                d9c3382a11f57 8f8fdd6672d48 5 hours ago Running kube-proxy 0 cf9793f097edb
                                8131a023a6b9f 04185bc88e08d 5 hours ago Running kube-controller-manager 1 34eb68fbc2f2b
                                [root@node1 ~]#


                                node2节点:
                                  [root@node2 ~]# crictl ps
                                  CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID
                                  4eb4a1ab21752 059e6cd8cf78e 4 hours ago Running kube-apiserver 1 46bc29ffcd9ab
                                  6bb9658b6c8c6 296a6d5035e2d 4 hours ago Running coredns 0 254ee90fb6b87
                                  55b825a4e2955 a9f76bcccfb5f 4 hours ago Running ingress-nginx-controller 0 b274e82253e81
                                  72ce012725a80 6570786a0fd3b 5 hours ago Running calico-node 0 57256d2b63a4e
                                  b99e6936381fb 8f8fdd6672d48 5 hours ago Running kube-proxy 0 d7c121be4ed57
                                  4ea53f055a757 935d8fdc2d521 5 hours ago Running kube-scheduler 1 dff35ce18f014
                                  112ec9508d319 04185bc88e08d 5 hours ago Running kube-controller-manager 1 71248f9ee9c0a
                                  [root@node2 ~]#


                                  node3节点:
                                    [root@node3 /]# crictl ps
                                    CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID
                                    1cd64eebf3a9c 7801cfc6d5c07 4 hours ago Running kubernetes-metrics-scraper 0 543ad0366baec
                                    67aa11de6a26f 72f07539ffb58 4 hours ago Running kubernetes-dashboard 0 9c0a3829ef2f0
                                    a4219a0ffc10f 296a6d5035e2d 4 hours ago Running coredns 0 4340e98cdc3eb
                                    a441b90d709a2 5bae806f8f123 4 hours ago Running node-cache 0 6102acdf1c106
                                    2a66eec86647f a9f76bcccfb5f 4 hours ago Running ingress-nginx-controller 0 2d06e947bf21c
                                    022956555da76 fcd3512f2a7c5 5 hours ago Running calico-kube-controllers 1 97bfcf5ef728b
                                    42670699ef531 6570786a0fd3b 5 hours ago Running calico-node 0 751efe17dbea9
                                    e677dd716e584 8f8fdd6672d48 5 hours ago Running kube-proxy 0 92ba8a9f29f3b
                                    f6dec83dce9dc f6987c8d6ed59 5 hours ago Running nginx-proxy 0 12bf27ff79872
                                    [root@node3 /]#


                                    至此,本文结束,后面我们会针对该集群做冒烟测试,以及如何界面访问。


                                    往期推荐

                                    k8s系列-08-kubespray的安装配置

                                    k8s系列-07-kubespray方案基础环境准备

                                    k8s系列-06-containerd的基本操作


                                     

                                    添加关注,带你高效运维


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

                                    评论