4-1 实践环境准备
一、实践环境准备
1. 服务器说明
我们这里使用的是五台centos 7.2实体机,具体信息如下表:
系统类型 | IP地址 | 节点角色 | CPU | Memory | Hostname |
centos-7.6 | 192.168.10.211 | master 以及中转机 | >=2 | >=2G | kubernetes-master01 |
centos-7.6 | 192.168.10.212 | master | >=2 | >=2G | kubernetes-master02 |
centos-7.6 | 192.168.10.213 | master | >=2 | >=2G | kubernetes-master03 |
centos-7.6 | 192.168.10.51 | worker | >=2 | >=2G | kubernetes-node01 |
centos-7.6 | 192.168.10.52 | worker | >=2 | >=2G | kubernetes-node02 |
2. 系统设置(所有节点)
2.1 主机名
主机名必须每个节点都不一样,并且保证所有点之间可以通过hostname互相访问。
# 查看主机名
$ hostname
# 修改主机名
$ hostnamectl set-hostname <your_hostname>
# 配置host,使主节点之间可以通过hostname互相访问
$ vi /etc/hosts
# <node-ip> <node-hostname>
192.168.10.211 kubernetes-master01
192.168.10.212 kubernetes-master02
192.168.10.213 kubernetes-master03
192.168.10.51 kubernetes-node01
192.168.10.52 kubernetes-node02
2.2 安装依赖包
# 更新yum
$ yum update
# 安装依赖包
$ yum install -y conntrack ipvsadm ipset jq sysstat curl iptables libseccomp
2.3 关闭防火墙、swap,重置iptables
# 关闭防火墙
$ systemctl stop firewalld && systemctl disable firewalld
# 重置iptables
$ iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT
# 关闭swap
$ swapoff -a
$ sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab
# 关闭selinux
$ setenforce 0
# 关闭dnsmasq(否则可能导致docker容器无法解析域名)
$ service dnsmasq stop && systemctl disable dnsmasq
2.4 系统参数设置
# 制作配置文件
$ 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
vm.swappiness=0
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_watches=89100
EOF
# 生效文件
$ sysctl -p /etc/sysctl.d/kubernetes.conf
3. 安装docker(worker节点)
根据kubernetes对docker版本的兼容测试情况,我们选择17.03.1版本
由于近期docker官网速度极慢甚至无法访问,使用yum安装很难成功。我们直接使用rpm方式安装
# 手动下载rpm包
$ mkdir -p /opt/kubernetes/docker && cd /opt/kubernetes/docker
下载容易断 下不全 百度云地址
链接:https://pan.baidu.com/s/1VsKPGIBEXzh0FDT3rb_izA
提取码:a1d2
# 清理原有版本
$ yum remove -y docker* container-selinux
# 安装rpm包
$ yum localinstall -y *.rpm
如果报错 Error: docker-engine-selinux conflicts with 2:container-selinux
就是没有卸载干净
# 开机启动
$ systemctl enable docker
$ systemctl start docker
# 设置参数
# 1.查看磁盘挂载
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 98G 2.8G 95G 3% /
devtmpfs 63G 0 63G 0% /dev
/dev/sda5 1015G 8.8G 1006G 1% /tol
/dev/sda1 197M 161M 37M 82% /boot
# 2.选择比较大的分区(我这里是/tol) 就是将原有的/var/lib/docker路径修改为/tol/docker-data
$ mkdir -p /tol/docker-data
#这里需要先启动docker 否则可能没有 /etc/docker这个文件夹
$ cat <<EOF > /etc/docker/daemon.json
{
"graph": "/tol/docker-data"
}
EOF
# 启动docker服务
service docker restart
4. 准备二进制文件(所有节点)
4.1 配置免密登录
为了方便文件的copy我们选择一个中转节点(随便一个节点,可以是集群中的也可以是非集群中的),配置好跟其他所有节点的免密登录。我这里设置了所有服务器相互免密
# 看看是否已经存在rsa公钥
$ cat ~/.ssh/id_rsa.pub
# 如果不存在就创建一个新的
$ ssh-keygen -t rsa
# 把id_rsa.pub文件内容copy到其他机器的授权文件中
$ cat ~/.ssh/id_rsa.pub
# 在其他节点执行下面命令(包括worker节点)
$ echo "<file_content>" >> ~/.ssh/authorized_keys
4.2 下载二进制文件
官方下载地址(在CHANGELOG链接里面):
https://github.com/kubernetes/kubernetes/releases
网盘下载地址–推荐(我从官网下载整理好的文件):
链接: https://pan.baidu.com/s/1_w9vyQaDGLKDOf_TU2Xu8Q
提取码: vca8
4.3 分发文件并设置好PATH
# 把文件copy到每个节点上(注意替换自己的文件目录)
$ ssh <user>@<node-ip> "mkdir -p /opt/kubernetes/bin"
$ scp master/* <user>@<master-ip>:/opt/kubernetes/bin/
$ scp worker/* <user>@<worker-ip>:/opt/kubernetes/bin/
# 给每个节点设置PATH
$ ssh <user>@<node-ip> "echo 'PATH=/opt/kubernetes/bin:$PATH' >>~/.bashrc"
#添加执行权限 否则添加了PATH还是无法获取到命令
$ ssh <user>@<node-ip> "chmod +x /opt/kubernetes/bin/*"
$ ssh <user>@<node-ip> "source ~/.bashrc"
# 给自己设置path,后面会用到kubectl命令
$ vi ~/.bash_profile
5. 准备配置文件(中转节点)
上一步我们下载了kubernetes各个组件的二进制文件,这些可执行文件的运行也是需要添加很多参数的,包括有的还会依赖一些配置文件。现在我们就把运行它们需要的参数和配置文件都准备好。
5.1 下载配置文件
我这准备了一个项目,专门为大家按照自己的环境生成配置的。它只是帮助大家尽量的减少了机械化的重复工作。它并不会帮你设置系统环境,不会给你安装软件。总之就是会减少你的部署工作量,但不会耽误你对整个系统的认识和把控。
$ cd ~
下载下面这个文件 kubernetes-ha-binary
链接:https://pan.baidu.com/s/1ALO1FMkzE15UlU9JlzC84Q
提取码:kvu4
# 看看git内容
$ ls -l kubernetes-ha-binary
addons/
configs/
pki/
services/
init.sh
global-configs.properties
5.2 文件说明
addons
kubernetes的插件目录,包括calico、coredns、dashboard等。
configs
这个目录比较 - 凌乱,包含了部署集群过程中用到的杂七杂八的配置文件、脚本文件等。
pki
各个组件的认证授权相关证书配置。
services
所有的kubernetes服务(service)配置文件。
global-configs.properties
全局配置,包含各种易变的配置内容。
初始化脚本,配置好global-config之后,会自动生成所有配置文件。
5.3 生成配置
这里会根据大家各自的环境生成kubernetes部署过程需要的配置文件。
在每个节点上都生成一遍,把所有配置都生成好,后面会根据节点类型去使用相关的配置。
# cd到之前下载的git代码目录
$ cd kubernetes-ha-binary
# 编辑属性配置(根据文件注释中的说明填写好每个key-value)
$ vi global-config.properties
#3个master节点的ip
MASTER_0_IP=192.168.10.211
MASTER_1_IP=192.168.10.212
MASTER_2_IP=192.168.10.213
#3个master节点的hostname
MASTER_0_HOSTNAME=kubernetes-master01
MASTER_1_HOSTNAME=kubernetes-master02
MASTER_2_HOSTNAME=kubernetes-master03
#api-server的高可用虚拟ip
MASTER_VIP=192.168.10.188
#keepalived用到的网卡接口名,一般是eth0
VIP_IF=ens33
#worker节点的ip列表
WORKER_IPS=192.168.10.51,192.168.10.52
#kubernetes服务ip网段
SERVICE_CIDR=10.254.0.0/16
#kubernetes的默认服务ip,一般是cidr的第一个
KUBERNETES_SVC_IP=10.254.0.1
#dns服务的ip地址,一般是cidr的第二个
CLUSTER_DNS=10.254.0.2
#pod网段
POD_CIDR=172.22.0.0/16
#NodePort的取值范围
NODE_PORT_RANGE=8400-8900
# 生成配置文件,确保执行过程没有异常信息
$ ./init.sh
# 查看生成的配置文件,确保脚本执行成功
$ find target/ -type f
执行init.sh常见问题:
1. Syntax error: “(” unexpected
bash版本过低,运行:bash -version查看版本,如果小于4需要升级
不要使用 sh init.sh的方式运行(sh和bash可能不一样哦)
2. config.properties文件填写错误,需要重新生成
再执行一次./init.sh即可,不需要手动删除target