IP HOSTNAME ROLE
192.168.72.39 k8s-01 master&node
192.168.72.40 k8s-02 master&node
192.168.72.41 k8s-03 master&node
192.168.72.42 k8s-04 node
192.168.72.43 k8s-05 node
  • 注:提前配置静态IP
SERVER VERSION
Kubernetes 1.19.7
Etcd 3.4.12
Docker 19.03.9
Flannel 0.12.0
Linux:~ # cat /etc/os-release
NAME="SLES"
VERSION="12-SP3"
VERSION_ID="12.3"
PRETTY_NAME="SUSE Linux Enterprise Server 12 SP3"
ID="sles"
ANSI_COLOR="0;32"
CPE_NAME="cpe:/o:suse:sles:12:sp3"
Linux:~ # uname -r
4.4.73-5-default
  • 注:suse 12 sp3默认的内核是4.4.73的,如内核版本小于4.x,则需要升级内核,因为Docker overlay2需要使用kernel 4.x版本

    • 官方文档:对于运行 Linux 内核版本 4.0 或更高版本,或使用 3.10.0-51 及更高版本的 RHEL 或 CentOS 的系统,overlay2是首选的存储驱动程序。
  • k8s-master 的配置不能小于2c2g,k8s-node 可以给1c1g,集群为奇数,所以不能少于3个master,master和node节点可以复用,8G内存玩起来会很憋屈,玩过的都知道(哭唧唧~~~)
  • 本次部署用到的安装包,都已经上传至百度云了(合计379MB),如果有担心不安全,可以在github上下载,就是会很慢
  • 如果没有百度会员的话,还是直接github下载吧,利用迅雷,会快一点
  • 链接:https://pan.baidu.com/s/1r5v1czYb1Bk2t8mDbWB4Bw
  • 提取码:rwuh

0、环境准备

0.0、修改主机名

Linux:~ # hostnamectl set-hostname --static k8s-01

0.1、添加hosts解析

k8s-01:~ # cat >> /etc/hosts <<EOF
192.168.72.39 k8s-01
192.168.72.40 k8s-02
192.168.72.41 k8s-03
192.168.72.42 k8s-04
192.168.72.43 k8s-05
EOF

0.2、配置ssh免密

k8s-01:~ # rpm -qa | grep expect
expect-5.45-18.56.x86_64
"如果没有expect,则执行如下操作(注:需要网络或者本地源)"
k8s-01:~ # zypper in expect
#!/usr/bin/env bash
ssh-keygen -t rsa -P "" -f /root/.ssh/id_rsa -q
for host in k8s-01 k8s-02 k8s-03 k8s-04 k8s-05
do
expect -c "
spawn ssh-copy-id -i /root/.ssh/id_rsa.pub root@${host}
expect {
\"*yes/no*\" {send \"yes\r\"; exp_continue}
\"*Password*\" {send \"123.com\r\"; exp_continue}
\"*Password*\" {send \"123.com\r\";}
}"
done
  • 注:我本机的密码是 123.com ,注意修改成自己本机的密码
  • 后续的操作,最后有脚本,除了0.10、配置脚本参数文件需要自己创建,切记,需要先完成免密hosts文件创建

0.3、发送hosts解析文件到其他节点,并修改hostname

#!/usr/bin/env bash
for host in k8s-01 k8s-02 k8s-03 k8s-04 k8s-05
do
printf "\e[1;34m${host}\e[0m\n"
scp /etc/hosts ${host}:/etc/hosts
ssh root@${host} "hostnamectl set-hostname --static ${host}"
done

0.4、更新PATH变量

"所有的k8s安装相关的文件,都存放在/opt/k8s目录下"
k8s-01:~ # echo 'PATH=$PATH:/opt/k8s/bin' >> /etc/profile
k8s-01:~ # source /etc/profile
k8s-01:~ # echo $PATH
/opt/k8s/bin:/sbin:/usr/sbin:/usr/local/sbin:/root/bin:/usr/local/bin:/usr/bin:/bin:/usr/games

