网络异常,图片无法展示
|
项目受 kubeasz 启发,考虑使用二进制进行安装的童鞋可以参考这个项目。kubeadm-ha
使用 kubeadm 进行高可用 kubernetes 集群搭建,利用 ansible-playbook 实现自动化安装,既提供一键安装脚本,也可以根据 playbook 分步执行安装各个组件。
项目特性:
- 项目特性: 不受国内网络限制、所有组件使用
kubelet
托管、多master
高可用、tls
双向认证、自定义tls
证书有效期、RBAC
授权、支持Network Policy
- 相关支持:
安装须知:
硬件系统要求
- Master 节点:2c2g+
- Worker 节点:2c4g+
软件系统要求
- 运行以下之一的一台或多台机器:
RHEL 7
CentOS 7.4+
CentOS 8
Debian 9
Ubuntu 16.04+ - 各节点时区时间一致
- 每个节点 mac 地址和 product_uuid 在集群内都是唯一的
- 墙裂建议升级内核到 4.17+,关于 Bug,你可以从以下地方追踪到:
https://github.com/fho/docker-samba-loop
https://github.com/moby/moby/issues/5618
https://github.com/coreos/bugs/issues/254
Kube-apiserver 负载模式
本地负载均衡
该负载均衡模式是在节点本地部署一个负载均衡器,节点本地所有需要链接 apiserver 的组件均通过本地负载均衡器进行访问。
- 优点:兼容所有云;无额外的网络消耗(共用主机 network namespace);不会出现 lb 宕机而整个集群崩溃的情况。
- 缺点:集群外需要链接 apiserver 无法做到高可用(除非再搭建一套负载均衡);节点本地负载均衡器宕机则该节点无法正常工作;添加或删除 master 节点会涉及所有节点更新负载均衡器配置(当然不更新也是可以的)。
+------------------------+ +------------------------+| master-A | | master-B |+------------------------+ +------------------------+| nginx +-------+--------> apiserver |+-----^------+------^----+ | +-----------^------------+| | | | | | | | |+-----+----+ | +----+----+ | +---------+ | +----------+|controller| | |scheduler| | |scheduler| | |controller|+----------+ | +---------+ | +----+----+ | +-----+----+| | | | | | | | |+------------v-----------+ | +----v------+-------v----+| apiserver <-------+--------+ nginx |+------------------------+ | +------------------------+ | >----------------------^----------------------< | | |+---------+----------+ +---------+----------+ +---------+----------+| nginx | | nginx | | nginx |+---^-----------^----+ +---^-----------^----+ +---^-----------^----+| | | | | | | | | | | |+---+---+ +-----+----+ +---+---+ +-----+----+ +---+---+ +-----+----+|kubelet| |kube-proxy| |kubelet| |kube-proxy| |kubelet| |kube-proxy|+-------+ +----------+ +-------+ +----------+ +-------+ +----------+| | | | | |+--------------------+ +--------------------+ +--------------------+| node-A | | node-B | | node-C |+--------------------+ +--------------------+ +--------------------+
VIP 负载均衡
该负载均衡模式是在集群外搭建一个主备负载,虚拟 IP(VIP)飘在这些节点上,当节点挂掉虚拟 IP(VIP)会迅速转移到正常工作的节点上,该模式常见的组合即为:HAproxy + keepalived。
- 优点:集群内外链接 apiserver 均为高可用。
- 缺点:公有云无法使用;额外的网络消耗;所有 node 的网络 I/O 都会高度集中于一台机器上(VIP),一旦集群节点增多,pod 增多,单机的网络 I/O 迟早是网络隐患;lb 宕机整个集群崩溃(当然这种情况很少)。
+----------------------+ +----------------------+ | master-A | | master-B | +----------------------+ +----------------------+ | apiserver <---------+--------> apiserver | +----------------------+ | +----------------------+ | | | | | +----------+ +---------+ | +---------+ +----------+ |controller| |scheduler| | |scheduler| |controller| +----+-----------+-----+ | +------+----------+----+ | | | | |v------v-----------v >------------^------------< v----------v------v| | | || +-------------------+-------------------------+------------------+ || |keepalived| |HAproxy| |HAprox | |keepalived| || +----------+ +-------+ +-------+ +----------+ || | | VIP | | || | LB-A | | LB-B | || +-----------------------+--------^--------+----------------------+ || | |>---->----------->---------->------^----<----------<-----------<-----< | | | | | | +---+-----------+----+ +---+-----------+----+ +---+-----------+----+ |kubelet| |kube-proxy| |kubelet| |kube-proxy| |kubelet| |kube-proxy| +-------+ +----------+ +-------+ +----------+ +-------+ +----------+ | | | | | | +--------------------+ +--------------------+ +--------------------+ | node-A | | node-B | | node-C | +--------------------+ +--------------------+ +--------------------+
集群安装
节点信息
安装 Ansible 运行环境
# 任意节点上安装 Ansible 运行环境sudo ansible/install.sh
集群规划
参考本项目 example
文件夹下的主机清单文件(ansible inventory),修改各机器的访问地址、用户名、密码,并维护好各节点与角色的关系。文件中配置的用户必须是具有 root 权限的用户。项目预定义了 6 个例子,请完成集群规划后进行修改,生产环境建议一个节点只是一个角色。
- 搭建集群后有以下两种“样式”显示,请自行选择:
样式一NAME STATUS ROLES AGE VERSION 192.168.56.11 Ready control-plane,etcd,master,worker 7m25s v1.20.6 192.168.56.12 Ready control-plane,etcd,master,worker 5m18s v1.20.6 192.168.56.13 Ready control-plane,etcd,master,worker 5m18s v1.20.6 192.168.56.14 Ready worker 4m37s v1.20.6
样式二NAME STATUS ROLES AGE VERSION node1 Ready control-plane,etcd,master,worker 7m25s v1.20.6 node2 Ready control-plane,etcd,master,worker 5m18s v1.20.6 node3 Ready control-plane,etcd,master,worker 5m18s v1.20.6 node4 Ready worker 4m37s v1.20.6
对应的 ansible inventory 配置文件示例如下:
部署集群
- 可选: 升级内核,默认安装集群是不会升级内核的,若需升级内核,请执行(内核升级完成后请手动重启所有节点):
ansible-playbook -i example/hosts.m-master.ip.ini 00-kernel.yml
- 一句命令拥有一个高可用 kubernetes 集群:
基本配置执行ansible-playbook -i example/hosts.m-master.ip.ini 90-init-cluster.yml
高级配置执行,注意: 如果安装集群时使用高级配置则以后所有操作都需将-e @example/variables.yaml
参数添加在ansible-playbook
命令中ansible-playbook -i example/hosts.m-master.ip.ini -e @example/variables.yaml 90-init-cluster.yml
本项目所有可配置项都在example/variables.yaml
文件中体现,需自定义配置时删除配置项前注释符即可。
若example/hosts.m-master.ip.ini
文件中与example/variables.yaml
变量值冲突时,example/variables.yaml
文件中的变量值优先级最高。