suse 12 二进制部署 Kubernetets 1.19.7 - 第00章 - 环境准备
文章目录
| 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,则需要升级内核,因为Dockeroverlay2需要使用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开启OOMnet.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章 - 环境准备的更多相关文章
- 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.分发 ...
- 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 ...
- 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 ...
- 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 ...
- 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服务 ...
- 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管 ...
- 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证书和私 ...
- 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 ...
- 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 ...
随机推荐
- Go语言命名规范
一.变量命名规范 变量命名一般采用驼峰式,当遇到特有名词(缩写或简称,如DNS)的时候,特有名词根据是否私有全部大写或小写.例子: var apiClient var URLString 二.常量命名 ...
- Echart可视化学习(二)
文档的源代码地址,需要的下载就可以了(访问密码:7567) https://url56.ctfile.com/f/34653256-527823386-04154f 正文: 页面主体部分 设置测试样式 ...
- Python与Javascript相互调用超详细讲解(2022年1月最新)(一)基本原理 Part 1 - 通过子进程和进程间通信(IPC)
TL; DR 适用于: python和javascript的runtime(基本特指cpython[不是cython!]和Node.js)都装好了 副语言用了一些复杂的包(例如python用了nump ...
- XXE题型记录
XXE题型记录 [CSAWQual 2019]Web_Unagi 题解 打开题目,点开upload中的例子发现是上传xml文件 根据about中的提示Flag is located at /flag, ...
- Winfrom统一单例窗口
//调用方式 var frm = new MyForm().Instance(); public static class ExFrm { static Dictionary<string, F ...
- cocos2dx 入口函数分析
以下是main函数最开始的两段,也是cocos2d一开始执行的地方: AppDelegate app; return Application::getInstance()->run(); 接下来 ...
- linux中cut命令与tr命令
目录 一:linux中cut命令 1.cut 命令作用 2.参数 3.参数案例解析: 二:tr命令 1.tr命令作用 2.tr命令格式 3.tr命令参数 4.案例解析: 一:linux中cut命令 1 ...
- ZooKeeper 授权访问
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件,提供的功 ...
- 搭建sublime.txt环境结合使用python
{ "cmd": ["python3", "-u", "$file"] }
- 打家劫舍(java语言描述(动态规划))
题目描述: 你是一个专业的小偷,计划偷窃沿街的房屋.每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警. 给 ...