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 ...
随机推荐
- Linux上天之路(九)之文件和文件夹的权限
主要内容 linux 基本权限 linux特殊权限 linux隐藏权限 linux file ACL 权限 1. Linux的基本权限 使用ls -l filename 命令查看文件或文件夹详细权限 ...
- 万级K8s集群背后 etcd 稳定性及性能优化实践
1背景与挑战随着腾讯自研上云及公有云用户的迅速增长,一方面,腾讯云容器服务TKE服务数量和核数大幅增长, 另一方面我们提供的容器服务类型(TKE托管及独立集群.EKS弹性集群.edge边缘计算集群.m ...
- Java 异常分析
Java 异常分析 本文是对以下内容的分析: Java异常设计 Java 异常分类 Java异常可以告诉什么问题 Java异常处理最佳实践 Java Exception 是为了处理应用程序的异常行为而 ...
- Kotlin 协程一 —— 全面了解 Kotlin 协程
一.协程的一些前置知识 1.1 进程和线程 1.1.1基本定义 1.1.2为什么要有线程 1.1.3 进程与线程的区别 1.2 协作式与抢占式 1.2.1 协作式 1.2.2 抢占式 1.3 协程 二 ...
- day3 创建数组并完成对数组的操作
1.实现函数action()初始化数据全0的操作 2.实现函数assignment()利用指针给数组赋值0~9 3.实现函数print()打印数组的每个函数 4.实现函数reverse()完成对数组的 ...
- 一网打尽JVM垃圾回收知识体系
垃圾回收的区域 堆:Java 中绝大多数的对象都存放在堆中,是垃圾回收的重点 方法区:此中的 GC 效率较低,不是重点 由于虚拟机栈的生命周期和线程一致,因此不需要 GC 对象判活 在垃圾收集器对堆进 ...
- 【记录一个问题】笔记本ThinkPad X1-Extreme安装ubuntu 18后,更新nvidia显卡驱动后出现显示问题,无法再登录
如题 更新的过程如下: sudo ubuntu-drivers autoinstall sudo reboot 后续准备在recovery模式中尝试删除驱动.
- cv::copyMakeBorder()中用0值对齐矩阵,方便后续加速傅里叶变换
int M = cv::getOptimalDFTSize(mul_result.rows); // 获得最佳DFT尺寸,为2的次方 int N = cv::getOptimalDFTSize(mul ...
- vue中$nextTick的使用
转载 https://www.jb51.net/article/154823.htm ,写的通俗易懂 在这里我有一个疑问,因为在vue中mounted里面执行后,dom节点是挂载上去了的,所以视图上 ...
- java多态instanceof介绍
1 public static void method(Animal a) {//类型判断 2 a.eat(); 3 if(a instanceof Cat) {//instanceof:用于判断对象 ...