K8s环境准备
本次安装版本
- Kubernetes 1.14.2
- Docker 18.09.6-ce
- Etcd 3.3.13
- Flanneld 0.11.0
机器
1 | 192.168.6.101 node1 |
其中node1,node2做master集群,也都是node节点
主机名
1 | hostnamectl set-hostname node1 |
免秘钥
1 | 注意:在node1上操作即可 |
初始化
安装依赖包
以下操作均在所有机器操作
1 | yum install -y epel-release conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget unzip net-tools |
关闭防火墙
1 | systemctl stop firewalld |
关闭 swap 分区
1 | swapoff -a |
关闭 SELinux
1 | setenforce 0 |
加载内核并优化
1 | modprobe ip_vs_rr |
ntp
1 | ntpdate ntp1.aliyun.com |
创建相关目录
1 | mkdir -p /opt/k8s/{bin,work} /etc/{kubernetes,etcd}/cert |
升级内核
CentOS 7.x 系统自带的 3.10.x 内核存在一些 Bugs,导致运行的 Docker、Kubernetes 不稳定,例如:
- 高版本的 docker(1.13 以后) 启用了 3.10 kernel 实验支持的 kernel memory account 功能(无法关闭),当节点压力大如频繁启动和停止容器时会导致 cgroup memory leak;
- 网络设备引用计数泄漏,会导致类似于报错:”kernel:unregister_netdevice: waiting for eth0 to become free. Usage count = 1”;
解决方案如下:
- 升级内核到 4.4.X 以上;
- 或者,手动编译内核,disable CONFIG_MEMCG_KMEM 特性;
- 或者,安装修复了该问题的 Docker 18.09.1 及以上的版本。但由于 kubelet 也会设置 kmem(它 vendor 了 runc),所以需要重新编译 kubelet 并指定 GOFLAGS=”-tags=nokmem”;
1 | git clone --branch v1.14.1 --single-branch --depth 1 https://github.com/kubernetes/kubernetes |
这里采用升级内核的解决办法:
1 | rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm |
安装内核源文件(可选,在升级完内核并重启机器后执行):
1 | # yum erase kernel-headers |
设置配置参数脚本
脚本
1 | [root@node1 ~]# cat environment.sh |
分发到所有节点
1 | source environment.sh |