zoukankan      html  css  js  c++  java
  • Kubernetes——centos8.0 使用二进制部署 k8sv1.18.20+etcdv3.3.10+flannelv0.10.0 高可用集群

    centos8.0 使用二进制部署 k8s-v1.18.20+etcd-v3.3.10+flannel-v0.10.0 高可用集群

    一、资源规划:

    主机名 IP地址 配置 角色 系统版本
    k8s-master01 10.100.12.168 2C2G master/Work/etcd centos8.0
    k8s-master02 10.100.12.200 2C2G master/Work/etcd centos8.0
    k8s-master-lb 10.100.12.103 - k8s-master-lb centos8.0
    k8s-node01 10.100.15.246 2C4G Work/etcd centos8.0
    k8s-node02 10.100.10.195 2C4G Work centos8.0

    二、环境初始化:

    所有主机都要做初始化操作

    2.1 停止所有主机 firewalld 防火墙 :

    systemctl disable --now firewalld
    systemctl disable --now dnsmasq
    systemctl disable --now NetworkManager
    systemctl disable --now iptables

    2.2 关闭 swap :

    swapoff -a 
    sed -i 's/.*swap.*/#&/' /etc/fstab

    2.3 关闭 selinux :

    setenforce  0
    sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/sysconfig/selinux

    2.4 根据规划,设置 hostname :

    hostnamectl set-hostname <hostname>

    2.5 添加本地hosts解析 :

    cat >> /etc/hosts << EOF
    10.100.12.168 k8s-master01
    10.100.10.200 k8s-master02
    10.100.10.103 k8s-master-lb
    10.100.15.246 k8s-node01
    10.100.10.195 k8s-node02
    EOF

    2.6 将桥接的 ipv4 流量传递到 iptables 的链 :

    cat > /etc/sysctl.d/k8s.conf << EOF
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    EOF
    
    sysctl --system  # 生效

    2.7 时间同步 :

    yum install chrony -y
    systemctl restart chronyd.service
    systemctl enable --now chronyd.service
    chronyc -a makestep

    2.8 查看当前系统版本 :

    cat /etc/redhat-release 
    CentOS Linux release 8.0.1905 (Core) 

    2.9 查看当前系统内核版本 :

    uname -r
    4.18.0-80.el8.x86_64

    2.10 使用 elrepo 仓库 :

      这里使用ELRepo仓库,ELRepo 仓库是基于社区的用于企业级 Linux 仓库,提供对 RedHat Enterprise(RHEL)和其他基于 RHEL的 Linux 发行版(CentOS、Scientific、Fedora 等)的支持。ELRepo 聚焦于和硬件相关的软件包,包括文件系统驱动、显卡驱动、网络驱动、声卡驱动和摄像头驱动等。网址:http://elrepo.org/tiki/tiki-index.php :

      2.10.1 导入 elrepo 仓库的公共密钥:

    rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

      2.10.2 安装 elrepo 仓库的 yum 源:

    yum install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm -y

    2.11 查看当前可用的系统内核安装包

    [root@k8s-master01 ~]# yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
    ELRepo.org Community Enterprise Linux Kernel Repository - el8                                          130 kB/s | 2.0 MB     00:15    
    Last metadata expiration check: 0:00:11 ago on Tue 16 Nov 2021 06:57:29 PM CST.
    Available Packages
    bpftool.x86_64                                                     5.15.2-1.el8.elrepo                                    elrepo-kernel
    kernel-lt.x86_64                                                   5.4.159-1.el8.elrepo                                   elrepo-kernel
    kernel-lt-core.x86_64                                              5.4.159-1.el8.elrepo                                   elrepo-kernel
    kernel-lt-devel.x86_64                                             5.4.159-1.el8.elrepo                                   elrepo-kernel
    kernel-lt-doc.noarch                                               5.4.159-1.el8.elrepo                                   elrepo-kernel
    kernel-lt-headers.x86_64                                           5.4.159-1.el8.elrepo                                   elrepo-kernel
    kernel-lt-modules.x86_64                                           5.4.159-1.el8.elrepo                                   elrepo-kernel
    kernel-lt-modules-extra.x86_64                                     5.4.159-1.el8.elrepo                                   elrepo-kernel
    kernel-lt-tools.x86_64                                             5.4.159-1.el8.elrepo                                   elrepo-kernel
    kernel-lt-tools-libs.x86_64                                        5.4.159-1.el8.elrepo                                   elrepo-kernel
    kernel-lt-tools-libs-devel.x86_64                                  5.4.159-1.el8.elrepo                                   elrepo-kernel
    kernel-ml.x86_64                                                   5.15.2-1.el8.elrepo                                    elrepo-kernel
    kernel-ml-core.x86_64                                              5.15.2-1.el8.elrepo                                    elrepo-kernel
    kernel-ml-devel.x86_64                                             5.15.2-1.el8.elrepo                                    elrepo-kernel
    kernel-ml-doc.noarch                                               5.15.2-1.el8.elrepo                                    elrepo-kernel
    kernel-ml-headers.x86_64                                           5.15.2-1.el8.elrepo                                    elrepo-kernel
    kernel-ml-modules.x86_64                                           5.15.2-1.el8.elrepo                                    elrepo-kernel
    kernel-ml-modules-extra.x86_64                                     5.15.2-1.el8.elrepo                                    elrepo-kernel
    kernel-ml-tools.x86_64                                             5.15.2-1.el8.elrepo                                    elrepo-kernel
    kernel-ml-tools-libs.x86_64                                        5.15.2-1.el8.elrepo                                    elrepo-kernel
    kernel-ml-tools-libs-devel.x86_64                                  5.15.2-1.el8.elrepo                                    elrepo-kernel
    perf.x86_64                                                        5.15.2-1.el8.elrepo                                    elrepo-kernel
    python3-perf.x86_64                                                5.15.2-1.el8.elrepo                                    elrepo-kernel
    [root@k8s-master01 ~]# 

    2.12 安装最新版内核 :

    yum --enablerepo=elrepo-kernel install kernel-ml -y

    2.13 设置以新的内核启动:

      0 表示最新安装的内核,设置为 0 表示以新版本内核启动:

    grub2-set-default 0

    2.14 生成 grub 配置文件并重启系统 :

    grub2-mkconfig -o /boot/grub2/grub.cfg
    reboot
    遇到报错:
    [root@k8s-master01 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
    Generating grub configuration file ...
    /usr/bin/grub2-editenv: error: environment block too small.
    -------
    解决办法
    [root@k8s-master01 ~]# mv /boot/grub2/grubenv /home/bak
    [root@k8s-master01 ~]# grub2-editenv /boot/grub2/grubenv create
    [root@k8s-master01 ~]# yum --enablerepo=elrepo-kernel install kernel-ml
    Last metadata expiration check: 0:06:48 ago on Tue 16 Nov 2021 06:58:49 PM CST.
    Package kernel-ml-5.15.2-1.el8.elrepo.x86_64 is already installed.
    Dependencies resolved.
    Nothing to do.
    Complete!
    [root@k8s-master01 ~]# grub2-set-default 0
    [root@k8s-master01 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
    Generating grub configuration file ...
    done
    [root@k8s-master01 ~]# 

    2.15 验证新内核:

    旧内核版本: 4.18.0-80.el8.x86_64
    新内核版本: 5.15.2-1.el8.elrepo.x86_64

    2.16 查看系统中已安装的内核:

    [root@k8s-master01 ~]# rpm -qa | grep kernel
    kernel-ml-modules-5.15.2-1.el8.elrepo.x86_64
    kernel-core-4.18.0-80.el8.x86_64
    kernel-modules-4.18.0-80.el8.x86_64
    kernel-tools-libs-4.18.0-80.el8.x86_64
    kernel-4.18.0-80.el8.x86_64
    kernel-ml-core-5.15.2-1.el8.elrepo.x86_64
    kernel-ml-5.15.2-1.el8.elrepo.x86_64
    kernel-tools-4.18.0-80.el8.x86_64
    [root@k8s-master01 ~]# 

    2.17 删除旧内核

    [root@k8s-master01 ~]# yum remove -y kernel-core-4.18.0 kernel-devel-4.18.0 kernel-tools-libs-4.18.0 kernel-headers-4.18.0
    No match for argument: kernel-devel-4.18.0
    No match for argument: kernel-headers-4.18.0
    Dependencies resolved.
    =======================================================================================================================================
     Package                              Arch                      Version                             Repository                    Size
    =======================================================================================================================================
    Removing:
     kernel-core                          x86_64                    4.18.0-80.el8                       @anaconda                     57 M
     kernel-tools-libs                    x86_64                    4.18.0-80.el8                       @anaconda                     24 k
    Removing dependent packages:
     kernel                               x86_64                    4.18.0-80.el8                       @anaconda                      0  
     kernel-tools                         x86_64                    4.18.0-80.el8                       @anaconda                    509 k
    Removing unused dependencies:
     kernel-modules                       x86_64                    4.18.0-80.el8                       @anaconda                     19 M
    
    Transaction Summary
    =======================================================================================================================================
    Remove  5 Packages
    
    Freed space: 77 M
    Running transaction check
    Transaction check succeeded.
    Running transaction test
    Transaction test succeeded.
    Running transaction
      Preparing        :                                                                                                               1/1 
      Running scriptlet: kernel-4.18.0-80.el8.x86_64                                                                                   1/1 
      Erasing          : kernel-4.18.0-80.el8.x86_64                                                                                   1/5 
      Running scriptlet: kernel-4.18.0-80.el8.x86_64                                                                                   1/5 
      Erasing          : kernel-tools-4.18.0-80.el8.x86_64                                                                             2/5 
      Running scriptlet: kernel-tools-4.18.0-80.el8.x86_64                                                                             2/5 
      Erasing          : kernel-modules-4.18.0-80.el8.x86_64                                                                           3/5 
      Running scriptlet: kernel-modules-4.18.0-80.el8.x86_64                                                                           3/5 
      Running scriptlet: kernel-core-4.18.0-80.el8.x86_64                                                                              4/5 
      Erasing          : kernel-core-4.18.0-80.el8.x86_64                                                                              4/5 
      Running scriptlet: kernel-core-4.18.0-80.el8.x86_64                                                                              4/5 
      Erasing          : kernel-tools-libs-4.18.0-80.el8.x86_64                                                                        5/5 
      Running scriptlet: kernel-tools-libs-4.18.0-80.el8.x86_64                                                                        5/5 
      Verifying        : kernel-4.18.0-80.el8.x86_64                                                                                   1/5 
      Verifying        : kernel-core-4.18.0-80.el8.x86_64                                                                              2/5 
      Verifying        : kernel-modules-4.18.0-80.el8.x86_64                                                                           3/5 
      Verifying        : kernel-tools-4.18.0-80.el8.x86_64                                                                             4/5 
      Verifying        : kernel-tools-libs-4.18.0-80.el8.x86_64                                                                        5/5 
    
    Removed:
      kernel-core-4.18.0-80.el8.x86_64             kernel-tools-libs-4.18.0-80.el8.x86_64            kernel-4.18.0-80.el8.x86_64           
      kernel-tools-4.18.0-80.el8.x86_64            kernel-modules-4.18.0-80.el8.x86_64              
    
    Complete!
    yum remove -y kernel-core-4.18.0

    2.18 再查看系统中已安装的内核 

    [root@k8s-master01 ~]# rpm -qa | grep kernel
    kernel-ml-modules-5.15.2-1.el8.elrepo.x86_64
    kernel-ml-core-5.15.2-1.el8.elrepo.x86_64
    kernel-ml-5.15.2-1.el8.elrepo.x86_64

      也可以安装 yum-utils 工具,当系统安装的内核大于3个时,会自动删除旧的内核版本:

    [root@k8s-master01 ~]# yum install yum-utils -y
    Last metadata expiration check: 0:17:20 ago on Tue 16 Nov 2021 06:58:53 PM CST.
    Dependencies resolved.
    =======================================================================================================================================
     Package                                     Arch                    Version                             Repository               Size
    =======================================================================================================================================
    Installing:
     yum-utils                                   noarch                  4.0.18-4.el8                        BaseOS                   71 k
    Upgrading:
     dnf                                         noarch                  4.4.2-11.el8                        BaseOS                  539 k
     dnf-data                                    noarch                  4.4.2-11.el8                        BaseOS                  152 k
     dnf-plugins-core                            noarch                  4.0.18-4.el8                        BaseOS                   69 k
     elfutils-libelf                             x86_64                  0.182-3.el8                         BaseOS                  216 k
     elfutils-libs                               x86_64                  0.182-3.el8                         BaseOS                  293 k
     ima-evm-utils                               x86_64                  1.3.2-12.el8                        BaseOS                   64 k
     libdnf                                      x86_64                  0.55.0-7.el8                        BaseOS                  681 k
     librepo                                     x86_64                  1.12.0-3.el8                        BaseOS                   91 k
     libsolv                                     x86_64                  0.7.16-3.el8_4                      BaseOS                  363 k
     python3-dnf                                 noarch                  4.4.2-11.el8                        BaseOS                  541 k
     python3-dnf-plugins-core                    noarch                  4.0.18-4.el8                        BaseOS                  234 k
     python3-hawkey                              x86_64                  0.55.0-7.el8                        BaseOS                  114 k
     python3-libdnf                              x86_64                  0.55.0-7.el8                        BaseOS                  769 k
     python3-librepo                             x86_64                  1.12.0-3.el8                        BaseOS                   52 k
     python3-rpm                                 x86_64                  4.14.3-14.el8_4                     BaseOS                  158 k
     rpm                                         x86_64                  4.14.3-14.el8_4                     BaseOS                  542 k
     rpm-build-libs                              x86_64                  4.14.3-14.el8_4                     BaseOS                  155 k
     rpm-libs                                    x86_64                  4.14.3-14.el8_4                     BaseOS                  339 k
     rpm-plugin-selinux                          x86_64                  4.14.3-14.el8_4                     BaseOS                   76 k
     rpm-plugin-systemd-inhibit                  x86_64                  4.14.3-14.el8_4                     BaseOS                   77 k
     tpm2-tss                                    x86_64                  2.3.2-3.el8                         BaseOS                  275 k
     yum                                         noarch                  4.4.2-11.el8                        BaseOS                  198 k
    Installing dependencies:
     libmodulemd                                 x86_64                  2.9.4-2.el8                         BaseOS                  189 k
     libzstd                                     x86_64                  1.4.4-1.el8                         BaseOS                  266 k
    Installing weak dependencies:
     elfutils-debuginfod-client                  x86_64                  0.182-3.el8                         BaseOS                   65 k
    
    Transaction Summary
    =======================================================================================================================================
    Install   4 Packages
    Upgrade  22 Packages
    
    Total download size: 6.4 M
    Downloading Packages:
    (1/26): elfutils-debuginfod-client-0.182-3.el8.x86_64.rpm                                              8.9 MB/s |  65 kB     00:00    
    (2/26): libzstd-1.4.4-1.el8.x86_64.rpm                                                                  27 MB/s | 266 kB     00:00    
    (3/26): libmodulemd-2.9.4-2.el8.x86_64.rpm                                                              13 MB/s | 189 kB     00:00    
    (4/26): yum-utils-4.0.18-4.el8.noarch.rpm                                                              8.3 MB/s |  71 kB     00:00    
    (5/26): dnf-plugins-core-4.0.18-4.el8.noarch.rpm                                                       8.4 MB/s |  69 kB     00:00    
    (6/26): dnf-data-4.4.2-11.el8.noarch.rpm                                                                13 MB/s | 152 kB     00:00    
    (7/26): dnf-4.4.2-11.el8.noarch.rpm                                                                     25 MB/s | 539 kB     00:00    
    (8/26): elfutils-libelf-0.182-3.el8.x86_64.rpm                                                          20 MB/s | 216 kB     00:00    
    (9/26): ima-evm-utils-1.3.2-12.el8.x86_64.rpm                                                           14 MB/s |  64 kB     00:00    
    (10/26): elfutils-libs-0.182-3.el8.x86_64.rpm                                                           19 MB/s | 293 kB     00:00    
    (11/26): librepo-1.12.0-3.el8.x86_64.rpm                                                                12 MB/s |  91 kB     00:00    
    (12/26): python3-dnf-4.4.2-11.el8.noarch.rpm                                                            34 MB/s | 541 kB     00:00    
    (13/26): libsolv-0.7.16-3.el8_4.x86_64.rpm                                                              16 MB/s | 363 kB     00:00    
    (14/26): libdnf-0.55.0-7.el8.x86_64.rpm                                                                 20 MB/s | 681 kB     00:00    
    (15/26): python3-hawkey-0.55.0-7.el8.x86_64.rpm                                                         20 MB/s | 114 kB     00:00    
    (16/26): python3-dnf-plugins-core-4.0.18-4.el8.noarch.rpm                                               18 MB/s | 234 kB     00:00    
    (17/26): python3-librepo-1.12.0-3.el8.x86_64.rpm                                                        15 MB/s |  52 kB     00:00    
    (18/26): python3-rpm-4.14.3-14.el8_4.x86_64.rpm                                                         27 MB/s | 158 kB     00:00    
    (19/26): rpm-build-libs-4.14.3-14.el8_4.x86_64.rpm                                                      32 MB/s | 155 kB     00:00    
    (20/26): rpm-libs-4.14.3-14.el8_4.x86_64.rpm                                                            37 MB/s | 339 kB     00:00    
    (21/26): python3-libdnf-0.55.0-7.el8.x86_64.rpm                                                         27 MB/s | 769 kB     00:00    
    (22/26): rpm-plugin-selinux-4.14.3-14.el8_4.x86_64.rpm                                                  16 MB/s |  76 kB     00:00    
    (23/26): rpm-4.14.3-14.el8_4.x86_64.rpm                                                                 20 MB/s | 542 kB     00:00    
    (24/26): rpm-plugin-systemd-inhibit-4.14.3-14.el8_4.x86_64.rpm                                          14 MB/s |  77 kB     00:00    
    (25/26): tpm2-tss-2.3.2-3.el8.x86_64.rpm                                                                24 MB/s | 275 kB     00:00    
    (26/26): yum-4.4.2-11.el8.noarch.rpm                                                                    20 MB/s | 198 kB     00:00    
    ---------------------------------------------------------------------------------------------------------------------------------------
    Total                                                                                                   55 MB/s | 6.4 MB     00:00     
    Running transaction check
    Transaction check succeeded.
    Running transaction test
    Transaction test succeeded.
    Running transaction
      Preparing        :                                                                                                               1/1 
      Running scriptlet: elfutils-libelf-0.182-3.el8.x86_64                                                                            1/1 
      Upgrading        : elfutils-libelf-0.182-3.el8.x86_64                                                                           1/48 
      Installing       : libzstd-1.4.4-1.el8.x86_64                                                                                   2/48 
      Upgrading        : librepo-1.12.0-3.el8.x86_64                                                                                  3/48 
      Upgrading        : elfutils-libs-0.182-3.el8.x86_64                                                                             4/48 
      Installing       : elfutils-debuginfod-client-0.182-3.el8.x86_64                                                                5/48 
      Upgrading        : rpm-4.14.3-14.el8_4.x86_64                                                                                   6/48 
      Upgrading        : rpm-libs-4.14.3-14.el8_4.x86_64                                                                              7/48 
      Running scriptlet: rpm-libs-4.14.3-14.el8_4.x86_64                                                                              7/48 
      Installing       : libmodulemd-2.9.4-2.el8.x86_64                                                                               8/48 
      Upgrading        : libsolv-0.7.16-3.el8_4.x86_64                                                                                9/48 
      Upgrading        : libdnf-0.55.0-7.el8.x86_64                                                                                  10/48 
      Upgrading        : python3-libdnf-0.55.0-7.el8.x86_64                                                                          11/48 
      Upgrading        : python3-hawkey-0.55.0-7.el8.x86_64                                                                          12/48 
      Upgrading        : rpm-plugin-systemd-inhibit-4.14.3-14.el8_4.x86_64                                                           13/48 
      Running scriptlet: tpm2-tss-2.3.2-3.el8.x86_64                                                                                 14/48 
      Upgrading        : tpm2-tss-2.3.2-3.el8.x86_64                                                                                 14/48 
      Running scriptlet: tpm2-tss-2.3.2-3.el8.x86_64                                                                                 14/48 
      Upgrading        : ima-evm-utils-1.3.2-12.el8.x86_64                                                                           15/48 
      Upgrading        : rpm-build-libs-4.14.3-14.el8_4.x86_64                                                                       16/48 
      Running scriptlet: rpm-build-libs-4.14.3-14.el8_4.x86_64                                                                       16/48 
      Upgrading        : python3-rpm-4.14.3-14.el8_4.x86_64                                                                          17/48 
      Upgrading        : dnf-data-4.4.2-11.el8.noarch                                                                                18/48 
    warning: /etc/dnf/dnf.conf created as /etc/dnf/dnf.conf.rpmnew
    
      Upgrading        : python3-dnf-4.4.2-11.el8.noarch                                                                             19/48 
      Upgrading        : dnf-4.4.2-11.el8.noarch                                                                                     20/48 
      Running scriptlet: dnf-4.4.2-11.el8.noarch                                                                                     20/48 
      Upgrading        : python3-dnf-plugins-core-4.0.18-4.el8.noarch                                                                21/48 
      Upgrading        : dnf-plugins-core-4.0.18-4.el8.noarch                                                                        22/48 
      Installing       : yum-utils-4.0.18-4.el8.noarch                                                                               23/48 
      Upgrading        : yum-4.4.2-11.el8.noarch                                                                                     24/48 
      Upgrading        : rpm-plugin-selinux-4.14.3-14.el8_4.x86_64                                                                   25/48 
      Upgrading        : python3-librepo-1.12.0-3.el8.x86_64                                                                         26/48 
      Cleanup          : yum-4.0.9.2-5.el8.noarch                                                                                    27/48 
      Running scriptlet: dnf-4.0.9.2-5.el8.noarch                                                                                    28/48 
      Cleanup          : dnf-4.0.9.2-5.el8.noarch                                                                                    28/48 
      Running scriptlet: dnf-4.0.9.2-5.el8.noarch                                                                                    28/48 
      Cleanup          : dnf-plugins-core-4.0.2.2-3.el8.noarch                                                                       29/48 
      Cleanup          : rpm-plugin-selinux-4.14.2-9.el8.x86_64                                                                      30/48 
      Cleanup          : python3-dnf-plugins-core-4.0.2.2-3.el8.noarch                                                               31/48 
      Cleanup          : python3-dnf-4.0.9.2-5.el8.noarch                                                                            32/48 
      Cleanup          : python3-hawkey-0.22.5-4.el8.x86_64                                                                          33/48 
      Cleanup          : python3-rpm-4.14.2-9.el8.x86_64                                                                             34/48 
      Cleanup          : rpm-build-libs-4.14.2-9.el8.x86_64                                                                          35/48 
      Running scriptlet: rpm-build-libs-4.14.2-9.el8.x86_64                                                                          35/48 
      Cleanup          : elfutils-libs-0.174-6.el8.x86_64                                                                            36/48 
      Cleanup          : python3-libdnf-0.22.5-4.el8.x86_64                                                                          37/48 
      Cleanup          : libdnf-0.22.5-4.el8.x86_64                                                                                  38/48 
      Cleanup          : rpm-plugin-systemd-inhibit-4.14.2-9.el8.x86_64                                                              39/48 
      Cleanup          : libsolv-0.6.35-6.el8.x86_64                                                                                 40/48 
      Cleanup          : rpm-4.14.2-9.el8.x86_64                                                                                     41/48 
      Cleanup          : rpm-libs-4.14.2-9.el8.x86_64                                                                                42/48 
      Running scriptlet: rpm-libs-4.14.2-9.el8.x86_64                                                                                42/48 
      Cleanup          : python3-librepo-1.9.2-1.el8.x86_64                                                                          43/48 
      Cleanup          : dnf-data-4.0.9.2-5.el8.noarch                                                                               44/48 
      Cleanup          : librepo-1.9.2-1.el8.x86_64                                                                                  45/48 
      Cleanup          : elfutils-libelf-0.174-6.el8.x86_64                                                                          46/48 
      Cleanup          : ima-evm-utils-1.1-4.el8.x86_64                                                                              47/48 
      Cleanup          : tpm2-tss-2.0.0-4.el8.x86_64                                                                                 48/48 
      Running scriptlet: tpm2-tss-2.0.0-4.el8.x86_64                                                                                 48/48 
      Verifying        : elfutils-debuginfod-client-0.182-3.el8.x86_64                                                                1/48 
      Verifying        : libmodulemd-2.9.4-2.el8.x86_64                                                                               2/48 
      Verifying        : libzstd-1.4.4-1.el8.x86_64                                                                                   3/48 
      Verifying        : yum-utils-4.0.18-4.el8.noarch                                                                                4/48 
      Verifying        : dnf-4.4.2-11.el8.noarch                                                                                      5/48 
      Verifying        : dnf-4.0.9.2-5.el8.noarch                                                                                     6/48 
      Verifying        : dnf-data-4.4.2-11.el8.noarch                                                                                 7/48 
      Verifying        : dnf-data-4.0.9.2-5.el8.noarch                                                                                8/48 
      Verifying        : dnf-plugins-core-4.0.18-4.el8.noarch                                                                         9/48 
      Verifying        : dnf-plugins-core-4.0.2.2-3.el8.noarch                                                                       10/48 
      Verifying        : elfutils-libelf-0.182-3.el8.x86_64                                                                          11/48 
      Verifying        : elfutils-libelf-0.174-6.el8.x86_64                                                                          12/48 
      Verifying        : elfutils-libs-0.182-3.el8.x86_64                                                                            13/48 
      Verifying        : elfutils-libs-0.174-6.el8.x86_64                                                                            14/48 
      Verifying        : ima-evm-utils-1.3.2-12.el8.x86_64                                                                           15/48 
      Verifying        : ima-evm-utils-1.1-4.el8.x86_64                                                                              16/48 
      Verifying        : libdnf-0.55.0-7.el8.x86_64                                                                                  17/48 
      Verifying        : libdnf-0.22.5-4.el8.x86_64                                                                                  18/48 
      Verifying        : librepo-1.12.0-3.el8.x86_64                                                                                 19/48 
      Verifying        : librepo-1.9.2-1.el8.x86_64                                                                                  20/48 
      Verifying        : libsolv-0.7.16-3.el8_4.x86_64                                                                               21/48 
      Verifying        : libsolv-0.6.35-6.el8.x86_64                                                                                 22/48 
      Verifying        : python3-dnf-4.4.2-11.el8.noarch                                                                             23/48 
      Verifying        : python3-dnf-4.0.9.2-5.el8.noarch                                                                            24/48 
      Verifying        : python3-dnf-plugins-core-4.0.18-4.el8.noarch                                                                25/48 
      Verifying        : python3-dnf-plugins-core-4.0.2.2-3.el8.noarch                                                               26/48 
      Verifying        : python3-hawkey-0.55.0-7.el8.x86_64                                                                          27/48 
      Verifying        : python3-hawkey-0.22.5-4.el8.x86_64                                                                          28/48 
      Verifying        : python3-libdnf-0.55.0-7.el8.x86_64                                                                          29/48 
      Verifying        : python3-libdnf-0.22.5-4.el8.x86_64                                                                          30/48 
      Verifying        : python3-librepo-1.12.0-3.el8.x86_64                                                                         31/48 
      Verifying        : python3-librepo-1.9.2-1.el8.x86_64                                                                          32/48 
      Verifying        : python3-rpm-4.14.3-14.el8_4.x86_64                                                                          33/48 
      Verifying        : python3-rpm-4.14.2-9.el8.x86_64                                                                             34/48 
      Verifying        : rpm-4.14.3-14.el8_4.x86_64                                                                                  35/48 
      Verifying        : rpm-4.14.2-9.el8.x86_64                                                                                     36/48 
      Verifying        : rpm-build-libs-4.14.3-14.el8_4.x86_64                                                                       37/48 
      Verifying        : rpm-build-libs-4.14.2-9.el8.x86_64                                                                          38/48 
      Verifying        : rpm-libs-4.14.3-14.el8_4.x86_64                                                                             39/48 
      Verifying        : rpm-libs-4.14.2-9.el8.x86_64                                                                                40/48 
      Verifying        : rpm-plugin-selinux-4.14.3-14.el8_4.x86_64                                                                   41/48 
      Verifying        : rpm-plugin-selinux-4.14.2-9.el8.x86_64                                                                      42/48 
      Verifying        : rpm-plugin-systemd-inhibit-4.14.3-14.el8_4.x86_64                                                           43/48 
      Verifying        : rpm-plugin-systemd-inhibit-4.14.2-9.el8.x86_64                                                              44/48 
      Verifying        : tpm2-tss-2.3.2-3.el8.x86_64                                                                                 45/48 
      Verifying        : tpm2-tss-2.0.0-4.el8.x86_64                                                                                 46/48 
      Verifying        : yum-4.4.2-11.el8.noarch                                                                                     47/48 
      Verifying        : yum-4.0.9.2-5.el8.noarch                                                                                    48/48 
    
    Upgraded:
      dnf-4.4.2-11.el8.noarch                    dnf-data-4.4.2-11.el8.noarch                       dnf-plugins-core-4.0.18-4.el8.noarch 
      elfutils-libelf-0.182-3.el8.x86_64         elfutils-libs-0.182-3.el8.x86_64                   ima-evm-utils-1.3.2-12.el8.x86_64    
      libdnf-0.55.0-7.el8.x86_64                 librepo-1.12.0-3.el8.x86_64                        libsolv-0.7.16-3.el8_4.x86_64        
      python3-dnf-4.4.2-11.el8.noarch            python3-dnf-plugins-core-4.0.18-4.el8.noarch       python3-hawkey-0.55.0-7.el8.x86_64   
      python3-libdnf-0.55.0-7.el8.x86_64         python3-librepo-1.12.0-3.el8.x86_64                python3-rpm-4.14.3-14.el8_4.x86_64   
      rpm-4.14.3-14.el8_4.x86_64                 rpm-build-libs-4.14.3-14.el8_4.x86_64              rpm-libs-4.14.3-14.el8_4.x86_64      
      rpm-plugin-selinux-4.14.3-14.el8_4.x86_64  rpm-plugin-systemd-inhibit-4.14.3-14.el8_4.x86_64  tpm2-tss-2.3.2-3.el8.x86_64          
      yum-4.4.2-11.el8.noarch                   
    
    Installed:
      yum-utils-4.0.18-4.el8.noarch          elfutils-debuginfod-client-0.182-3.el8.x86_64          libmodulemd-2.9.4-2.el8.x86_64         
      libzstd-1.4.4-1.el8.x86_64            
    
    Complete!
    [root@k8s-master01 ~]# 
    yum install yum-utils -y

    2.19 设置ulimit参数

    echo "* soft nofile 655360" >> /etc/security/limits.conf
    echo "* hard nofile 655360" >> /etc/security/limits.conf
    echo "* soft nproc 655360" >> /etc/security/limits.conf
    echo "* hard nproc 655360" >> /etc/security/limits.conf
    echo "* soft memlock unlimited" >> /etc/security/limits.conf
    echo "* hard memlock unlimited" >> /etc/security/limits.conf
    echo "DefaultLimitNOFILE=1024000" >> /etc/systemd/system.conf
    echo "DefaultLimitNPROC=1024000" >> /etc/systemd/system.conf

    三、部署 etcd 集群:

      etcd 是一个分布式键值存储系统,Kubernetes 使用 etcd 进行数据存储,所以先准备一个 etcd 数据库,为解决 etcd 单点故障,应采用集群方式部署,这里使用 3 台组件集群,可容忍 1 台机器故障,当然,也可以用 5 台组建集群,可容忍 2 台机器故障。

    3.1、准备 cfssl 证书生成工具

      找任意一台主机操作,这里用 k8s-master01。

      cfssl是一个开源的证书管理工具,使用json文件生成证书,相比openssl更方便使用。

    wget https://github.com/cloudflare/cfssl/releases/download/v1.6.1/cfssl_1.6.1_linux_amd64
    wget https://github.com/cloudflare/cfssl/releases/download/v1.6.1/cfssljson_1.6.1_linux_amd64
    wget https://github.com/cloudflare/cfssl/releases/download/v1.6.1/cfssl-certinfo_1.6.1_linux_amd64
    chmod a+x cfssl*
    mv cfssl_1.6.1_linux_amd64 /usr/local/bin/cfssl
    mv cfssljson_1.6.1_linux_amd64 /usr/local/bin/cfssljson
    mv cfssl-certinfo_1.6.1_linux_amd64 /usr/local/bin/cfssl-certinfo

    3.2 生成 etcd 证书

        3.2.1 创建自签 CA 证书

       3.2.1.1 创建工作目录
    mkdir -pv /root/certs/{etcd,k8s}
      3.2.1.2 生成 CA 配置和证书模版文件
    cfssl print-defaults config > ca-config.json
    cfssl print-defaults csr > ca-csr.json
       3.2.1.3 创建 CA 配置文件

    配置证书生成策略,规定 CA 可以预发哪种类型的证书。

    修改 CA 配置文件 ca-config.json,证书有效期时间改为 10 年,默认是 1 年。

    cat >ca-config.json<<EOF
    {
        "signing": {
            "default": {
                "expiry": "87600h"
            },
            "profiles": {
                "kubernetes": {
                    "expiry": "87600h",
                    "usages": [
                        "signing",
                        "key encipherment",
                        "server auth",
                        "client auth"
                    ]
                }
            }
        }
    }
    EOF
       3.2.1.4 定义 etcd 自签名的根证书
    cat >ca-csr.json<<EOF
    {
        "CN": "etcd CA",
        "key": {
            "algo": "rsa",
            "size": 2048
      },
            
      "names": [
            {
                "C": "CN",
                "L": "Shanghai",
                "ST": "Shanghai"
            }
         ]
    }
    EOF
       3.2.1.5 生成证书

    生成 CA 所必需的文件 ca-key.pem(私钥)和 ca.pem(证书),还会生成 ca.csr(证书签名请求),用于交叉签名或重新签名。

    cfssl gencert -initca ca-csr.json | cfssljson -bare ca -

        3.2.2 使用自签 CA 签发 etcd https 证书

      3.2.2.1 创建证书申请文件

    添加 api 证书 文件配置模板,下面的文件的hosts字段的ip地址是为所有etcd集群内部通信的 IP,我们要 3 个 etcd 做集群

    cat >server-csr.json<< EOF
    {
        "CN": "etcd",
        "hosts": [
        "10.100.12.168",
        "10.100.10.200",
        "10.100.15.246"
        ],
        "key": {
            "algo": "rsa",
            "size": 2048
        },
        "names": [
          {
            "C": "CN",
            "L": "Shanghai",
            "ST": "Shanghai"
        }
      ]
    }
    EOF
      3.2.2.2 基于模板生成证书生成 etcd server 证书
    [root@k8s-master01 etcd]# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes server-csr.json | cfssljson -bare server
    2021/11/17 10:18:46 [INFO] generate received request
    2021/11/17 10:18:46 [INFO] received CSR
    2021/11/17 10:18:46 [INFO] generating key: rsa-2048
    2021/11/17 10:18:46 [INFO] encoded CSR
    2021/11/17 10:18:46 [INFO] signed certificate with serial number 595998877373980408433662712528622813743684914214
    [root@k8s-master01 etcd]# 

    3.3 部署 etcd

        3.3.1 下载 etcd 二进制包

    # 下载地址
    wget https://github.com/etcd-io/etcd/releases/download/v3.3.10/etcd-v3.3.10-linux-amd64.tar.gz
    
    # 安装部署
    tar -zxvf etcd-v3.3.10-linux-amd64.tar.gz
    mkdir -pv /usr/local/etcd/release/etcd-v3.3.10-linux-amd64/{bin,cfg,ssl,data}
    cp -rf etcd-v3.3.10-linux-amd64/etcd* /usr/local/etcd/release/bin/
    cp -rf /root/certs/etcd/ca*pem server*.pem /usr/local/etcd/current/ssl/
    cd /usr/local/etcd; ln -nsvf release/etcd-v3.3.10-linux-amd64 current

        3.3.2 添加 etcd 主配置文件

    注意修改 etcd ip 地址
    cat > /usr/local/etcd/current/cfg/etcd.conf << EOF
    #[Member]
    ETCD_NAME="etcd-1"
    ETCD_DATA_DIR="/usr/local/etcd/current/data/default.etcd"
    ETCD_LISTEN_PEER_URLS="https://10.100.12.168:2380"
    ETCD_LISTEN_CLIENT_URLS="https://10.100.12.168:2379"
     
    #[Clustering]
    ETCD_INITIAL_ADVERTISE_PEER_URLS="https://10.100.12.168:2380"
    ETCD_ADVERTISE_CLIENT_URLS="https://10.100.12.168:2379"
     
    ETCD_INITIAL_CLUSTER="etcd-1=https://10.100.12.168:2380,etcd-2=https://10.100.10.200:2380,etcd-3=https://10.100.15.246:2380"
    ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
    ETCD_INITIAL_CLUSTER_STATE="new"
    EOF
    参数说明:
    ETCD_NAME #节点名称,集群中唯一
    ETCD_DATA_DIR: #数据目录
    ETCD_LISTEN_PEER_URLS #集群通信监听地址
    ETCD_LISTEN_CLIENT_URLS #客户端访问监听地址
    ETCD_INITIAL_ADVERTISE_PEER_URLS#集群通告地址
    ETCD_ADVERTISE_CLIENT_URLS #客户端通告地址
    ETCD_INITIAL_CLUSTER #集群节点地址
    ETCD_INITIAL_CLUSTER_TOKEN #集群 Token
    ETCD_INITIAL_CLUSTER_STATE #加入集群的当前状态,new 是新集群,existing 表示加入已有集群
    

        3.3.3 etcd 配置 systemd 管理

    [Unit]
    Description=Etcd Server
    After=network.target
    After=network-online.target
    Wants=network-online.target
     
    [Service]
    Type=notify
    EnvironmentFile=/usr/local/etcd/current/cfg/etcd.conf
    ExecStart=/usr/local/etcd/current/bin/etcd \
    --name=${ETCD_NAME} \
    --data-dir=${ETCD_DATA_DIR} \
    --listen-peer-urls=${ETCD_LISTEN_PEER_URLS} \
    --listen-client-urls=${ETCD_LISTEN_CLIENT_URLS},http://127.0.0.1:2379 \
    --advertise-client-urls=${ETCD_ADVERTISE_CLIENT_URLS} \
    --initial-advertise-peer-urls=${ETCD_INITIAL_ADVERTISE_PEER_URLS} \
    --initial-cluster=${ETCD_INITIAL_CLUSTER} \
    --initial-cluster-token=${ETCD_INITIAL_CLUSTER_TOKEN} \
    --initial-cluster-state=${ETCD_INITIAL_CLUSTER_STATE} \
    --cert-file=/usr/local/etcd/current/ssl/server.pem \
    --key-file=/usr/local/etcd/current/ssl/server-key.pem \
    --peer-cert-file=/usr/local/etcd/current/ssl/server.pem \
    --peer-key-file=/usr/local/etcd/current/ssl/server-key.pem \
    --trusted-ca-file=/usr/local/etcd/current/ssl/ca.pem \
    --peer-trusted-ca-file=/usr/local/etcd/current/ssl/ca.pem
     
    Restart=on-failure
    LimitNOFILE=65536
     
    [Install]
    WantedBy=multi-user.target

        3.3.4 推送 etcd 到其他节点

    scp /usr/lib/systemd/system/etcd.service k8s-master02:/usr/lib/systemd/system/etcd.service
    scp /usr/lib/systemd/system/etcd.service k8s-node01:/usr/lib/systemd/system/etcd.service
    rsync -avzpP /usr/local/etcd k8s-master02:/usr/local/
    rsync -avzpP /usr/local/etcd k8s-node01:/usr/local/

        3.3.5 修改集群中其他 etcd 节点的配置文件

    sed -i '1,9s#10.100.12.168#10.100.10.200#' /usr/local/etcd/current/cfg/etcd.conf
    sed -i 's#ETCD_NAME="etcd-1"#ETCD_NAME="etcd-2"#g" /usr/local/etcd/current/cfg/etcd.conf
    sed -i '1,9s#10.100.12.168#10.100.15.246#' /usr/local/etcd/current/cfg/etcd.conf
    sed -i 's#ETCD_NAME="etcd-1"#ETCD_NAME="etcd-3"#g" /usr/local/etcd/current/cfg/etcd.conf

        3.3.6 启动 etcd 集群

    systemctl daemon-reload
    systemctl start etcd
    systemctl enable etcd
    systemctl status etcd 

        3.3.7 查看etcd集群状态

    ETCDCTL_API=3 \
    /usr/local/etcd/current/bin/etcdctl \
    --cacert=/usr/local/etcd/current/ssl/ca.pem \
    --cert=/usr/local/etcd/current/ssl/server.pem \
    --key=/usr/local/etcd/current/ssl/server-key.pem \
    --endpoints="https://10.100.12.168:2379,https://10.100.10.200:2379,https://10.100.15.246:2379" endpoint health

    四、部署 docker Engine:

    所有主机都要安装 docker engine,官方安装步骤文档: https://docs.docker.com/engine/install/centos

    4.1 操作系统版本要求

      To install Docker Engine, you need a maintained version of CentOS 7 or 8. Archived versions aren’t supported or tested.

    The centos-extras repository must be enabled. This repository is enabled by default, but if you have disabled it, you need to re-enable it.

    The overlay2 storage driver is recommended.

    4.2 卸载老版本的 docker 

    sudo yum remove docker \
                      docker-client \
                      docker-client-latest \
                      docker-common \
                      docker-latest \
                      docker-latest-logrotate \
                      docker-logrotate \
                      docker-engine

    4.3 配置 yum 源

     sudo yum install -y yum-utils
     sudo yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo

    4.4 yum 安装最新的 docker engine

    sudo yum install docker-ce docker-ce-cli containerd.io
    遇到报错:
    [root@k8s-master01 ~]# sudo yum install docker-ce docker-ce-cli containerd.io
    Docker CE Stable - x86_64                                                                               14 kB/s | 3.5 kB     00:00    
    Error: 
     Problem 1: problem with installed package podman-1.0.0-2.git921f98f.module_el8.0.0+58+91b614e7.x86_64
      - package podman-1.0.0-2.git921f98f.module_el8.0.0+58+91b614e7.x86_64 requires runc, but none of the providers can be installed
      - package podman-3.2.3-0.11.module_el8.4.0+942+d25aada8.x86_64 requires runc >= 1.0.0-57, but none of the providers can be installed
      - package podman-3.2.3-0.10.module_el8.4.0+886+c9a8d9ad.x86_64 requires runc >= 1.0.0-57, but none of the providers can be installed
      - package podman-3.0.1-7.module_el8.4.0+830+8027e1c4.x86_64 requires runc >= 1.0.0-57, but none of the providers can be installed
      - package podman-3.0.1-6.module_el8.4.0+781+acf4c33b.x86_64 requires runc >= 1.0.0-57, but none of the providers can be installed
      - package containerd.io-1.4.11-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-55.rc5.dev.git2abd837.module_el8.0.0+58+91b614e7.x86_64
      - package containerd.io-1.4.11-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-55.rc5.dev.git2abd837.module_el8.0.0+58+91b614e7.x86_64
      - package containerd.io-1.4.11-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64
      - package containerd.io-1.4.11-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64
      - package containerd.io-1.4.11-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64
      - package containerd.io-1.4.11-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64
      - package containerd.io-1.4.11-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-74.rc95.module_el8.4.0+886+c9a8d9ad.x86_64
      - package containerd.io-1.4.11-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-74.rc95.module_el8.4.0+886+c9a8d9ad.x86_64
      - cannot install the best candidate for the job
      - package runc-1.0.0-56.rc5.dev.git2abd837.module_el8.3.0+569+1bada2e4.x86_64 is filtered out by modular filtering
      - package runc-1.0.0-64.rc10.module_el8.4.0+522+66908d0c.x86_64 is filtered out by modular filtering
      - package runc-1.0.0-65.rc10.module_el8.4.0+819+4afbd1d6.x86_64 is filtered out by modular filtering
      - package runc-1.0.0-70.rc92.module_el8.4.0+786+4668b267.x86_64 is filtered out by modular filtering
      - package runc-1.0.0-71.rc92.module_el8.4.0+833+9763146c.x86_64 is filtered out by modular filtering
      - package runc-1.0.0-72.rc92.module_el8.4.0+964+56b6762f.x86_64 is filtered out by modular filtering
     Problem 2: package buildah-1.19.7-1.module_el8.4.0+781+acf4c33b.x86_64 requires runc >= 1.0.0-26, but none of the providers can be installed
      - package containerd.io-1.4.3-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64
      - package containerd.io-1.4.3-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64
      - package containerd.io-1.4.3-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64
      - package containerd.io-1.4.3-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64
      - package containerd.io-1.4.3-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-74.rc95.module_el8.4.0+886+c9a8d9ad.x86_64
      - package containerd.io-1.4.3-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-74.rc95.module_el8.4.0+886+c9a8d9ad.x86_64
      - package docker-ce-3:20.10.10-3.el8.x86_64 requires containerd.io >= 1.4.1, but none of the providers can be installed
      - package containerd.io-1.4.3-3.2.el8.x86_64 conflicts with runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64
      - package containerd.io-1.4.3-3.2.el8.x86_64 obsoletes runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64
      - package containerd.io-1.4.3-3.2.el8.x86_64 conflicts with runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64
      - package containerd.io-1.4.3-3.2.el8.x86_64 obsoletes runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64
      - package containerd.io-1.4.3-3.2.el8.x86_64 conflicts with runc provided by runc-1.0.0-74.rc95.module_el8.4.0+886+c9a8d9ad.x86_64
      - package containerd.io-1.4.3-3.2.el8.x86_64 obsoletes runc provided by runc-1.0.0-74.rc95.module_el8.4.0+886+c9a8d9ad.x86_64
      - problem with installed package buildah-1.5-3.gite94b4f9.module_el8.0.0+58+91b614e7.x86_64
      - package buildah-1.19.7-2.module_el8.4.0+830+8027e1c4.x86_64 requires runc >= 1.0.0-26, but none of the providers can be installed
      - package containerd.io-1.4.10-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-55.rc5.dev.git2abd837.module_el8.0.0+58+91b614e7.x86_64
      - package containerd.io-1.4.10-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-55.rc5.dev.git2abd837.module_el8.0.0+58+91b614e7.x86_64
      - package containerd.io-1.4.11-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-55.rc5.dev.git2abd837.module_el8.0.0+58+91b614e7.x86_64
      - package containerd.io-1.4.11-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-55.rc5.dev.git2abd837.module_el8.0.0+58+91b614e7.x86_64
      - package containerd.io-1.4.3-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-55.rc5.dev.git2abd837.module_el8.0.0+58+91b614e7.x86_64
      - package containerd.io-1.4.3-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-55.rc5.dev.git2abd837.module_el8.0.0+58+91b614e7.x86_64
      - package containerd.io-1.4.3-3.2.el8.x86_64 conflicts with runc provided by runc-1.0.0-55.rc5.dev.git2abd837.module_el8.0.0+58+91b614e7.x86_64
      - package containerd.io-1.4.3-3.2.el8.x86_64 obsoletes runc provided by runc-1.0.0-55.rc5.dev.git2abd837.module_el8.0.0+58+91b614e7.x86_64
      - package containerd.io-1.4.4-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-55.rc5.dev.git2abd837.module_el8.0.0+58+91b614e7.x86_64
      - package containerd.io-1.4.4-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-55.rc5.dev.git2abd837.module_el8.0.0+58+91b614e7.x86_64
      - package containerd.io-1.4.6-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-55.rc5.dev.git2abd837.module_el8.0.0+58+91b614e7.x86_64
      - package containerd.io-1.4.6-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-55.rc5.dev.git2abd837.module_el8.0.0+58+91b614e7.x86_64
      - package containerd.io-1.4.8-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-55.rc5.dev.git2abd837.module_el8.0.0+58+91b614e7.x86_64
      - package containerd.io-1.4.8-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-55.rc5.dev.git2abd837.module_el8.0.0+58+91b614e7.x86_64
      - package containerd.io-1.4.9-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-55.rc5.dev.git2abd837.module_el8.0.0+58+91b614e7.x86_64
      - package containerd.io-1.4.9-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-55.rc5.dev.git2abd837.module_el8.0.0+58+91b614e7.x86_64
      - cannot install the best candidate for the job
      - package runc-1.0.0-56.rc5.dev.git2abd837.module_el8.3.0+569+1bada2e4.x86_64 is filtered out by modular filtering
      - package runc-1.0.0-64.rc10.module_el8.4.0+522+66908d0c.x86_64 is filtered out by modular filtering
      - package runc-1.0.0-65.rc10.module_el8.4.0+819+4afbd1d6.x86_64 is filtered out by modular filtering
      - package runc-1.0.0-70.rc92.module_el8.4.0+786+4668b267.x86_64 is filtered out by modular filtering
      - package runc-1.0.0-71.rc92.module_el8.4.0+833+9763146c.x86_64 is filtered out by modular filtering
      - package runc-1.0.0-72.rc92.module_el8.4.0+964+56b6762f.x86_64 is filtered out by modular filtering
      - package containerd.io-1.4.4-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64
      - package containerd.io-1.4.4-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64
      - package containerd.io-1.4.4-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64
      - package containerd.io-1.4.4-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64
      - package containerd.io-1.4.4-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-74.rc95.module_el8.4.0+886+c9a8d9ad.x86_64
      - package containerd.io-1.4.4-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-74.rc95.module_el8.4.0+886+c9a8d9ad.x86_64
      - package containerd.io-1.4.6-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64
      - package containerd.io-1.4.6-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64
      - package containerd.io-1.4.6-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64
      - package containerd.io-1.4.6-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64
      - package containerd.io-1.4.6-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-74.rc95.module_el8.4.0+886+c9a8d9ad.x86_64
      - package containerd.io-1.4.6-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-74.rc95.module_el8.4.0+886+c9a8d9ad.x86_64
      - package containerd.io-1.4.8-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64
      - package containerd.io-1.4.8-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64
      - package containerd.io-1.4.8-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64
      - package containerd.io-1.4.8-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64
      - package containerd.io-1.4.8-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-74.rc95.module_el8.4.0+886+c9a8d9ad.x86_64
      - package containerd.io-1.4.8-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-74.rc95.module_el8.4.0+886+c9a8d9ad.x86_64
      - package containerd.io-1.4.9-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64
      - package containerd.io-1.4.9-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64
      - package containerd.io-1.4.9-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64
      - package containerd.io-1.4.9-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64
      - package containerd.io-1.4.9-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-74.rc95.module_el8.4.0+886+c9a8d9ad.x86_64
      - package containerd.io-1.4.9-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-74.rc95.module_el8.4.0+886+c9a8d9ad.x86_64
      - package containerd.io-1.4.10-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64
      - package containerd.io-1.4.10-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64
      - package containerd.io-1.4.10-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64
      - package containerd.io-1.4.10-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64
      - package containerd.io-1.4.10-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-74.rc95.module_el8.4.0+886+c9a8d9ad.x86_64
      - package containerd.io-1.4.10-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-74.rc95.module_el8.4.0+886+c9a8d9ad.x86_64
      - package containerd.io-1.4.11-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64
      - package containerd.io-1.4.11-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64
      - package containerd.io-1.4.11-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64
      - package containerd.io-1.4.11-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64
      - package containerd.io-1.4.11-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-74.rc95.module_el8.4.0+886+c9a8d9ad.x86_64
      - package containerd.io-1.4.11-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-74.rc95.module_el8.4.0+886+c9a8d9ad.x86_64
      - package buildah-1.21.4-1.module_el8.4.0+886+c9a8d9ad.x86_64 requires runc >= 1.0.0-26, but none of the providers can be installed
      - package buildah-1.21.4-2.module_el8.4.0+942+d25aada8.x86_64 requires runc >= 1.0.0-26, but none of the providers can be installed
      - package buildah-1.5-3.gite94b4f9.module_el8.0.0+58+91b614e7.x86_64 requires runc >= 1.0.0-26, but none of the providers can be installed
    (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)
    解决办法:
    [root@k8s
    -master01 ~]# sudo yum install --allowerasing docker-ce docker-ce-cli containerd.io

    4.5 yum 安装指定版本 docker engine

    [root@k8s-master01 ~]# yum list docker-ce --showduplicates | sort -r
    Last metadata expiration check: 0:07:10 ago on Wed 17 Nov 2021 11:46:17 AM CST.
    Installed Packages
    docker-ce.x86_64               3:20.10.9-3.el8                 docker-ce-stable 
    docker-ce.x86_64               3:20.10.8-3.el8                 docker-ce-stable 
    docker-ce.x86_64               3:20.10.7-3.el8                 docker-ce-stable 
    docker-ce.x86_64               3:20.10.6-3.el8                 docker-ce-stable 
    docker-ce.x86_64               3:20.10.5-3.el8                 docker-ce-stable 
    docker-ce.x86_64               3:20.10.4-3.el8                 docker-ce-stable 
    docker-ce.x86_64               3:20.10.3-3.el8                 docker-ce-stable 
    docker-ce.x86_64               3:20.10.2-3.el8                 docker-ce-stable 
    docker-ce.x86_64               3:20.10.1-3.el8                 docker-ce-stable 
    docker-ce.x86_64               3:20.10.10-3.el8                docker-ce-stable 
    docker-ce.x86_64               3:20.10.10-3.el8                @docker-ce-stable
    docker-ce.x86_64               3:20.10.0-3.el8                 docker-ce-stable 
    docker-ce.x86_64               3:19.03.15-3.el8                docker-ce-stable 
    docker-ce.x86_64               3:19.03.14-3.el8                docker-ce-stable 
    docker-ce.x86_64               3:19.03.13-3.el8                docker-ce-stable 
    Available Packages
    [root@k8s-master01 ~]# 

    4.6 添加阿里云 docker 镜像加速

    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://zp4fac78.mirror.aliyuncs.com"]
    }
    EOF
    sudo systemctl daemon-reload

    4.7 启动 docker engine

    systemctl start docker 
    systemctl enable docker 
    systemctl status docker

     五、创建 kubernetes  CA 证书

    5.1 自签证书颁发机构(CA)

    cd /root/certs/k8s

      5.1.1 添加证书配置 

    cat > ca-config.json<< EOF
    {
      "signing": {
        "default": {
          "expiry": "87600h"
         },
          "profiles": {
          "kubernetes": {
            "expiry": "87600h",
            "usages": [
              "signing",
              "key encipherment",
              "server auth",
              "client auth"
            ]
          }
        }
      }
    }
    EOF

      5.1.2 ca-k8s 根证书文件

    cat > ca-csr.json<< EOF
    {
        "CN": "kubernetes",
        "key": {
          "algo": "rsa",
          "size": 2048
      },    
      "names": [
          {
            "C": "CN",
            "L": "Shanghai",
            "ST": "Shanghai",
            "O": "k8s",
            "OU": "System"
           }
       ]    
    }
    EOF

      5.1.3 生成证书

    cfssl gencert -initca ca-csr.json | cfssljson -bare ca -

    5.2 使用自签 CA 签发 kube-apiserver https 证书

      5.2.1 创建证书申请文件

    cat > server-csr.json<< EOF
    {
        "CN": "kubernetes",
        "hosts": [
          "10.0.0.1",
          "127.0.0.1",
          "10.100.12.168",
          "10.100.10.200",
          "10.100.10.103",
          "10.100.15.246",
          "10.100.10.195",
          "kubernetes",
          "kubernetes.default",
          "kubernetes.default.svc",
          "kubernetes.default.svc.cluster",
          "kubernetes.default.svc.cluster.local"
    ],
    "key": {
      "algo": "rsa",
      "size": 2048
    },
    "names": [
        {
          "C": "CN",
          "L": "Shanghai",
          "ST": "Shanghai",
          "O": "k8s",
          "OU": "System"
        }
      ]
    }
    EOF

      5.2.2 生成 api-server 证书

    cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes server-csr.json | cfssljson -bare server

    六、部署 master 节点

    当前 master node 节点 IP:10.100.12.168/16,10.100.10.200/16

    下载地址:https://storage.googleapis.com/kubernetes-release/release/v1.18.20/kubernetes-server-linux-amd64.tar.gz

    需要安装的软件:

    • kube-apiserver
    • kube-controller-manager
    • kube-scheduler
    mkdir -pv /usr/local/kubernetes/release/{bin,cfg,ssl,logs}
    tar zxvf kubernetes-server-linux-amd64.tar.gz
    cd kubernetes/server/bin
    find ./ -perm /+x -type f|xargs cp -t /usr/local/kubernetes/current/bin
    cp -rf /root/certs/k8s/*.pem /usr/local/kubernetes/current/ssl/

     6.1 部署 kube-apiserver

      6.1.1 创建 kube-apiserver 配置文件 

    cat > /usr/local/kubernetes/current/cfg/kube-apiserver.conf << EOF
    KUBE_APISERVER_OPTS="--logtostderr=false \\
    --v=2 \\
    --log-dir=/usr/local/kubernetes/current/logs \\
    --etcd-servers=https://10.100.12.168:2379,https://10.100.10.200:2379,https://10.100.15.246:2379 \\
    --bind-address=0.0.0.0 \\
    --secure-port=6443 \\
    --advertise-address=10.100.10.103 \\
    --allow-privileged=true \\
    --service-cluster-ip-range=10.0.0.0/24 \\
    --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota,NodeRestriction \\
    --authorization-mode=RBAC,Node \\
    --enable-bootstrap-token-auth=true \\
    --token-auth-file=/usr/local/kubernetes/current/cfg/token.csv \\
    --service-node-port-range=30000-32767 \\
    --kubelet-client-certificate=/usr/local/kubernetes/current/ssl/server.pem \\
    --kubelet-client-key=/usr/local/kubernetes/current/ssl/server-key.pem \\
    --tls-cert-file=/usr/local/kubernetes/current/ssl/server.pem \\
    --tls-private-key-file=/usr/local/kubernetes/current/ssl/server-key.pem \\
    --client-ca-file=/usr/local/kubernetes/current/ssl/ca.pem \\
    --service-account-key-file=/usr/local/kubernetes/current/ssl/ca-key.pem \\
    --etcd-cafile=/usr/local/etcd/current/ssl/ca.pem \\
    --etcd-certfile=/usr/local/etcd/current/ssl/server.pem \\
    --etcd-keyfile=/usr/local/etcd/current/ssl/server-key.pem \\
    --audit-log-maxage=30 \\
    --audit-log-maxbackup=3 \\
    --audit-log-maxsize=100 \\
    --audit-log-path=/usr/local/kubernetes/current/logs/k8s-audit.log"
    EOF

    参数说明:

    --logtostderr:     #设置为false表示将日志写入文件,不写入stderr
    --v                 #日志等级
    --log-dir          #指定日志输出目录
    --etcd-servers       #etcd 集群地址
    --bind-address      #监听地址,当前地址
    --secure-port       #https 安全端口 (默认6443)
    --advertise-address   #集群通告地址
    --allow-privileged  #启用授权,运行docker使用特权模式
    --service-cluster-ip-range   #Service 虚拟 IP 地址段
    --enable-admission-plugins   #准入控制模块,各控制模块以插件的形式依次生效
    --authorization-mode   #认证授权,启用 RBAC 授权和节点自管理
    --enable-bootstrap-token-auth  #启用 TLS bootstrap 机制
          #启用以允许将 "kube-system" 名字空间中类型为 "bootstrap.kubernetes.io/token" 的 Secret 用于 TLS 引导身份验证。(官网解释)
          #这里开启这个机制的作用,如果后续有新的节点加入,会自动帮忙授权,只要加入到对应的组中
    --token-auth-file    #bootstrap token 文件
    --service-node-port-range   #Service nodeport 类型默认分配端口范围
    --kubelet-client-xxx   #apiserver 访问 kubelet 客户端证书
    --tls-xxx-file         #apiserver https 证书
    --etcd-xxxfile      #连接 Etcd 集群证书
    --audit-log-xxx     #审计日志

      6.1.2 创建 token 文件

    # 创建 TLS Bootstrapping Token
    cat > /usr/local/kubernetes/current/cfg/token.csv << EOF
    19c2834350a42f92912196a841ceecad,kubelet-bootstrap,10001,"system:nodebootstrapper"
    EOF
     
    #格式:token,用户名,UID,用户组
    #token 也可自行生成替换:
    #head -c 16 /dev/urandom | od -An -t x | tr -d ' '

      6.1.3  kube-apiserver 配置 systemd 管理

    [Unit]
    Description=Kubernetes API Server
    Documentation=https://github.com/kubernetes/kubernetes
    
    [Service]
    EnvironmentFile=/usr/local/kubernetes/current/cfg/kube-apiserver.conf
    ExecStart=/usr/local/kubernetes/current/bin/kube-apiserver $KUBE_APISERVER_OPTS
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target

      6.1.4 启动 kube-apiserver 服务

    systemctl daemon-reload
    systemctl start kube-apiserver
    systemctl enable kube-apiserver

      6.1.5 授权 kubelet-bootstrap 用户允许请求证书

      k8s 为了解决 kubelet 颁发证书的复杂性,所以引入了 bootstrap 机制,自动的为将要加入到集群的 node 颁发 kubelet 证书,所有链接 apiserver 的都需要证书。

      kubelet bootstrap 简单理解是 kubernetes apiserver 和 work node 之间建立通信的引导机制。api-server 配置参数中启用 Bootstrap Token Authentication(–enable-bootstrap-token-auth )会告诉 kubelet  一个特殊的 token,kubelet 根据此 token 通过 api server 的认证,kubelet 使用低权限的 bootstrap token 跟 api server 建立连接后,Bootstrap 使得kubelet 自动向 api server 申请自己的证书,并且使得api server 自动审批证书。

    创建kubelet-bootstrap角色绑定:

    kubectl create clusterrolebinding kubelet-bootstrap \
    --clusterrole=system:node-bootstrapper \
    --user=kubelet-bootstrap
    返回:
    clusterrolebinding.rbac.authorization.k8s.io/kubelet-bootstrap created

    6.2 部署 kube-controller-manager

        6.2.1. 创建配置文件

    cat > /usr/local/kubernetes/current/cfg/kube-controller-manager.conf << EOF
    KUBE_CONTROLLER_MANAGER_OPTS="--logtostderr=false \\
    --v=2 \\
    --log-dir=/usr/local/kubernetes/current/logs \\
    --leader-elect=true \\
    #--master=127.0.0.1:8080 \\
    --bind-address=127.0.0.1 \\
    --allocate-node-cidrs=true \\
    --cluster-cidr=10.244.0.0/16 \\
    --service-cluster-ip-range=10.0.0.0/24 \\
    --cluster-signing-cert-file=/usr/local/kubernetes/current/ssl/ca.pem \\
    --cluster-signing-key-file=/usr/local/kubernetes/current/ssl/ca-key.pem \\
    --root-ca-file=/usr/local/kubernetes/current/ssl/ca.pem \\
    --service-account-private-key-file=/usr/local/kubernetes/current/ssl/ca-key.pem \\
    --experimental-cluster-signing-duration=87600h0m0s"
    EOF

    参数说明

    –master #通过本地非安全本地端口 8080 连接 apiserver。
    –leader-elect #当该组件启动多个时,自动选举(HA)
    –cluster-signing-cert-file #ca证书文件
    –cluster-signing-key-file #ca证书私钥
    #自动为 kubelet 颁发证书的 CA,与 apiserver 保持一致
    

         6.2.2 生成kubeconfig文件

      生成kube-controller-manager证书:

    cat > kube-controller-manager-csr.json << EOF
    {
      "CN": "system:kube-controller-manager",
      "hosts": [
        "10.0.0.1",
        "127.0.0.1",
        "10.100.12.168",
        "10.100.10.200",
        "10.100.10.103",
        "10.100.15.246",
        "10.100.10.195",
        "kubernetes",
        "kubernetes.default",
        "kubernetes.default.svc",
        "kubernetes.default.svc.cluster",
        "kubernetes.default.svc.cluster.local"
      ],
      "key": {
        "algo": "rsa",
        "size": 2048
      },
      "names": [
        {
          "C": "CN",
          "L": "Shanghai", 
          "ST": "Shanghai",
          "O": "k8s",
          "OU": "System"
        }
      ]
    }
    EOF

      生成证书:

    cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-controller-manager-csr.json | cfssljson -bare kube-controller-manager

      生成kubeconfig文件:

    KUBE_CONFIG="/usr/local/kubernetes/current/cfg/kube-controller-manager.kubeconfig"
    KUBE_APISERVER="https://10.100.12.168:6443"
    
    kubectl config set-credentials kube-controller-manager \
    --client-certificate=./kube-controller-manager.pem \
    --client-key=./kube-controller-manager-key.pem \
    --embed-certs=true \
    --kubeconfig=${KUBE_CONFIG}
    
    kubectl config set-context default \
    --cluster=kubernetes\
    --user=kube-controller-manager\
    --kubeconfig=${KUBE_CONFIG}
    
    kubectl config use-context default --kubeconfig=${KUBE_CONFIG}

         6.2.3 kube-controller-manager 配置 systemd 管理

    cat > /usr/lib/systemd/system/kube-controller-manager.service << EOF
    [Unit]
    Description=Kubernetes Controller Manager
    Documentation=https://github.com/kubernetes/kubernetes
     
    [Service]
    EnvironmentFile=-/usr/local/kubernetes/current/cfg/kube-controller-manager.conf
    ExecStart=/usr/local/kubernetes/current/bin/kube-controller-manager \$KUBE_CONTROLLER_MANAGER_OPTS
    Restart=on-failure
     
    [Install]
    WantedBy=multi-user.target
    EOF

      6.2.4 启动 kube-controller-manager 服务 

    systemctl daemon-reload
    systemctl start  kube-controller-manager
    systemctl enable kube-controller-manager
    systemctl status kube-controller-manager

    6.3 部署 kube-scheduler

      6.3.1 添加配置文件

    cat > /usr/local/kubernetes/current/cfg/kube-scheduler.conf << EOF
    KUBE_SCHEDULER_OPTS="--logtostderr=false 
    --v=2 
    --log-dir=/usr/local/kubernetes/current/logs 
    --leader-elect 
    #--master=127.0.0.1:8080 
    --bind-address=127.0.0.1"
    EOF

    参数说明

    --master        #通过本地非安全本地端口 8080 连接 apiserver。
    --leader-elect  #当该组件启动多个时,自动选举(HA)
    

      6.3.2 生成证书

    cat > kube-scheduler-csr.json << EOF
    {
      "CN": "system:kube-scheduler",
      "hosts": [
        "10.0.0.1",
        "127.0.0.1",
        "10.100.12.168",
        "10.100.10.200",
        "10.100.10.103",
        "10.100.15.246",
        "10.100.10.195",
        "kubernetes",
        "kubernetes.default",
        "kubernetes.default.svc",
        "kubernetes.default.svc.cluster",
        "kubernetes.default.svc.cluster.local"
        ],
      "key": {
        "algo": "rsa",
        "size": 2048
      },
      "names": [
        {
          "C": "CN",
          "L": "Shanghai",
          "ST": "Shanghai",
          "O": "k8s",
          "OU": "System"
        }
      ]
    }
    EOF
    cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-scheduler-csr.json | cfssljson -bare kube-scheduler

      6.3.3 生成 kubeconfig 文件

    KUBE_CONFIG="/usr/local/kubernetes/current/cfg/kube-scheduler.kubeconfig"
    KUBE_APISERVER="https://10.100.12.168:6443"
    
    kubectl config set-cluster kubernetes \
      --certificate-authority=/usr/local/kubernetes/current/ssl/ca.pem \
      --embed-certs=true \
      --server=${KUBE_APISERVER} \
      --kubeconfig=${KUBE_CONFIG}
    kubectl config set-credentials kube-scheduler \
      --client-certificate=./kube-scheduler.pem \
      --client-key=./kube-scheduler-key.pem \
      --embed-certs=true \
      --kubeconfig=${KUBE_CONFIG}
    kubectl config set-context default \
      --cluster=kubernetes \
      --user=kube-scheduler \
      --kubeconfig=${KUBE_CONFIG}
    kubectl config use-context default --kubeconfig=${KUBE_CONFIG}

      6.3.4 kube-scheduler 配置 systemd 管理

    cat > /usr/lib/systemd/system/kube-scheduler.service << EOF
    [Unit]
    Description=Kubernetes Scheduler
    Documentation=https://github.com/kubernetes/kubernetes
    [Service]
    EnvironmentFile=/usr/local/kubernetes/current/cfg/kube-scheduler.conf
    ExecStart=/usr/local/kubernetes/current/bin/kube-scheduler \$KUBE_SCHEDULER_OPTS
    Restart=on-failure
    [Install]
    WantedBy=multi-user.target
    EOF

       6.3.5 启动 kube-scheduler 服务

    systemctl daemon-reload
    systemctl start kube-scheduler
    systemctl enable kube-scheduler
    systemctl status kube-scheduler

    至此master部署完成,集群状态查看:

    [root@k8s-master01 k8s]# kubectl get cs               
    NAME                 STATUS    MESSAGE             ERROR
    controller-manager   Healthy   ok                  
    scheduler            Healthy   ok                  
    etcd-2               Healthy   {"health":"true"}   
    etcd-0               Healthy   {"health":"true"}   
    etcd-1               Healthy   {"health":"true"} 

    七、部署 WorkNode 节点

    当前 work node 节点 IP:10.100.15.246/16,10.100.10.195/16

    下载地址:https://storage.googleapis.com/kubernetes-release/release/v1.18.20/kubernetes-server-linux-amd64.tar.gz

    需要安装的软件:

    • kubelet
    • kube-proxy

    7.1 部署 kubelet

      7.1.1 创建 kubelet 配置文件

    cat > /usr/local/kubernetes/current/cfg/kubelet.conf << EOF
    KUBELET_OPTS="--logtostderr=false \\
    --v=2 \\
    --log-dir=/usr/local/kubernetes/current/logs \\
    --hostname-override=k8s-master01 \\
    --network-plugin=cni \\
    --kubeconfig=/usr/local/kubernetes/current/cfg/kubelet.kubeconfig \\
    --bootstrap-kubeconfig=/usr/local/kubernetes/current/cfg/bootstrap.kubeconfig \\
    --config=/usr/local/kubernetes/current/cfg/kubelet.config \\
    --cert-dir=/usr/local/kubernetes/current/ssl \\
    --pod-infra-container-image=registry-wx.biggeryun.com/kubernetes/pause:3.5"
    EOF
    –hostname-override:显示名称,集群中唯一
    –network-plugin:启用CNI
    –kubeconfig:空路径,会自动生成,后面用于连接apiserver
    –bootstrap-kubeconfig:首次启动向apiserver申请证书
    –config:配置参数文件
    –cert-dir:kubelet证书生成目录
    –pod-infra-container-image:管理Pod网络容器的镜像
    

      7.1.2 创建参数配置文件

    cat > /usr/local/kubernetes/current/cfg/kubelet.config << EOF 
    kind: KubeletConfiguration
    apiVersion: kubelet.config.k8s.io/v1beta1
    address: 0.0.0.0
    port: 10250
    readOnlyPort: 10255
    cgroupDriver: cgroupfs
    clusterDNS:
    - 10.0.0.2
    clusterDomain: cluster.local
    failSwapOn: false
    authentication:
      anonymous:
        enabled: false
      webhook:
        cacheTTL: 2m0s
        enabled: true
      x509:
        clientCAFile: /usr/local/kubernetes/current/ssl/ca.pem
    authorization:
      mode: Webhook
      webhook:
        cacheAuthorizedTTL: 5m0s
        cacheUnauthorizedTTL: 30s
    evictionHard:
      imagefs.available: 15%
      memory.available: 100Mi
      nodefs.available: 10%
      nodefs.inodesFree: 5%
    maxOpenFiles: 1000000
    maxPods: 110
    EOF

      7.1.3 生成 bootstrap.kubeconfig 文件

    KUBE_APISERVER="https://10.100.12.168:6443" # apiserver IP:PORT 
    TOKEN="19c2834350a42f92912196a841ceecad" # 与/usr/local/kubernetes/current/cfg/token.csv里保持一致
    
    # 生成 kubelet bootstrap kubeconfig 配置文件
    # 设置集群参数
    kubectl config set-cluster kubernetes \
    --certificate-authority=/usr/local/kubernetes/current/ssl/ca.pem \
    --embed-certs=true \
    --server=${KUBE_APISERVER} \
    --kubeconfig=bootstrap.kubeconfig
    # 设置客户端认证参数
    kubectl config set-credentials "kubelet-bootstrap" \
    --token=${TOKEN} \
    --kubeconfig=bootstrap.kubeconfig
    # 设置上下文参数
    kubectl config set-context default \
    --cluster=kubernetes \
    --user="kubelet-bootstrap" \
    --kubeconfig=bootstrap.kubeconfig
    # 设置默认上下文    
    kubectl config use-context default \
    --kubeconfig=bootstrap.kubeconfig
    
    #拷贝生成的配置到cfg
    /bin/cp -rf bootstrap.kubeconfig /usr/local/kubernetes/current/cfg

      7.1.4 kubelet 配置 systemd 管理

        7.1.4.1 创建启动文件
    cat > /usr/lib/systemd/system/kubelet.service << EOF 
    [Unit]
    Description=Kubernetes Kubelet
    After=docker.service
    [Service]
    EnvironmentFile=/usr/local/kubernetes/current/cfg/kubelet.conf
    ExecStart=/usr/local/kubernetes/current/bin/kubelet $KUBELET_OPTS
    Restart=on-failure
    LimitNOFILE=65536
    [Install]
    WantedBy=multi-user.target
    EOF
        7.1.4.1 创建启动文件
    systemctl daemon-reload
    systemctl start kubelet
    systemctl enable kubelet

      7.1.5 批准 kubelet 证书申请并加入集群

        7.1.5.1 查看 kubelet 证书请求
    [root@k8s-master01 k8s]# kubectl get csr
    NAME                                                   AGE   SIGNERNAME                                    REQUESTOR           CONDITION
    node-csr-kH6v-kPprOgpJnvDg8tVke7TvBBKgAiGryxqlOvF8Pg   5s    kubernetes.io/kube-apiserver-client-kubelet   kubelet-bootstrap   Pending
    [root@k8s-master01 k8s]# 
        7.1.5.2 批准 kubelet 证书申请,并加入集群
    [root@k8s-master01 k8s]# kubectl certificate approve node-csr-kH6v-kPprOgpJnvDg8tVke7TvBBKgAiGryxqlOvF8Pg
    certificatesigningrequest.certificates.k8s.io/node-csr-kH6v-kPprOgpJnvDg8tVke7TvBBKgAiGryxqlOvF8Pg approved
    [root@k8s-master01 k8s]# 
        7.1.5.3 查看节点
    [root@k8s-master01 k8s]# kubectl get nodes
    NAME           STATUS     ROLES    AGE   VERSION
    k8s-master01   NotReady   <none>   31s   v1.18.20
    [root@k8s-master01 k8s]# 

      注意:由于网络插件还没有部署,节点的 STATUS: NotReady 是正常的。

    7.2 部署 kube-proxy

      7.2.1 创建配置文件

    cat > /usr/local/kubernetes/current/cfg/kube-proxy.conf << EOF 
    KUBE_PROXY_OPTS="--logtostderr=false \\
    --v=2 \\
    --log-dir=/usr/local/kubernetes/current/logs \\
    --config=/usr/local/kubernetes/current/cfg/kube-proxy.config"
    EOF

      7.2.2 配置参数文件

    cat > /usr/local/kubernetes/current/cfg/kube-proxy.config << EOF
    kind: KubeProxyConfiguration
    apiVersion: kubeproxy.config.k8s.io/v1alpha1
    bindAddress: 0.0.0.0
    metricsBindAddress: 0.0.0.0:10249
    clientConnection:
      kubeconfig: /usr/local/kubernetes/current/cfg/kube-proxy.kubeconfig
    hostnameOverride: ${HOSTNAME}
    clusterCIDR: 10.0.0.0/24
    mode: ipvs
    ipvs:
      scheduler: "r"
    EOF

      7.2.3 生成 kube-proxy.kubeconfig 文件

        7.2.3.1 证书签发
    cat > kube-proxy-csr.json << EOF
    {
        "CN":"system:kube-proxy",
        "hosts": [
          "10.0.0.1",
          "127.0.0.1",
          "10.100.12.168",
          "10.100.10.200",
          "10.100.10.103",
          "10.100.15.246",
          "10.100.10.195",
          "kubernetes",
          "kubernetes.default",
          "kubernetes.default.svc",
          "kubernetes.default.svc.cluster",
          "kubernetes.default.svc.cluster.local"
        ],
        "key":{
            "algo":"rsa",
            "size":2048
        },
        "names":[
            {
                "C":"CN",
                "L":"Shanghai",
                "ST":"Shanghai",
                "O":"k8s",
                "OU":"System"
            }
        ]
    }
    EOF
        7.2.3.2 生成证书
    cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy
        7.2.3.3 生成 kubeconfig 配置文件
    KUBE_APISERVER="https://10.100.12.168:6443"
    
    kubectl config set-cluster kubernetes \
    --certificate-authority=/usr/local/kubernetes/current/ssl/ca.pem \
    --embed-certs=true --server=${KUBE_APISERVER} \
    --kubeconfig=kube-proxy.kubeconfig
    
    kubectl config set-credentials kube-proxy \
    --client-certificate=./kube-proxy.pem \
    --client-key=./kube-proxy-key.pem \
    --embed-certs=true \
    --kubeconfig=kube-proxy.kubeconfig
    
    kubectl config set-context default \
    --cluster=kubernetes \
    --user=kube-proxy \
    --kubeconfig=kube-proxy.kubeconfig
    
    kubectl config use-context default \
    --kubeconfig=kube-proxy.kubeconfig
    
    # 拷贝配置到cfg下
    /bin/cp -rf kube-proxy.kubeconfig /usr/local/kubernetes/current/cfg/

      7.2.4 kube-proxy 配置 systemd 管理

        7.2.4.1 创建启动文件
    cat > /usr/lib/systemd/system/kube-proxy.service << EOF
    [Unit]
    Description=Kubernetes Proxy
    After=network.target
    [Service]
    EnvironmentFile=/usr/local/kubernetes/current/cfg/kube-proxy.conf
    ExecStart=/usr/local/kubernetes/current/bin/kube-proxy $KUBE_PROXY_OPTS
    Restart=on-failure
    LimitNOFILE=65536
    [Install]
    WantedBy=multi-user.target
    EOF
        7.2.4.2 设置开机启动
    systemctl daemon-reload
    systemctl start  kube-proxy
    systemctl enable kube-proxy
    systemctl status kube-proxy

     八、部署 CNI 网络(flannel)

      8.1 向 etcd 写入集群 pod 网段信息

    ETCDCTL_API=3 /usr/local/etcd/current/bin/etcdctl \
    --cacert=/usr/local/etcd/current/ssl/ca.pem \
    --cert=/usr/local/etcd/current/ssl/server.pem \
    --key=/usr/local/etcd/current/ssl/server-key.pem \
    --endpoints=https://10.100.12.168:2379,https://10.100.10.200:2379,https://10.100.15.246:2379 \
    put /coreos.com/network/config  '{ "Network": "10.244.0.0/16", "Backend": {"Type": "vxlan"}}'

     注意2个问题:

    • flanneld 版本不支持 etcd v3 的,可以使用 etcd v2 API 写入配置 key 和网段数据;
    • 写入的 Pod 网段 ${CLUSTER_CIDR} 必须是 /16 段地址,必须与 kube-controller-manager 的 –cluster-cidr 参数值一致;

      8.2 下载flannel安装包和解压缩

    wget https://github.com/flannel-io/flannel/releases/download/v0.10.0/flannel-v0.10.0-linux-amd64.tar.gz
    mkdir -pv  /usr/local/flannel/release/flannel-v0.10.0-linux-amd64/bin
    tar -zxvf  flannel-v0.10.0-linux-amd64.tar.gz -C  /usr/local/flannel/release/flannel-v0.10.0-linux-amd64/bin
    cd /usr/local/flannel; ln -snvf /usr/local/flannel/release/flannel-v0.10.0-linux-amd64/ current

      8.3 配置 flannel 配置文件

    cat flanneld.config 
    FLANNEL_OPTIONS="--etcd-endpoints=https://10.100.12.168:2379,https://10.100.10.200:2379,https://10.100.15.246:2379 \
    -etcd-cafile=/usr/local/etcd/current/ssl/ca.pem \
    -etcd-certfile=/usr/local/etcd/current/ssl/server.pem \
    -etcd-keyfile=/usr/local/etcd/current/ssl/server-key.pem \
    -etcd-prefix=/usr/local/kubernetes/current/cfg/network \
    -etcd-prefix=/coreos.com/network"

      8.4 flannel 配置 systemd 管理

    cat /usr/lib/systemd/system/flanneld.service 
    [Unit]
    Description=Flanneld overlay address etcd agent
    After=network-online.target network.target
    Before=docker.service
    
    [Service]
    Type=notify
    EnvironmentFile=/usr/local/kubernetes/current/cfg/flanneld.config
    ExecStart=/usr/local/flannel/current/bin/flanneld --ip-masq $FLANNEL_OPTIONS
    ExecStartPost=/usr/local/flannel/current/bin/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/subnet.env
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target
    • mk-docker-opts.sh 脚本将分配给 flanneld 的 Pod 子网网段信息写入 /run/flannel/docker 文件,后续 docker 启动时使用这个文件中的环境变量配置 docker0 网桥;
    • flanneld 使用系统缺省路由所在的接口与其它节点通信,对于有多个网络接口(如内网和公网)的节点,可以用 -iface 参数指定通信接口,如上面的 eth0 接口;
    • flanneld 运行时需要 root 权限;

      8.5 配置Docker启动指定子网段

    cat /usr/lib/systemd/system/flanneld.service 
    [Unit]
    Description=Flanneld overlay address etcd agent
    After=network-online.target network.target
    Before=docker.service
    
    [Service]
    Type=notify
    EnvironmentFile=/usr/local/kubernetes/current/cfg/flanneld.config
    ExecStart=/usr/local/flannel/current/bin/flanneld --ip-masq $FLANNEL_OPTIONS
    ExecStartPost=/usr/local/flannel/current/bin/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/subnet.env
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target
    [root@k8s-master01 cfg]# cat /usr/lib/systemd/system/docker.service 
    [Unit]
    Description=Docker Application Container Engine
    Documentation=https://docs.docker.com
    After=network-online.target firewalld.service containerd.service
    Wants=network-online.target
    Requires=docker.socket containerd.service
    
    [Service]
    Type=notify
    # the default is not to use systemd for cgroups because the delegate issues still
    # exists and systemd currently does not support the cgroup feature set required
    # for containers run by docker
    #EnvironmentFile=/run/flannel/subnet.env
    ExecStart=/usr/bin/dockerd $DOCKER_NETWORK_OPTIONS -H fd:// --containerd=/run/containerd/containerd.sock
    ExecReload=/bin/kill -s HUP $MAINPID
    TimeoutSec=0
    RestartSec=2
    Restart=always
    
    # Note that StartLimit* options were moved from "Service" to "Unit" in systemd 229.
    # Both the old, and new location are accepted by systemd 229 and up, so using the old location
    # to make them work for either version of systemd.
    StartLimitBurst=3
    
    # Note that StartLimitInterval was renamed to StartLimitIntervalSec in systemd 230.
    # Both the old, and new name are accepted by systemd 230 and up, so using the old name to make
    # this option work for either version of systemd.
    StartLimitInterval=60s
    
    # Having non-zero Limit*s causes performance problems due to accounting overhead
    # in the kernel. We recommend using cgroups to do container-local accounting.
    LimitNOFILE=infinity
    LimitNPROC=infinity
    LimitCORE=infinity
    
    # Comment TasksMax if your systemd version does not support it.
    # Only systemd 226 and above support this option.
    TasksMax=infinity
    
    # set delegate yes so that systemd does not reset the cgroups of docker containers
    Delegate=yes
    
    # kill only the docker process, not all processes in the cgroup
    KillMode=process
    OOMScoreAdjust=-500
    
    [Install]
    WantedBy=multi-user.target

      8.6 推送 flanneld 文件到其他节点

        8.6.1 推送 flanneld systemd unit 文件到其他节点

    rsync -avzpp /usr/lib/systemd/system/flanneld.service root@k8s-master02:/usr/lib/systemd/system/
    rsync -avzpp /usr/lib/systemd/system/flanneld.service root@k8s-node01:/usr/lib/systemd/system/
    rsync -avzpp /usr/lib/systemd/system/flanneld.service root@k8s-node02:/usr/lib/systemd/system/

        8.6.2 推送 docker systemd unit 文件到其他节点

    rsync -avzpp /usr/lib/systemd/system/docker.service root@k8s-master02:/usr/lib/systemd/system/
    rsync -avzpp /usr/lib/systemd/system/docker.service root@k8s-node01:/usr/lib/systemd/system/
    rsync -avzpp /usr/lib/systemd/system/docker.service root@k8s-node02:/usr/lib/systemd/system/

        8.6.3 推送 flanneld 配置文件到其他节点

    rsync -avzpP /usr/local/kubernetes/current/cfg/flanneld.config root@k8s-master02:/usr/local/kubernetes/current/cfg/
    rsync -avzpP /usr/local/kubernetes/current/cfg/flanneld.config root@k8s-node01:/usr/local/kubernetes/current/cfg/
    rsync -avzpP /usr/local/kubernetes/current/cfg/flanneld.config root@k8s-node02:/usr/local/kubernetes/current/cfg/

      8.7 启动 flanneld 服务

    systemctl daemon-reload
    systemctl start flanneld
    systemctl enable flanneld
    systemctl restart docker

      8.8 查看服务是否生效

    [root@k8s-master01 ~]# ip addr
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
        link/ether 52:54:00:18:93:04 brd ff:ff:ff:ff:ff:ff
        inet 10.100.12.168/16 brd 10.100.255.255 scope global noprefixroute eth0
           valid_lft forever preferred_lft forever
        inet6 fe80::5054:ff:fe18:9304/64 scope link 
           valid_lft forever preferred_lft forever
    3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
        link/ether 02:42:28:05:17:f7 brd ff:ff:ff:ff:ff:ff
        inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
           valid_lft forever preferred_lft forever
    4: kube-ipvs0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default 
        link/ether 12:b1:5e:eb:3d:1c brd ff:ff:ff:ff:ff:ff
        inet 10.0.0.1/32 brd 10.0.0.1 scope global kube-ipvs0
           valid_lft forever preferred_lft forever
    5: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN group default 
        link/ether 82:56:b8:53:ef:6b brd ff:ff:ff:ff:ff:ff
        inet 10.244.100.0/32 scope global flannel.1
           valid_lft forever preferred_lft forever
        inet6 fe80::8056:b8ff:fe53:ef6b/64 scope link 
           valid_lft forever preferred_lft forever
    [root@k8s-master01 ~]# 

      8.9 配置 docker 使用 flannel

    [root@k8s-master01 ]# cat /usr/lib/systemd/system/docker.service 
    [Unit]
    Description=Docker Application Container Engine
    Documentation=https://docs.docker.com
    After=network-online.target firewalld.service containerd.service
    Wants=network-online.target
    Requires=docker.socket containerd.service
    
    [Service]
    Type=notify
    # the default is not to use systemd for cgroups because the delegate issues still
    # exists and systemd currently does not support the cgroup feature set required
    # for containers run by docker
    EnvironmentFile=/run/flannel/subnet.env
    ExecStart=/usr/bin/dockerd $DOCKER_NETWORK_OPTIONS -H fd:// --containerd=/run/containerd/containerd.sock
    ExecReload=/bin/kill -s HUP $MAINPID
    TimeoutSec=0
    RestartSec=2
    Restart=always
    
    # Note that StartLimit* options were moved from "Service" to "Unit" in systemd 229.
    # Both the old, and new location are accepted by systemd 229 and up, so using the old location
    # to make them work for either version of systemd.
    StartLimitBurst=3
    
    # Note that StartLimitInterval was renamed to StartLimitIntervalSec in systemd 230.
    # Both the old, and new name are accepted by systemd 230 and up, so using the old name to make
    # this option work for either version of systemd.
    StartLimitInterval=60s
    
    # Having non-zero Limit*s causes performance problems due to accounting overhead
    # in the kernel. We recommend using cgroups to do container-local accounting.
    LimitNOFILE=infinity
    LimitNPROC=infinity
    LimitCORE=infinity
    
    # Comment TasksMax if your systemd version does not support it.
    # Only systemd 226 and above support this option.
    TasksMax=infinity
    
    # set delegate yes so that systemd does not reset the cgroups of docker containers
    Delegate=yes
    
    # kill only the docker process, not all processes in the cgroup
    KillMode=process
    OOMScoreAdjust=-500
    
    [Install]
    WantedBy=multi-user.target

      8.10 查看 docker0 和 flannel 地址

    [root@k8s-master01 current]# cat /run/flannel/subnet.env 
    DOCKER_OPT_BIP="--bip=10.244.100.1/24"
    DOCKER_OPT_IPMASQ="--ip-masq=false"
    DOCKER_OPT_MTU="--mtu=1450"
    DOCKER_NETWORK_OPTIONS=" --bip=10.244.100.1/24 --ip-masq=false --mtu=1450"
    [root@k8s-master01 current]# ip addr
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
        link/ether 52:54:00:18:93:04 brd ff:ff:ff:ff:ff:ff
        inet 10.100.12.168/16 brd 10.100.255.255 scope global noprefixroute eth0
           valid_lft forever preferred_lft forever
        inet6 fe80::5054:ff:fe18:9304/64 scope link 
           valid_lft forever preferred_lft forever
    3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
        link/ether 02:42:28:05:17:f7 brd ff:ff:ff:ff:ff:ff
        inet 10.244.100.1/24 brd 10.244.100.255 scope global docker0
           valid_lft forever preferred_lft forever
    4: kube-ipvs0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default 
        link/ether 12:b1:5e:eb:3d:1c brd ff:ff:ff:ff:ff:ff
        inet 10.0.0.1/32 brd 10.0.0.1 scope global kube-ipvs0
           valid_lft forever preferred_lft forever
    5: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN group default 
        link/ether 82:56:b8:53:ef:6b brd ff:ff:ff:ff:ff:ff
        inet 10.244.100.0/32 scope global flannel.1
           valid_lft forever preferred_lft forever
        inet6 fe80::8056:b8ff:fe53:ef6b/64 scope link 
           valid_lft forever preferred_lft forever
    [root@k8s-master01 current]# 

      如果遇到 cni 未初始化,一定要注意 flannel 的 /etc/cni/net.d 和 /opt/cni。

      如果遇到 kubelet 启动成功,但是 master 节点 kubectl get csr 看不到 node,一定要从 kubelet 启动原理去查:https://www.cnblogs.com/zuoyang/p/15698865.html

      8.11 查看集群节点服务状态

    [root@k8s-master01 current]# clear
    [root@k8s-master01 current]# kubectl get cs,node
    NAME                                 STATUS      MESSAGE                                                                                           ERROR
    componentstatus/etcd-2               Unhealthy   Get https://10.100.15.246:2379/health: dial tcp 10.100.15.246:2379: connect: connection refused   
    componentstatus/scheduler            Healthy     ok                                                                                                
    componentstatus/controller-manager   Healthy     ok                                                                                                
    componentstatus/etcd-0               Healthy     {"health":"true"}                                                                                 
    componentstatus/etcd-1               Healthy     {"health":"true"}                                                                                 
    
    NAME                STATUS   ROLES    AGE     VERSION
    node/k8s-master01   Ready    <none>   30h     v1.18.20
    node/k8s-master02   Ready    <none>   23h     v1.18.20
    node/k8s-node01     Ready    <none>   85m     v1.18.20
    node/k8s-node02     Ready    <none>   2m37s   v1.18.20
    [root@k8s-master01 current]# 

      8.12 给 master 和 node 集群节点打标签

    kubectl label node k8s-master01 node-role.kubernetes.io/master=master
    kubectl label node k8s-master01 node-role.kubernetes.io/etcd=etcd
    kubectl label node k8s-master02 node-role.kubernetes.io/master=master
    kubectl label node k8s-master02 node-role.kubernetes.io/etcd=etcd
    kubectl label node k8s-node01 node-role.kubernetes.io/node=node
    kubectl label node k8s-node01 node-role.kubernetes.io/etcd=etcd
    kubectl label node k8s-node02 node-role.kubernetes.io/node=node
    节点添加标签:kubectl label node k8s-master01 node-role.kubernetes.io/master=master
    节点删除标签:kubectl label node k8s-master01 node-role.kubernetes.io/master-
    

      8.13 打完标签后集群节点的状态

    [root@k8s-master01 ~]# kubectl get nodes
    NAME           STATUS   ROLES         AGE   VERSION
    k8s-master01   Ready    etcd,master   30h   v1.18.20
    k8s-master02   Ready    etcd,master   23h   v1.18.20
    k8s-node01     Ready    etcd,node     98m   v1.18.20
    k8s-node02     Ready    node          16m   v1.18.20
    [root@k8s-master01 ~]# 

      centos8.0 使用二进制部署 k8s-v1.18.20+etcd-v3.3.10+flannel-v0.10.0 高可用集群完成!

  • 相关阅读:
    postman使用
    web应用服务器性能监控及调优
    软件测试的相关网站
    web测试点梳理
    HTTP协议详解
    Fidder详解之get和post请求
    浅谈HTTPS协议
    APP测试基本流程
    Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
    为学日益,为道日损
  • 原文地址:https://www.cnblogs.com/zuoyang/p/15562402.html
Copyright © 2011-2022 走看看