部署结构和环境基本准备1. 条件检查系统要求:系统硬件配置要求:2. 安装容器运行环境3. 在每台虚拟上都安装kubeadm和kubelet控制节点和工作节点需要暴露的端口为kube-apiserver创建负载均衡服务1. 安装和配置keepalived2. 安装和配置haproxy安装和配置控制节点1. 配置第一个控制节点2. 安装Weave CNI插件3. 把配置文件拷贝到其他两个控制节点4. 初始化另外两个控制节点其他配置1. 添加工作节点2. 本地访问kubernetes集群部署结构和环境
首先要做Kubernetes集群的高可用,必然需要多个控制主节点,从而防止主节点的单点故障,一般建议至少有三个控制节点来组建高可用的集群。
每个控制节点都独立运行着kube-apiserver,kube-scheduler,kube-controller-manager,apiserver组件,其中和工作节点交互的apiserver是通过负载均衡暴露出去的。
Kubernetes使用的是分布式数据库etcd来存储集群所有的元数据,用kubeadm工具来安装集群时,默认情况下会自动在控制节点上创建etcd数据库。
最终的部署拓扑图如下图所示:
搭建了6台CentOS7.6 64位的虚拟机,其中三台作为控制节点,另外三台配置强一点的作为工作节点,具体的主机名和IP如下表所示:
Centos7的主机名可以通过来进行配置
并且将如下的主机名配置添加到每台虚拟的文件中,这样这5台节点之间就可以通过主机名来互相通信了
基本准备
使用kubeadm创建高可用集群,要求kubernetes必须是1.12及以上的版本,这里我们使用的是目前最新的1.13.1版本
1. 条件检查
在开始部署前,需要检查部署环境是否满足kubeadm搭建高可用集群的基本条件:
系统要求:
Ubuntu 16.04+
CentOS 7
RHEL 7
Fedora 25/26
系统硬件配置要求:
大于2GB的内存
通过指令检查
大于2个CPU个数
通过指令检查
每个节点都有自己唯一的主机名,MAC地址和product_uuid
可以通过查看MAC地址以及通过查看product_uuid
每台虚拟机的Swap必须被关闭
每个节点之间都可以通过SSH进行通信,并且在每个master节点上,配置到其他节点的无需密码登录
2. 安装容器运行环境
这里我们安装的版本是docker 18.06.0版本,因为这是安装时kubernetes最新验证版本,安装过程如下
3. 在每台虚拟上都安装kubeadm和kubelet
这两个组件是在虚拟机系统层面进行安装,为后面安装kubernetes其他组件做准备
控制节点和工作节点需要暴露的端口
控制节点
工作节点
为kube-apiserver创建负载均衡服务
使用Haproxy做负载均衡,haproxy将所有请求轮询转发到每个控制节点上
使用Keepalived为haproxy提供vip,从而在三个控制节点上的haproxy做高可用,防止负载均衡的单点故障
1. 安装和配置keepalived
在每个控制节点上都需要安装
2. 安装和配置haproxy
每个控制节点都要安装
安装和配置控制节点
1. 配置第一个控制节点
创建一个kubeadm-config.yaml文件
LOAD_BALANCER_DNS替换成我们用的负载均衡主机名qi-k8s-elb
LOAD_BALANCER_PORT替换成负载均衡的端口16443
kubeadm指令初始化该控制节点
最后一行会出现"kubeadm join qi-k8s-elb:16443….",说明第一个控制节点初始化成功
要按照上面输出的提示步骤,再执行下面几个步骤,我们才可以通过kubectl指令控制和管理集群
2. 安装Weave CNI插件
3. 把配置文件拷贝到其他两个控制节点
在第一个已经init好的控制节点上,通过如下脚本把相关的配置文件scp到另外另个控制节点
CONTROL_PLANE_IPS填写另外的控制节点列表
确保控制节点之间是免密登录的
然后登录到另外两个控制节点上,运行如下脚本,把配置文件移到对应的目录下
4. 初始化另外两个控制节点
在另外两个节点上运行如下指令,该指令即第一个控制节点初始化后输出的最后一行内容,但是这里需要添加参数,因为添加的节点类型是控制节点
两个控制节点都添加完成后,查看目前的节点状况
三个控制节点都添加成功,并且ROLES都是master
查看所有安装在kube-system的pod
可以看到Kubernetes集群本身需要的一些组件,比如etcd/ kube-apiserver/ kube-controller-manager/ kube-proxy以及网络组件,都是通过daemonset在每个节点启动一个pod
其他配置
1. 添加工作节点
添加指令也是第一个控制节点初始化输出的那个指令行,只不过工作节点就不用额外增加参数了
添加完成后通过查看所有的节点
为工作节点添加ROLES
2. 本地访问kubernetes集群
首先本地要安装kubectl CLI
然后将控制节点的/etc/kubernetes/admin.conf文件保存到本地
登录到本地电脑
官方参考文档:
https://kubernetes.io/docs/setup/independent/ha-topology/
https://kubernetes.io/docs/setup/independent/high-availability/
https://kubernetes.io/docs/setup/independent/setup-ha-etcd-with-kubeadm/
领取专属 10元无门槛券
私享最新 技术干货