kubernetes 集群安装(kubeadm)
一、环境准备
1、服务器准备
总共5台机器,3台master 2台node节点
系统:CentOS Linux release 7.5 内存:8G 磁盘:50G
最小化安装
10.103.22.231 master01 haproxy keepalived
10.103.22.232 master02 haproxy keepalived
10.103.22.233 master03 haproxy keepalived
10.103.22.234 node04
10.103.22.235 node05
2、系统设置
设置主机名
修改hosts文件
安装依赖包
设置防火墙为 Iptables 并设置空规则
关闭swap
关闭 SELINUX
调整内核参数,对于 K8S
加载ipvs模块
请确保ipset也已经安装了,如未安装请执行yum install -y ipset安装。
调整系统时区
关闭系统不需要服务
将可执行文件路径 /opt/kubernetes/bin 添加到 PATH 变量
3、配置SSH免密登录
新密钥对
分发公钥到各个节点
4、准备Docker环境
清理原有版本
添加Docker yum源
安装docker
目前根据kubernetes容器运行时文档,安装如下版本:
docker-ce:docker服务器
docker-ce-cli:docker客户端
containerd.io:用于管理主机系统的完整容器生命周期,从映像传输和存储到容器执行和监视,再到底层存储、网络附件等等
配置docker daemon.json文件
创建docker数据目录
启动 Docker
二、安装kubernetes集群
1、下载etcd二进制包
etcd包下载:
地址:https://github.com/etcd-io/etcd/releases/tag/v3.4.9
包名:
etcd-v3.4.9-linux-amd64.tar.gz
解压安装包:
2、创建 CA 证书和秘钥
安装 cfssl 工具集
创建配置文件
创建证书签名请求文件
生成 CA 证书和私钥
分发根证书文件
3、部署etcd集群
创建 etcd 证书和私钥
创建证书签名请求文件
生成证书和私钥
分发生成的证书和私钥到各 etcd 节点
创建etcd 的systemd unit 模板
注:
User :指定以 k8s 账户运行;
WorkingDirectory 、 --data-dir :指定工作目录和数据目录为/opt/lib/etcd ,需在启动服务前创建这个目录;
--name :指定节点名称,当 --initial-cluster-state 值为 new 时, --name 的参数值必须位于 --initial-cluster 列表中;
--cert-file 、 --key-file :etcd server 与 client 通信时使用的证书和私钥;
--trusted-ca-file :签名 client 证书的 CA 证书,用于验证 client 证书;
--peer-cert-file 、 --peer-key-file :etcd 与 peer 通信使用的证书和私钥;
--peer-trusted-ca-file :签名 peer 证书的 CA 证书,用于验证 peer 证书;
为各节点创建和分发 etcd systemd unit 文件和etcd 数据目录
启动 etcd 服务
vim /opt/kubernetes/script/etcd.sh
显示信息:
>>> 10.103.22.231
https://10.103.22.231:2379 is healthy: successfully committed proposal: took = 14.831695ms
>>> 10.103.22.232
https://10.103.22.232:2379 is healthy: successfully committed proposal: took = 21.961696ms
>>> 10.103.22.233
https://10.103.22.233:2379 is healthy: successfully committed proposal: took = 20.714393ms
4、安装负载均衡器
3台master节点安装 keepalived haproxy
配置haproxy 配置文件
vim /etc/haproxy/haproxy.cfg
注:
haproxy 在 10080 端口输出 status 信息;
haproxy 监听所有接口的 8443 端口,该端口与环境变量 ${KUBE_APISERVER} 指定的端口必须一致;
server 字段列出所有kube-apiserver监听的 IP 和端口;
下发haproxy 配置文件;并启动检查haproxy服务
vim /opt/kubernetes/script/haproxy.sh
确保输出类似于:
tcp 0 0 0.0.0.0:10080 0.0.0.0:* LISTEN 20027/haproxy
tcp 0 0 0.0.0.0:8443 0.0.0.0:* LISTEN 20027/haproxy
配置和启动 keepalived 服务
keepalived 多备(backup)运行模式,使用非抢占模式
这样配置防止master出现故障在恢复的时候立即抢占VIP (apiserver启动提供服务需要时间,防止在apiserver未提供服务期间有请求调度过来)
backup:10.103.22.231、10.103.22.232、10.103.22.233
设置keeplived配置文件:
vim /etc/keepalived/keepalived.conf
注:
我的VIP 所在的接口nterface 为 eth1;根据自己的情况改变
使用 killall -0 haproxy 命令检查所在节点的 haproxy 进程是否正常。如果异常则将权重减少(-30),从而触发重新选主过程;
router_id、virtual_router_id 用于标识属于该 HA 的 keepalived 实例,如果有多套keepalived HA,则必须各不相同;
重点:
1、三个节点的state都必须配置为BACKUP
2、三个节点都必须加上配置 nopreempt
3、其中一个节点的优先级必须要高于另外两个节点的优先级
4、在master02和master03的配置中只需将priority 200调成150和100即可
开启keepalived 服务
查看网卡ip:ip a show ens160
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:50:56:a0:ed:1f brd ff:ff:ff:ff:ff:ff
inet 10.103.22.231/24 brd 10.103.22.255 scope global noprefixroute ens160
validlft forever preferredlft forever
inet 10.103.22.236/32 scope global ens160
validlft forever preferredlft forever
5、安装kubeadm 和 kubelet
注: 只在master、node节点上进行以下操作。
kubelet负责与其他节点集群通信,并进行本节点Pod和容器生命周期的管理。kubeadm是Kubernetes的自动化部署工具,降低了部署难度,提高效率。kubectl是Kubernetes集群客户端管理工具。
kubect可以在只需要使用的机器上安装即可。
6、部署kubernetes master
以下内容是根据kubeadm config print init-defaults指令打印出来的,并根据自己需求手动修改后的结果。
其中apiServer.certSANS
中配置的是所有要和apiserver交互的地址,包括VIP。 etcd.external.endpoints
配置的是外部etcd集群,其中也指定了etcd证书路径,这就是为什么etcd的证书要复制到kubernetes所有master节点的原因。
如果有网络环境需要配置一下docker代理:
当你不能科学上网时,可以手动从别的镜像仓库中下载,这样也能达到我们的要求,如下操作:
配置执行kubectl命令用户
安装calico网络插件
使用etcd数据存储安装Calico
1、下载etcd的Calico网络清单。
2、根据环境调整配置
7、master2和master3加入集群
kubernetes证书分发
复制master1生成的证书文件到master2和master3,因为kubernetes使用证书配置集群,所以其它节点要使用同一套证书。
手动载入组件镜像
为了节约安装时间,我们这里手动将master1上的组件镜像载入到master2和master3上。如果不手动载入也可以,时间比较久而已。当然如果是k8s.gcr.io的仓库地址的话记得要科学上网。
加入集群
使用kubeadm安装的集群要让一个新节点加入集群那是相当简单了,如下:
至此master2和master3以master身份加入集群成功,而--experimental-control-plane
参数是主要参数。
配置执行kubectl命令用户
8、node节点加入集群
查看节点数及状态
查看集群组件状态
9、验证集群
通过上面的步骤,我们已经完成了集群的配置安装,现在我们要验证高可用集群的特性,看看是否能高可用,要验证的有:
停掉当前已选举的master来验证组件是否会重新选举。
停掉某个etcd来验证etcd的集群是否可用。
停掉vip地址所在的主机服务,验证vip是否会偏移到另外一台HA上并且集群可用。
验证master选举高可用
要验证masrer集群是否高可用,我们先来查看当前各组件选举在哪台master节点上。
查看kube-controller-manager服务
查看kube-scheduler服务
查看下来kuber-controller-mamager和kube-scheduler都在master02节点上,现在将master02节点关机再次查看。
关机后查看kube-controller-manager服务
关机后查看kube-scheduler服务
由上可以看出kuber-controller-mamager和kube-scheduler都切换到master03节点,kubernetes高可用验证没有问题。
验证etcd集群高可用
我们已经知道,kubernetes所有操作的配置以及组件维护的状态都要存储在etcd中,当etcd不能用时,整个kubernetes集群也不能正常工作了。那么我们关掉etcd2节点来测试(由于刚才停掉了master02节点所以用etcd2节点来验证)。
查看当前组件监控状态:
查看集群组件状态
将master02节点关机,etcd2也会停掉,查看etcd状态
已经很明显的看到了etcd1这台服务已经不可达了
回到kubernetes master1节点上,我们再次查看组件健康状态
我们也可以通过kubernetes查看到etcd1已经连接失败了
现在查看一下kubernetes集群会受影响吗
可以看到etcd1节点服务宕机后,我们的kubernetes依然可以用,因此etcd集群也是高可用的。
验证vip地址漂移
我们都知道我们的集群apiserver是通过haproxy的vip地址做反向代理的。可以通过以下命令查看
查看vip地址
可以看到vip(10.103.22.236)在master01(10.103.22.231)上,直接将master01服务器关机
验证vip(haproxy的vip地址)的漂移和kubernetes集群是否可用
查看vip地址已经漂移到master02(10.103.22.232)
验证kubernetes集群是否可用
显示我们的kubectl客户端依然可以通过VIP访问kubernetes集群。因此HA高可用验证成功。
评论