美文网首页人生几何?K8s
二进制安装-k8s高可用集群01-系统初始化

二进制安装-k8s高可用集群01-系统初始化

作者: Chris0Yang | 来源:发表于2021-08-25 21:42 被阅读0次

    1)集群机器

    master:172.68.96.101
    node01:172.68.96.102
    node02:172.68.96.103
    VIP:   172.68.96.110
    

    2)主机名

    • 设置永久主机名称,然后重新登录
    hostname master # 将 master  替换为当前主机名
    hostname node01 # 将 node01  替换为当前主机名
    hostname node02 # 将 node01  替换为当前主机名
    
    • 设置的主机名保存在 /etc/hosts 文件中
    cat > /etc/hosts << EOF
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    
    172.68.96.101    master
    172.68.96.102    node01
    172.68.96.103    node02
    EOF
    

    3)添加 k8s 和 docker 账户 (可选)

    • 在每台机器上添加 k8s 账户,可以无密码 sudo (可选)
    sudo useradd -m k8s
    echo 123456 | passwd k8s --stdin # 为 k8s 账户设置密码
    
    sudo visudo
    110#   %wheel    ALL=(ALL)    NOPASSWD: ALL        # 取消注释
    
    sudo grep '%wheel.*NOPASSWD: ALL' /etc/sudoers
    110  %wheel    ALL=(ALL)    NOPASSWD: ALL
    
    sudo gpasswd -a k8s wheel
    
    • 在每台机器上添加 docker 账户,将 k8s 账户添加到 docker 组中,同时配置 dockerd 参数
    sudo useradd -m docker
    sudo gpasswd -a k8s docker
    sudo mkdir -p /etc/docker/
    cat > /etc/docker/daemon.json << EOF
    {
        "registry-mirrors": ["镜像加速地址-1","镜像加速地址-2"],
        "max-concurrent-downloads": 20
    }
    EOF
    

    4)无密码 ssh 登录其它节点

    如果没有特殊指明,本文档的所有操作均在 master和node[01~2] 节点上执行,然后远程分发文件和执行命令。
    稍候会介绍一个神器,通过这个就能够实现基本上全程在节点 1 中部署整个集群。

    设置 master 可以无密码登录所有节点的 k8s 和 root 账户

    ssh-keygen -t rsa
    ssh-copy-id root@master
    ssh-copy-id root@node01
    ssh-copy-id root@node02
    ........
    

    后面的部署操作可以选择在master机器上的k8s用户下进行,如果不想使用k8s,后面都是可以改为root。

    5)将可执行文件路径 /opt/k8s/bin 添加到 PATH 变量中

    在每台机器上添加环境变量

    sudo sh -c "echo 'PATH=/opt/k8s/bin:$PATH:$HOME/bin:$JAVA_HOME/bin' >>/root/.bashrc"
    echo 'PATH=/opt/k8s/bin:$PATH:$HOME/bin:$JAVA_HOME/bin' >>~/.bashrc
    

    6)环境变量

    现在将要引入一个环境变量,以便于整个流程的部署工作,一开始UP自己是有点不大适应,但是习惯了。这种操作之后发现这个思路,可以结合在 k8s 的部署之上,是真的很好用。

    定义变量之前,我们先定义所有这次部署 k8s 所工作的目录

    mkdir -p /opt/k8s/bin/
    

    变量内容如下

    cat > /opt/k8s/bin/environment.sh << "EOF"
    #!/usr/bin/bash
    # 生成 EncryptionConfig 所需的加密 key
    export ENCRYPTION_KEY=$(head -c 32 /dev/urandom | base64)
    # 最好使用当前未用的网段来定义服务网段和Pod网段
    # 服务网段,部署前路由不可达,部署后集群内路由可达(kube-proxy 和 ipvs 保证)
    export SERVICE_CIDR="10.254.0.0/16"
    # Pod 网段,建议 /16 段地址,部署前路由不可达,部署后集群内路由可达(flanneld 保证)
    export CLUSTER_CIDR="172.30.0.0/16"
    # 服务端口范围 (NodePort Range)
    export NODE_PORT_RANGE="8400-9000"
    # 集群各机器 IP 数组
    export NODE_IPS=(172.68.96.101 172.68.96.102 172.68.96.103)
    # 集群各 IP 对应的 主机名数组
    export NODE_NAMES=(master node01 node02)
    # kube-apiserver 的 VIP(HA 组件 keepalived 发布的 IP)
    export MASTER_VIP=172.68.96.110
    # kube-apiserver VIP 地址(HA 组件 haproxy 监听 8443 端口)
    export KUBE_APISERVER="https://${MASTER_VIP}:8443"
    # HA 节点,配置 VIP 的网络接口名称
    export VIP_IF="eth0"
    # etcd 集群服务地址列表
    export ETCD_ENDPOINTS="https://172.68.96.101:2379,https://172.68.96.102:2379,https://172.68.96.103:2379"
    # etcd 集群间通信的 IP 和端口
    export ETCD_NODES="master=https://172.68.96.101:2380,node01=https://172.68.96.102:2380,node02=https://172.68.96.103:2380"
    # flanneld 网络配置前缀
    export FLANNEL_ETCD_PREFIX="/kubernetes/network"
    # kubernetes 服务 IP (一般是 SERVICE_CIDR 中第一个IP)
    export CLUSTER_KUBERNETES_SVC_IP="10.254.0.1"
    # 集群 DNS 服务 IP (从 SERVICE_CIDR 中预分配)
    export CLUSTER_DNS_SVC_IP="10.254.0.2"
    # 集群 DNS 域名
    export CLUSTER_DNS_DOMAIN="cluster.local."
    # 将二进制目录 /opt/k8s/bin 加到 PATH 中
    export PATH=/opt/k8s/bin:$PATH
    EOF
    

    其中需要注意相关 IP 的设置对应,不要搞错了哦

    7)安装依赖包

    在每台机器上安装依赖包

    sudo yum install -y conntrack ipvsadm ipset jq sysstat curl iptables libseccomp epel-release
    

    上边是传统方式的安装方法,现在我们可以采用一下刚刚定义的方式安装一下

    定义一个脚本

    cat > /data/script/magic01_install_dependpackage.sh << "EOF"
    #!/bin/bash
    # 安装依赖包
    source /opt/k8s/bin/environment.sh
    for node_ip in ${NODE_IPS[@]}
    do
        echo ">>> ${node_ip}"
        ssh root@${node_ip} "yum install -y lrzsz tree vim epel-release conntrack ipvsadm ipset jq sysstat curl iptables libseccomp"
    done
    EOF
    

    注意:在第一个 EOF 中加引号,这样文本当中的变量就不会被替换

    8)关闭防火墙

    将新内容导入到对应脚本,而后就这样,一劳永逸的,一步一步搭建下去

    cat > /data/script/magic02_shutdown_firewall.sh << "EOF"
    #!/bin/bash
    # 关闭防火墙
    source /opt/k8s/bin/environment.sh
    for node_ip in ${NODE_IPS[@]}
    do
        echo ">>> ${node_ip}"
        ssh root@${node_ip} "systemctl stop firewalld && systemctl disable firewalld"
        ssh root@${node_ip} "iptables -F && sudo iptables -X && sudo iptables -F -t nat && sudo iptables -X -t nat && iptables -P FORWARD ACCEPT"
    done
    EOF
    

    9)关闭 swap 分区

    如果开启了 swap 分区,kubelet 会启动失败 (可以通过将参数 –fail-swap-on 设置为 false 来忽略 swap on),故需要在每台机器上关闭 swap 分区,为了防止开机自动挂载 swap 分区,也要注释 /etc/fstab 中相应的条目

    cat > /data/script/magic03_shutdown_swap.sh << "EOF"
    #!/bin/bash
    # 关闭 swap 分区
    source /opt/k8s/bin/environment.sh
    for node_ip in ${NODE_IPS[@]}
    do
        echo ">>> ${node_ip}"
        ssh root@${node_ip} "swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab"
    done
    EOF
    

    10)关闭 SELinux

    关闭 SELinux,否则后续 K8S 挂载目录时可能报错 Permission denied

    sudo setenforce 0
    cat /etc/selinux/config|grep SELINUX=disabled
    SELINUX=disabled
    

    11)加载内核模块

    cat > /data/script/magic04_loading_kernel.sh << "EOF"
    #!/bin/bash
    # 加载内核模块
    source /opt/k8s/bin/environment.sh
    for node_ip in ${NODE_IPS[@]}
    do
        echo ">>> ${node_ip}"
        ssh root@${node_ip} "modprobe br_netfilter && modprobe ip_vs"
    done
    EOF
    

    12)设置系统参数

    cat > /data/kuberconfig/kubernetes.conf << EOF
    net.bridge.bridge-nf-call-iptables=1
    net.bridge.bridge-nf-call-ip6tables=1
    net.ipv4.ip_forward=1
    net.ipv4.tcp_tw_recycle=0
    vm.swappiness=0
    vm.overcommit_memory=1
    vm.panic_on_oom=0
    fs.inotify.max_user_watches=89100
    fs.file-max=52706963
    fs.nr_open=52706963
    net.ipv6.conf.all.disable_ipv6=1
    net.netfilter.nf_conntrack_max=2310720
    EOF
    

    分发给三台主机,并加载

    cat > /data/script/magic05_system_parameter.sh << "EOF"
    #!/bin/bash
    # 设置系统参数
    source /opt/k8s/bin/environment.sh
    for node_ip in ${NODE_IPS[@]}
    do
        echo ">>> ${node_ip}"
        scp /data/kuberconfig/kubernetes.conf root@${node_ip}:/etc/sysctl.d/kubernetes.conf
        ssh root@${node_ip} "sysctl -p /etc/sysctl.d/kubernetes.conf"
    done
    EOF
    

    13)安装其它的基础包

    安装几个常用但系统未必安装的包,同时配置一下时间同步,并把时间同步写入到定时任务当中

    cat > /data/script/magic06_install_basic_package.sh << "EOF"
    #!/bin/bash
    # 安装其它的基础包
    source /opt/k8s/bin/environment.sh
    for node_ip in ${NODE_IPS[@]}
    do
        echo ">>> ${node_ip}"
        ssh root@${node_ip} 'yum -y install wget ntpdate lrzsz curl rsync && ntpdate -u cn.pool.ntp.org && echo "* * * * * /usr/sbin/ntpdate -u cn.pool.ntp.org &> /dev/null" > /var/spool/cron/root'
    done
    EOF
    

    14)创建目录

    cat > /data/script/magic07_create_directory.sh << "EOF"
    #!/bin/bash
    # 创建目录
    source /opt/k8s/bin/environment.sh
    for node_ip in ${NODE_IPS[@]}
    do
        echo ">>> ${node_ip}"
        ssh root@${node_ip} 'mkdir -p /opt/k8s/bin && chown -R k8s /opt/k8s && mkdir -p /etc/kubernetes/cert && chown -R k8s /etc/kubernetes'
        ssh root@${node_ip} 'mkdir -p /etc/etcd/cert && chown -R k8s /etc/etcd/cert && mkdir -p /var/lib/etcd && chown -R k8s /var/lib/etcd'
    done
    EOF
    

    15)分发环境变量配置

    cat > /data/script/magic08_distribute_environment.sh << "EOF" 
    #!/bin/bash
    # 分发环境变量配置
    source /opt/k8s/bin/environment.sh
    for node_ip in ${NODE_IPS[@]}
    do
        echo ">>> ${node_ip}"
        scp /opt/k8s/bin/environment.sh root@${node_ip}:/opt/k8s/bin/
        ssh root@${node_ip} "chmod +x /opt/k8s/bin/*"
    done
    EOF
    

    16)参考

    系统内核相关参数参考:https://docs.openshift.com/enterprise/3.2/admin_guide/overcommit.html

    相关文章

      网友评论

        本文标题:二进制安装-k8s高可用集群01-系统初始化

        本文链接:https://www.haomeiwen.com/subject/vukeiltx.html