• K8S搭建过程随笔_系统初始化


      组件

    Kubernetes 1.14.2

    Docker 18.09.6-ce

    Etcd 3.3.13

    Flanneld 0.11.0

      基础环境设置

    192.168.11.188 k8s-master

    192.168.11.189 k8s-node1
    192.168.11.190 k8s-node2

      设置主机名:

    hostnamectl set-hostname k8s-master

    hostnamectl set-hostname k8s-node1

    hostnamectl set-hostname k8s-node2

      在master主机添加host

    cat >> /etc/hosts <<EOF

    192.168.11.188 k8s-master
    192.168.11.189 k8s-node1
    192.168.11.190 k8s-node2
    EOF

      免密登录

    ssh-keygen -t rsa

    ssh-copy-id root@k8s-node1

    ssh-copy-id root@k8s-node2

      在所有环境中安装依赖包

    yum install -y epel-release conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget unzip net-tools

      ## epel-release 自动配置yum的软件仓库

      ## conntrack 允许系统管理员从用户空间与内核中的连接跟踪系统进行交互,该系统是为iptables启用状态包检测的模块。

      ## ntpdate 同步更新时间

      ## ntp 网络时间协议

      ## ipvsadm 工作在用户空间,负责为ipvs内核框架编写规则,定义谁是集群服务

      ## ipset ipset是iptables的扩展,它允许你创建 匹配整个地址集合的规则。

      ## jq 直接在命令行下对JSON进行操作,包括分片、过滤、转换等

      ## iptables 管理防火墙安全框架的命令行工具

      ##curl 利用URL语法在命令行下工作的文件传输工具

      ## sysstat 提供Linux性能监控的工具集,包括sar、sadf、mpstat、iostat、pidstat等,监控系统性能和使用情况。

      ## libseccomp ibseccomp库为Linux内核的系统调用过滤机制提供了一个易于使用,独立于平台的接口:seccomp。

      ## wget 下载工具

      ## unzip 解压工具

      ## net-tools  netstat命令不可用时,安装net-tools

      关闭防火墙

    systemctl stop firewalld #临时关闭
    systemctl disable firewalld #永久关闭
    iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat
    iptables -P FORWARD ACCEPT

      关闭swap分区  

    swapoff -a
    sed -i '/ swap / s/^(.*)$/#1/g' /etc/fstab

      关闭SElinux

    setenforce 0

    sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

      加载内核并优化

    modprobe ip_vs_rr
    modprobe br_netfilter
    cat > 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 # 禁止使用 swap 空间,只有当系统 OOM 时才允许使用它
    vm.overcommit_memory=1 # 不检查物理内存是否够用
    vm.panic_on_oom=0 # 开启 OOM
    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
    cp kubernetes.conf /etc/sysctl.d/kubernetes.conf
    sysctl -p /etc/sysctl.d/kubernetes.conf

      ntp

    ntpdate ntp1.aliyun.com #同步阿里云时间

      创建相关目录

    mkdir -p /opt/k8s/{bin,work} /etc/{kubernetes,etcd}/cert

      升级内核

    rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
    # 安装完成后检查 /boot/grub2/grub.cfg 中对应内核 menuentry 中是否包含 initrd16 配置,如果没有,再安装一次!
    yum --enablerepo=elrepo-kernel install -y kernel-lt
    # 设置开机从新内核启动
    grub2-set-default 0

      设置配置参数脚本

    这里的脚本为了之后配置文件、签key使用

    #!/usr/bin/bash

    # 生成 EncryptionConfig 所需的加密 key
    export ENCRYPTION_KEY=$(head -c 32 /dev/urandom | base64)

    # 集群各机器 IP 数组
    export NODE_IPS=(192.168.11.188 192.168.11.189 192.168.11.190)

    # 集群各 IP 对应的主机名数组
    export NODE_NAMES=(k8s-master k8s-node1 k8s-node2)

    # etcd 集群服务地址列表
    export ETCD_ENDPOINTS="https://192.168.11.188:2379"

    # etcd 集群间通信的 IP 和端口
    export ETCD_NODES="k8s-master=https://192.168.11.188:2380"

    # kube-apiserver 的反向代理(kube-nginx)地址端口
    export KUBE_APISERVER="https://127.0.0.1:8443"

    # 节点间互联网络接口名称
    export IFACE="ens33"

    # etcd 数据目录
    export ETCD_DATA_DIR="/data/k8s/etcd/data"

    # etcd WAL 目录,建议是 SSD 磁盘分区,或者和 ETCD_DATA_DIR 不同的磁盘分区
    export ETCD_WAL_DIR="/data/k8s/etcd/wal"

    # k8s 各组件数据目录
    export K8S_DIR="/data/k8s/k8s"

    # docker 数据目录
    export DOCKER_DIR="/data/k8s/docker"

    ## 以下参数一般不需要修改

    # TLS Bootstrapping 使用的 Token,可以使用命令 head -c 16 /dev/urandom | od -An -t x | tr -d ' ' 生成
    BOOTSTRAP_TOKEN="4498a43c27ef382031e642587615ee63"

    # 最好使用 当前未用的网段 来定义服务网段和 Pod 网段

    # 服务网段,部署前路由不可达,部署后集群内路由可达(kube-proxy 保证)
    SERVICE_CIDR="10.254.0.0/16"

    # Pod 网段,建议 /16 段地址,部署前路由不可达,部署后集群内路由可达(flanneld 保证)
    CLUSTER_CIDR="172.30.0.0/16"

    # 服务端口范围 (NodePort Range)
    export NODE_PORT_RANGE="30000-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"

    # 将二进制目录 /opt/k8s/bin 加到 PATH 中
    export PATH=/opt/k8s/bin:$PATH

       将文件发送到所有节点

    source environment.sh
    for node_ip in ${NODE_IPS[@]}
    do
    echo ">>> ${node_ip}"
    scp environment.sh root@${node_ip}:/opt/k8s/bin/
    ssh root@${node_ip} "chmod +x /opt/k8s/bin/*"
    done

  • 相关阅读:
    springmvc 处理静态资源
    springmvc jsp 获取 上下文
    springmvc 如何设置首页
    servlet-mapping url-pattern / 和 /*区别
    nginx支持php
    openresty 变量
    git tag用法
    python 导入模块,__init__.py 的作用
    python 转码问题
    python装饰器
  • 原文地址:https://www.cnblogs.com/bbicdi/p/11549968.html
Copyright © 2020-2023  润新知