用kubeadm搭建Kubernetes1.13高可用集群

部署结构和环境基本准备1. 条件检查系统要求:系统硬件配置要求:2. 安装容器运行环境3. 在每台虚拟上都安装kubeadm和kubelet控制节点和工作节点需要暴露的端口为kube-apiserver创建负载均衡服务1. 安装和配置keepalived2. 安装和配置haproxy安装和配置控制节点1. 配置第一个控制节点2. 安装Weave CNI插件3. 把配置文件拷贝到其他两个控制节点4. 初始化另外两个控制节点其他配置1. 添加工作节点2. 本地访问kubernetes集群部署结构和环境

首先要做Kubernetes集群的高可用,必然需要多个控制主节点,从而防止主节点的单点故障,一般建议至少有三个控制节点来组建高可用的集群。

每个控制节点都独立运行着kube-apiserverkube-schedulerkube-controller-managerapiserver组件,其中和工作节点交互的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. 在每台虚拟上都安装kubeadmkubelet

这两个组件是在虚拟机系统层面进行安装,为后面安装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/

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190122G0L5WL00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券