0.5、安装依赖包

k8s-01:~ # zypper in -y ntp ipset iptables curl sysstat wget

0.6、关闭防火墙以及swap分区

k8s-01:~ # systemctl disable SuSEfirewall2.service --now
k8s-01:~ # iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat
k8s-01:~ # iptables -P FORWARD ACCEPT
"切记,所有节点都要关闭swap分区,否则kubelet会启动失败"
k8s-01:~ # swapoff -a
k8s-01:~ # sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
  • 注:suse默认安装的时候是没有开启selinux的,如果有开启,记得关闭一下

0.7、开启内核模块

k8s-01:~ # modprobe -- ip_vs && \
modprobe -- ip_vs_rr && \
modprobe -- ip_vs_wrr && \
modprobe -- ip_vs_sh && \
modprobe -- nf_conntrack_ipv4 && \
modprobe -- br_netfilter
k8s-01:~ # chmod +x /etc/rc.d/rc.local"

0.8、内核优化

k8s-01:~ # cat > /etc/sysctl.d/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_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
k8s-01:~ # sysctl -p /etc/sysctl.d/kubernetes.conf
  • vm.swappiness=0 禁止使用 swap 空间,只有当系统 OOM 时才允许使用它
  • vm.overcommit_memory=1 不检查物理内存是否够用
  • vm.panic_on_oom=0 开启 OOM
  • net.ipv4.tcp_tw_recycle=0 关闭tcp_tw_recycle,否则和NAT冲突,会导致服务不通
  • net.ipv6.conf.all.disable_ipv6=1 关闭 IPV6,防止触发Docker BUG

0.9、创建安装所需目录

"每个节点都需要创建"
#!/usr/bin/env bash
for host in k8s-01 k8s-02 k8s-03 k8s-04 k8s-05
do
printf "\e[1;34m${host}\e[0m\n"
ssh root@${host} "mkdir -p /opt/k8s/{bin,packages,ssl,conf,server} /etc/{kubernetes,etcd}/cert"
done
"最终的目录结构"
k8s-01:~ # tree /opt/k8s/
/opt/k8s/
├── bin
├── conf
├── packages
├── server
└── ssl 5 directories, 0 files
k8s-01:~ # tree /etc/kubernetes/
/etc/kubernetes/
└── cert 1 directory, 0 files
k8s-01:~ # tree /etc/etcd/
/etc/etcd/
└── cert 1 directory, 0 files

0.10、配置脚本参数文件

  • 后续的部署,将直接使用变量进行代替,以减少出错的概率,相关的信息,请修改成自己的环境信息,并分发到所有节点的 /opt/k8s/bin 目录下,文件名称为 k8s-env.sh (可自行定义文件名称,后续的部署记得修改即可)
#!/usr/bin/env bash
# 集群各机器 IP 数组
export NODE_IPS=( 192.168.72.39 192.168.72.40 192.168.72.41 192.168.72.42 192.168.72.43 ) # 集群各 IP 对应的主机名数组
export NODE_NAMES=( k8s-01 k8s-02 k8s-03 k8s-04 k8s-05 ) # 集群MASTER机器 IP 数组
export MASTER_IPS=( 192.168.72.39 192.168.72.40 192.168.72.41 ) # 集群所有的master Ip对应的主机
export MASTER_NAMES=( k8s-01 k8s-02 k8s-03 ) # etcd 集群服务地址列表
export ETCD_ENDPOINTS="https://192.168.72.39:2379,https://192.168.72.40:2379,https://192.168.72.41:2379" # etcd 集群间通信的 IP 和端口
export ETCD_NODES="k8s-01=https://192.168.72.39:2380,k8s-02=https://192.168.72.40:2380,k8s-03=https://192.168.72.41:2380" # etcd 集群所有node ip
export ETCD_IPS=( 192.168.72.39 192.168.72.40 192.168.72.41 ) # 节点间互联网络接口名称
export IFACE="eth0" # etcd 数据目录
export ETCD_DATA_DIR="/opt/k8s/server/etcd/data" # etcd WAL 目录,建议是 SSD 磁盘分区,或者和 ETCD_DATA_DIR 不同的磁盘分区
export ETCD_WAL_DIR="/opt/k8s/server/etcd/wal" # kube-apiserver 的反向代理(kube-nginx)地址端口,如果有配置keepalived,可以写VIP
export KUBE_APISERVER="https://192.168.72.39:8443" # k8s 各组件数据目录
export K8S_DIR="/opt/k8s/server/k8s" # 最好使用 当前未用的网段 来定义服务网段和 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=$PATH:/opt/k8s/bin

