• 3.第二篇 环境初始化准备


    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247483780&idx=1&sn=0a4251c4bee2d2c64a36286b9dd349fa&chksm=e9fdd470de8a5d66b68b8ded312d17232f71ed7f2b829afd3c1077d223896b3cf65638639334&scene=178&cur_album_id=1341273083637989377#rd

    环境信息

    1. 架构图

    2. IP及主机名规划

    3. 组件安装

    4. 内核升级
      所有主机升级Centos 7.6内核到4.x,以便docker容器更好的使用overlay功能等,Centos 7.6内核升级

    5. 安装常用软件包

    yum -y install bridge-utils chrony ipvsadm ipset sysstat conntrack libseccomp wget tcpdump screen vim nfs-utils bind-utils wget socat telnet sshpass net-tools sysstat lrzsz yum-utils device-mapper-persistent-data lvm2 tree nc lsof strace nmon iptraf iftop rpcbind mlocate ipvsadm
    
    1. 信任建立(非必须,方便后面scp包)
      使用这两个命令ssh-keygen、ssh-copy-id,操作过程略,请自行百度或Google。

    主机配置修改

    1. 设置主机名
    # 登录远程主机,执行下面命令,示例如下
    hostnamectl set-hostname node01.k8s.com
    
    1. 修改hosts
    # 把以下内容追加到/etc/hosts中
    192.168.16.101 etcd01 etcd01.k8s.vip
    192.168.16.102 etcd02 etcd02.k8s.vip
    192.168.16.103 etcd03 etcd03.k8s.vip
    192.168.16.104 master01 master01.k8s.vip
    192.168.16.105 master02 master02.k8s.vip
    192.168.16.106 master03 master03.k8s.vip
    192.168.16.107 node01 node01.k8s.vip
    192.168.16.108 nginx01 nginx01.k8s.vip
    192.168.16.108 nginx02 nginx02.k8s.vip
    192.168.16.253 api.k8s.vip
    
    1. 设置时区
    cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    
    1. 时间同步(如果未安装chrony,请先安装)
    [root@master01 ~]# grep -viP "^$|^#" /etc/chrony.conf
    server time4.aliyun.com iburst
    server 1.centos.pool.ntp.org iburst
    driftfile /var/lib/chrony/drift
    makestep 1.0 3
    rtcsync
    logdir /var/log/chrony
    [root@master01 ~]#
    
    # 设置开机自启
    [root@master01 ~]# systemctl enable chronyd
    [root@master01 ~]# systemctl restart chronyd
    [root@master01 ~]#
    
    # 查看时间同步情况,当看到IP地址前面有个*号,表示同步成功,如下
    [root@master01 ~]# chronyc sources
    210 Number of sources = 2
    MS Name/IP address Stratum Poll Reach LastRx Last sample
    ===============================================================================
    ^* 203.107.6.88                  2   6    17    41    +18us[ +176us] +/- 14ms
    ^- electrode.felixc.at 3   6     7    32  -8468us[-8468us] +/- 188ms
    [root@master01 ~]#
    
    1. 关闭防火墙、selinux、swap、NetworkManager
    [root@master01 ~]# systemctl stop firewalld
    [root@master01 ~]# systemctl disable firewalld
    [root@master01 ~]# iptables -F && iptables -X && [root@master01 ~]# iptables -F -t nat && iptables -X -t nat
    [root@master01 ~]# iptables -P FORWARD ACCEPT
    [root@master01 ~]# swapoff -a
    [root@master01 ~]# sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
    [root@master01 ~]# setenforce 0
    [root@master01 ~]# sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
    # 关闭自带网络管理
    [root@master01 ~]# systemctl stop NetworkManager
    [root@master01 ~]# systemctl disable NetworkManager
    
    1. 修改资源限制
    echo "* soft nofile 65536" >> /etc/security/limits.conf
    echo "* hard nofile 65536" >> /etc/security/limits.conf
    echo "* soft nproc 65536"  >> /etc/security/limits.conf
    echo "* hard nproc 65536"  >> /etc/security/limits.conf
    echo "* soft memlock unlimited"  >> /etc/security/limits.conf
    echo "* hard memlock unlimited"  >> /etc/security/limits.conf
    
    1. 加载内核模块ipvs
    cat > /etc/sysconfig/modules/ipvs.modules <<EOF
    
    #!/bin/bash
    modprobe -- ip_vs
    modprobe -- ip_vs_rr
    modprobe -- ip_vs_wrr
    modprobe -- ip_vs_sh
    modprobe -- nf_conntrack_ipv4
    
    EOF
    chmod 755 /etc/sysconfig/modules/ipvs.modules
    bash /etc/sysconfig/modules/ipvs.modules
    lsmod | grep -e ip_vs -e nf_conntrack_ipv4
    
    1. 内核优化
    cat > /etc/sysctl.conf <<EOF
    net.bridge.bridge-nf-call-iptables=1
    net.bridge.bridge-nf-call-ip6tables=1
    net.ipv4.ip_forward=1
    vm.swappiness=0
    vm.overcommit_memory=1
    vm.panic_on_oom=0
    fs.inotify.max_user_instances=8192
    fs.inotify.max_user_watches=1048576
    fs.file-max=52706963
    fs.nr_open=52706963
    net.ipv6.conf.all.disable_ipv6=1
    net.netfilter.nf_conntrack_max=2310720
    EOF
    sysctl -p /etc/sysctl.conf
    
    1. 创建目录并加入环境变量

    脚本名为env.sh,把脚本分发到所有主机/data/k8s/bin/目录下面,方便后续使用;

    mkdir -p /data/k8s/{bin,work,k8s} /etc/{kubernetes,etcd}/cert
    echo 'PATH=/data/k8s/bin:$PATH' >>/etc/profile
    source /etc/profile
    
    1. 脚本定义(根据实际情况修改)
    #!/bin/bash
    # 生成 EncryptionConfig 所需的加密 key
    export ENCRYPTION_KEY=$(head -c 32 /dev/urandom | base64)
    
    # 集群各机器 IP 数组
    export NODE_IPS=( 192.168.16.104 192.168.16.105 192.168.16.106 192.168.16.107 )
    
    # 集群各 IP 对应的主机名数组
    export NODE_NAMES=( master01 master02 master03 node01 )
    
    # 集群MASTER机器 IP 数组
    export MASTER_IPS=( 192.168.16.104 192.168.16.105 192.168.16.106 )
    
    # 集群所有的master Ip对应的主机
    export MASTER_NAMES=( master01 master02 master03 )
    
    # etcd 集群服务地址列表
    export ETCD_ENDPOINTS="https://etcd01.k8s.vip:2379,https://etcd02.k8s.vip:2379,https://etcd03.k8s.vip:2379"
    
    # etcd 集群间通信的 IP 和端口
    export ETCD_NODES="etcd01=https://etcd01.k8s.vip:2380,etcd02=https://etcd02.k8s.vip:2380,etcd03=https://etcd03.k8s.vip:2380"
    
    # etcd 集群各 主机名 数组
    export ETCD_NAMES=( etcd01 etcd02 etcd03 )
    
    # etcd 集群所有node ip
    export ETCD_IPS=( 192.168.16.101 192.168.16.102 192.168.16.103 )
    
    # kube-apiserver 的反向代理(kube-nginx)地址端口
    export KUBE_APISERVER="https://api.k8s.vip:8443"
    
    # 节点间互联网络接口名称
    export IFACE="eth0"
    
    # etcd 数据目录
    export ETCD_DATA_DIR="/data/etcd/data"
    
    # etcd WAL 目录
    export ETCD_WAL_DIR="/data/etcd/wal"
    
    # k8s 各组件数据目录
    export K8S_DIR="/data/k8s/k8s"
    
    # 服务网段,部署前路由不可达,部署后集群内路由可达(kube-proxy 保证)
    SERVICE_CIDR="10.254.0.0/16"
    
    # Pod 网段,建议 /16 段地址,部署前路由不可达,部署后集群内路由可达(flanneld 保证)
    CLUSTER_CIDR="172.19.0.0/16"
    
    # 服务端口范围 (NodePort Range)
    export NODE_PORT_RANGE="1024-32767"
    
    # 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"
    

    总结

    本文主要是完成kubernetes二进制安装前的环境准备,从IP地址规划、架构图、时区、hosts、依赖软件包、防火墙、内核参数以及把后续安装过程中使用到的变量写成脚本的形式,方便后续调用等。

  • 相关阅读:
    面试题:redis事务
    哲学家就餐问题
    面试题:Redis常见性能问题和解决方案?
    取势、明道、优术、践行、合众
    自主可控和开源
    关于独立思考
    警惕软件复杂度困局
    如何构建研发体系
    大数据整体链路
    银行数仓的建设实践
  • 原文地址:https://www.cnblogs.com/sanduzxcvbnm/p/16016218.html
Copyright © 2020-2023  润新知