1、环境说明
使用的Kubernetes集群可由一个master主机及一个以上(建议至少两个)node主机组成,这些主机可以是物理服务器,也可以运行于vmware、virtualbox或kvm等虚拟化平台上的虚拟机,甚至是公有云上的VPS主机。
本测试环境将由master01、master02、node01、node02、node03和harbor六个独立的主机组成,它们分别拥有2核心的CPU及4G的内存资源,操作系统环境均为CentOS 7.5 1804。此外,需要预设的系统环境如下:
(1)借助于NTP服务设定各节点时间精确同步;
(2)通过DNS完成各节点的主机名称解析,测试环境主机数量较少时也可以使用hosts文件进行;
(3)关闭各节点的iptables或firewalld服务,并确保它们被禁止随系统引导过程启动;
(4)各节点禁用SELinux;
(5)各节点禁用所有的Swap设备;
(6)若要使用ipvs模型的proxy,各节点还需要载入ipvs相关的各模块;
2、设定时钟同步
若节点可直接访问互联网,直接启动chronyd系统服务,并设定其随系统引导而启动。
~]# systemctl start chronyd.service
~]# systemctl enable chronyd.service
不过,建议用户配置使用本地的的时间服务器,在节点数量众多时尤其如此。存在可用的本地时间服务器时,修改节点的/etc/crhony.conf配置文件,并将时间服务器指向相应的主机即可,配置格式如下:
server CHRONY-SERVER-NAME-OR-IP iburst
3、主机名称解析
出于简化配置步骤的目的,本测试环境使用hosts文件进行各节点名称解析,文件内容如下所示:
10.80.4.201 master01
10.80.4.202 master02
10.80.4.203 node01
10.80.4.204 node02
10.80.4.205 node03
10.80.4.206 harbor
4、关闭iptables或firewalld服务
在CentOS7上,iptables或firewalld服务通常只会安装并启动一种,在不确认具体启动状态的前提下,这里通过同时关闭并禁用二者即可简单达到设定目标。
~]# systemctl stop firewalld.service
~]# systemctl stop iptables.service
~]# systemctl disable firewalld.service
~]# systemctl disable iptables.service
5、关闭并禁用SELinux
若当前启用了SELinux,则需要编辑/etc/sysconfig/selinux文件,禁用SELinux,并临时设置其当前状态为permissive:
~]# sed -i 's@^\(SELINUX=\).*@\1disabled@' /etc/sysconfig/selinux
~]# setenforce 0
6、禁用Swap设备、配置内核参数
部署集群时,kubeadm默认会预先检查当前主机是否禁用了Swap设备,并在未禁用时强制终止部署过程。因此,在主机内存资源充裕的条件下,需要禁用所有的Swap设备,否则,就需要在后文的kubeadm init及kubeadm join命令执行时额外使用相关的选项忽略检查错误。
关闭Swap设备,需要分两步完成。首先是关闭当前已启用的所有Swap设备:
~]# swapoff -a
而后编辑/etc/fstab配置文件,注释用于挂载Swap设备的所有行。
配置转发相关参数,否则可能会出错
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness=0
EOF
sysctl -p
7、启用ipvs内核模块
创建内核模块载入相关的脚本文件/etc/sysconfig/modules/ipvs.modules,设定自动载入的内核模块。文件内容如下:
#!/bin/bash
ipvs_modules_dir="/usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs"
for i in $(ls $ipvs_modules_dir | sed -r 's@(.*).ko.xz@\1@'); do
/sbin/modinfo -F filename $i &> /dev/null
if [ $? -eq 0 ]; then
/sbin/modprobe $i
fi
done
修改文件权限,并手动为当前系统加载内核模块:
~]# chmod +x /etc/sysconfig/modules/ipvs.modules
~]# bash /etc/sysconfig/modules/ipvs.modules
8.安装Docker
使用国内Docker源
# cd /etc/yum.repos.d/
# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
Docker安装:
# yum install -y docker-ce
启动后台进程:
# systemctl start docker $$ systemctl enable docker
配置国内镜像地址、本地地址
# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries":["10.80.4.206"],
"max-concurrent-downloads": 10
}
9.准备部署目录
mkdir -p /opt/kubernetes/{cfg,bin,ssl,log} && echo 'export PATH=/opt/kubernetes/bin/:$PATH' >> /etc/profile
10.
准备软件包
CFSSL软件包:
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
etcd软件包:
到https://github.com/coreos/etcd/releases页面下载最新版本的二进制文件:
wget https://github.com/etcd-io/etcd/releases/download/v3.2.25/etcd-v3.2.25-linux-amd64.tar.gz
kubernetes软件包:
到https://github.com/kubernetes/kubernetes/releases页面下载最新版本的二进制文件:
wget https://dl.k8s.io/v1.12.1/kubernetes-server-linux-amd64.tar.gz
wget https://dl.k8s.io/v1.12.1/kubernetes-client-linux-amd64.tar.gz
wget https://dl.k8s.io/v1.12.1/kubernetes-node-linux-amd64.tar.gz
Flannel软件包:
wget https://github.com/coreos/flannel/releases/download/v0.10.0/flannel-v0.10.0-linux-amd64.tar.gz