0.11、环境配置脚本

#!/usr/bin/env bash

cat > /etc/sysctl.d/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_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 cat >> /etc/rc.d/rc.local <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
modprobe -- br_netfilter
EOF for host in k8s-01 k8s-02 k8s-03 k8s-04 k8s-05
do
printf "\e[1;34m${host}\e[0m\n"
scp /etc/hosts ${host}:/etc/hosts
scp /etc/sysctl.d/kubernetes.conf ${host}:/etc/sysctl.d/kubernetes.conf
scp /etc/rc.d/rc.local ${host}:/etc/rc.d/rc.local
ssh root@${host} "hostnamectl set-hostname --static ${host}"
ssh root@${host} "zypper in -y ntp ipset iptables curl sysstat wget"
ssh root@${host} "swapoff -a"
ssh root@${host} "sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab"
ssh root@${host} "modprobe -- ip_vs && \
modprobe -- ip_vs_rr && \
modprobe -- ip_vs_wrr && \
modprobe -- ip_vs_sh && \
modprobe -- nf_conntrack_ipv4 && \
modprobe -- br_netfilter"
ssh root@${host} "chmod +x /etc/rc.d/rc.local"
ssh root@${host} "sysctl -p /etc/sysctl.d/kubernetes.conf"
ssh root@${host} "systemctl disable SuSEfirewall2.service --now"
ssh root@${host} "iptables -F && iptables -X && \
iptables -F -t nat && iptables -X -t nat && \
iptables -P FORWARD ACCEPT"
ssh root@${host} "echo 'PATH=$PATH:/opt/k8s/bin' >> /etc/profile"
ssh root@${host} "source /etc/profile"
ssh root@${host} "mkdir -p /opt/k8s/{bin,packages,ssl,conf,server} /etc/{kubernetes,etcd}/cert"
done

suse 12 二进制部署 Kubernetets 1.19.7 - 第00章 - 环境准备的更多相关文章

  1. suse 12 二进制部署 Kubernetets 1.19.7 - 第13章 - 部署metrics-server插件

    文章目录 1.13.0.创建metrics-server证书和私钥 1.13.1.生成metrics-server证书和私钥 1.13.2.开启kube-apiserver聚合配置 1.13.3.分发 ...

  2. suse 12 二进制部署 Kubernetets 1.19.7 - 第01章 - 创建CA证书和kubectl集群管理命令

    文章目录 1.kubernetes集群部署 1.0.创建CA证书和秘钥 1.0.0.安装cfssl工具 1.0.1.创建根证书 1.0.2.创建证书签名请求文件 1.0.3.生成CA证书和秘钥 1.0 ...

  3. suse 12 二进制部署 Kubernetets 1.19.7 - 第02章 - 部署etcd集群

    文章目录 1.2.部署etcd集群 1.2.0.下载etcd二进制文件 1.2.1.创建etcd证书和私钥 1.2.2.生成etcd证书和私钥 1.2.3.配置etcd为systemctl管理 1.2 ...

  4. suse 12 二进制部署 Kubernetets 1.19.7 - 第03章 - 部署flannel插件

    文章目录 1.3.部署flannel网络 1.3.0.下载flannel二进制文件 1.3.1.创建flannel证书和私钥 1.3.2.生成flannel证书和私钥 1.3.3.将pod网段写入et ...

  5. suse 12 二进制部署 Kubernetets 1.19.7 - 第04章 - 部署docker服务

    文章目录 1.4.部署docker 1.4.0.下载docker二进制文件 1.4.1.配置docker镜像加速 1.4.2.配置docker为systemctl管理 1.4.3.启动docker服务 ...

  6. suse 12 二进制部署 Kubernetets 1.19.7 - 第05章 - 部署kube-nginx

    文章目录 1.5.部署kube-nginx 1.5.0.下载nginx二进制文件 1.5.1.编译部署nginx 1.5.2.配置nginx.conf 1.5.3.配置nginx为systemctl管 ...

  7. suse 12 二进制部署 Kubernetets 1.19.7 - 第06章 - 部署kube-apiserver组件

    文章目录 1.6.部署kube-apiserver 1.6.0.创建kubernetes证书和私钥 1.6.1.生成kubernetes证书和私钥 1.6.2.创建metrics-server证书和私 ...

  8. suse 12 二进制部署 Kubernetets 1.19.7 - 第07章 - 部署kube-controller-manager组件

    文章目录 1.7.部署kube-controller-manager 1.7.0.创建kube-controller-manager请求证书 1.7.1.生成kube-controller-manag ...

  9. suse 12 二进制部署 Kubernetets 1.19.7 - 第08章 - 部署kube-scheduler组件

    文章目录 1.8.部署kube-scheduler 1.8.0.创建kube-scheduler请求证书 1.8.1.生成kube-scheduler证书和私钥 1.8.2.创建kube-schedu ...

随机推荐

  1. Anaconda3+CUDA10.1+CUDNN7.6+TensorFlow2.6安装(Ubuntu16)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  2. MicroPython 8266 配置

    MicroPython 8266 配置 刷固件 下载固件 MicroPython - Python for microcontrollers 从以上网址下载固件,本文下载的是esp8266-20210 ...

  3. IP第一次实验:静态综合

  4. macos下命令行通过ndk编译android下可以执行的ELF程序(并验证opencl的调用)

    源码如下,实现把一个JPG保存成灰度图格式的BMP 1 //jpg2bmp.cpp 2 #include <stdio.h> 3 #include <inttypes.h> 4 ...

  5. 经典面试题:分布式缓存热点KEY问题如何解决--有赞方案

    有赞透明多级缓存解决方案(TMC) 一.引子 1-1. TMC 是什么 TMC ,即"透明多级缓存( Transparent Multilevel Cache )",是有赞 Paa ...

  6. golang中字符串、数值、2进制、8进制、16进制、10进制、日期和字符串之间的转换

    package main import ( "fmt" "reflect" "strconv" "time" ) fun ...

  7. MyBatis加强(1)~myBatis对象关系映射(多对一关系、一对多关系)、延迟/懒加载

    一.myBatis对象关系映射(多对一关系.一对多关系) 1.多对一关系: ---例子:多个员工同属于一个部门. (1)myBatis发送 额外SQL: ■ 案例:员工表通过 dept_id 关联 部 ...

  8. 浅谈FFT(快速傅里叶变换)

    前言 啊摸鱼真爽哈哈哈哈哈哈 这个假期努力多更几篇( 理解本算法需对一些< 常 用 >数学概念比较清楚,如复数.虚数.三角函数等(不会的自己查去(其实就是懒得写了(¬︿̫̿¬☆) 整理了一 ...

  9. Firewalld工作区

    firewalld的字符界面管理工具是 firewall-cmd  firewalld默认配置文件有两个:/usr/lib/firewalld/ (系统配置,尽量不要修改)和 /etc/firewal ...

  10. Android 实用开源库(不定期更新)

    ZXing 极其好用的二维码开源库. GayHub:https://github.com/zxing/zxing MPAndroidChart MPAndroidChart 是 Android 一个强 ...