基于kubeadm搭建Kubernetes HA集群

本文从最基础的 VirtualBox 虚机主机开始,逐步介绍如何在自己的电脑上虚拟出多台 CentOS 7 操作系统,并使用 kubeadm 部署多 Master、多 Node 节点的 Kubernetes HA 集群。分享在整个部署过程中的重要步骤和可能遇到的问题,帮助初学的朋友更顺利的部署 Kubernetes,从而方便进行后续的 Kubernetes 各项学习与测试。

Kubernetes 常见的高可用集群部署大致分为 3 种:

  • 手工部署以“进程”方式运行

  • 用 kubeadm 部署以“容器”方式运行

  • 手工部署为以“容器”方式运行

以“容器”方式运行有很多的优点,也是推荐的方式。

如果对以“进程”方式运行感兴趣,可以访问以下 URL 了解 etcd cluster 的部署方式:https://github.com/zhangjiongdev/k8s/blob/master/etcdsetupfor_centos7.md。

安装部署的顺序、设置和后面介绍的顺序需保持一致,在实际的测试中不要轻易打乱文档步骤的顺序和修改设置,以避免部署问题。

第一部分

简要介绍部署 Kubernetes HA cluster所需要用到的虚机的准备工作。

部署台式电脑:

  • CPU:Intel i7

  • 内存:16 GB

  • 操作系统:64 位 Windows 10 专业版

  • 网络:可以无限制的访问国内互联网

  • 虚机软件:VirtualBox 6.0.8

  • 虚机操作系统镜像:CentOS-7-x86_64-DVD-1810.iso

注意:某些网络中的上网行为管理,可能会影响安装部署过程的顺利进行。

下载 VirtualBox and CentOS:

VirtualBox 主页:www.virtualbox.org

VirtualBox-6.0.8-130520-Win.exe:https://download.virtualbox.org/virtualbox/6.0.8/VirtualBox-6.0.8-130520-Win.exe

OracleVMVirtualBoxExtensionPack-6.0.8.vbox-extpack:https://download.virtualbox.org/virtualbox/6.0.8/OracleVMVirtualBoxExtensionPack-6.0.8.vbox-extpack

CentOS 主页:https://www.centos.org

CentOS-7-x8664-DVD-1810.iso:http://isoredirect.centos.org/centos/7/isos/x8664/CentOS-7-x86_64-DVD-1810.iso

安装 VirtualBox-6.0.8-130520-Win.exe: 

VirtualBox 导入 Extension_Pack:

菜单:管理>>全局设定>>扩展>>添加新包>>选择OracleVMVirtualBoxExtensionPack-6.0.8.vbox-extpack。 

创建 VirtualBox NAT 网络:

管理 >> 全局设定 >> 网络 >> 添加新NAT网络 >> 编辑NAT网络(新添加的)

修改:

  • 网络名称:nat30

  • 网络CIDR:30.0.2.0/24

  • 支持 DHCP:勾选

  • 支持 IPv6:勾选

端口转发 >> IPv4

名称 | 协议 | 主机IP | 主机端口 | 

master1 | TCP | 0.0.0.0 | 2122 | 30.0.2.11 | 22

master2 | TCP | 0.0.0.0 | 2222 | 30.0.2.12 | 22

master3 | TCP | 0.0.0.0 | 2322 | 30.0.2.13 | 22

node1 | TCP | 0.0.0.0 | 2422 | 30.0.2.14 | 22

c1 | TCP | 0.0.0.0 | 1022 | 30.0.2.5 | 22 

创建虚拟机安装 CentOS:

VirtualBox 新建虚机

  • 名称:(自定义)

  • 类型:Linux

  • 版本:Red Hat(64-bit)

  • 内存大小:1024 MB

  • 虚拟磁盘:现在创建虚拟硬盘(默认)

  • 虚拟硬盘文件类型:VDI(VirtualBox 磁盘映像)

  • 存储在物理硬盘上:动态分配

调整CPU设置:

  • 选中虚拟机(新创建的)>> 控制 >> 设置 >> 系统 >> 处理器

  • 处理器数量:2

调整网络设置:

  • 选中虚拟机(新创建的)>> 控制 >> 设置 >> 网络 >> 网卡 1 >>

  • 启用网络连接:勾选

  • 连接方式:NAT 网络

  • 界面名称:nat30

设置安装光盘:

  • 选中虚拟机

  • 控制 >> 设置 >> 存储 >> 控制器:IDE >> 没有盘片

  • 分配光驱:第二 IDE 控制器主通道 >> 圆形图标 >> 选择一个虚拟光盘文件 >> 找到 CentOS-7-x86_64-DVD-1810.iso 文件

安装 CentOS-7-x86_64(跳过部分安装步骤明细):

  • 选中虚拟机(新创建的)>> 启动

  • 中文、简体中文(中国)

  • 最小安装

  • 没有说明的选项均为默认值

用root账号登录CentOS:

启用网卡:

停止、禁用CentOS防火墙:

禁用 selinux:

禁用UseDNS:

设置静态IP地址:

4台服务器对应修改为(30.0.2.11、30.0.2.12、30.0.2.13、30.0.2.14)

修改主机名:

4台服务器需要对应的修改为(master1、master2、master3、node1):

重启服务器:

第二部分:4 台虚机安装 Docker

容器的安装是 Kubernetes 的基础,我们用的容器是 Docker。

安装一些 Docker 必要的系统工具:

添加 docker yum 源信息:

安装 Docker-ce:

启动 Docker 后台服务:

测试 Docker 版本:

目前我们安装完后的版本是 Docker version 18.09.6, build 481bc77156。

第三部分:Keepalived + HAProxy 安装配置

这是 Kubernetes HA cluster的最后一步准备工作。

三台(Master)控制平面安装 Keepalived + HAProxy。

设置环境 IP:

设置 hosts:

配置 /etc/sysconfig/modules/ipvs.modules:

安装 Keepalived + HAProxy:

在 Master1 配置启动 Keepalived+HAProxy。

配置 Keepalived:

配置 HAProxy:

启动 Keepalived 和 HAProxy:

在 Master2、Master3 配置启动 Keepalived + HAProxy。

配置 Keepalived:

配置 HAProxy:

启动 Keepalived 和 HAProxy:

第四部分:部署 Kubernetes HA cluster 控制平面

第 1 台控制平面(Master1)安装配置 Kubernetes HA 集群。

下载需要的 Kubernetes docker images:

关闭 swap:

生成公钥与私钥对:

配置 /etc/sysctl.d/k8s.conf:

设置 Kubernetes 安装源信息:

安装 kube 组件:

配置 Cgroups:

启动 kubelet:

设置初始化位置文件:

初始化:

部署完后,会显示类似以上的蓝色命令行,第一段 kubeadm join 命令是第 2、3 台 Master 加入 Kubernetes 集群用的,第二段 kubeadm join 是 Node 节点加入 Kubernetes 集群用的,两者的差异在于 Master 多了一个–experimental-control-plane参数。

设置 kube config:

查看容器:

下载 Flannel 配置:

应用 Flannel:

查看容器:

第 2、3 台控制平面(Master2、Master3)安装配置加入 Kubernetes HA 集群。

下载需要的 Kubernetes docker images:

关闭 swap:

复制公钥:

复制 CA:

设置 Kubernetes 安装源信息:

安装 kube 组件:

配置 Cgroups:

加入集群:

注意:以下是范例命令,需要根据 Master1 的实际输出命令运行。

查看容器:

第五部分:部署 Kubernetes HA cluster 数据平面

数据平面(Node1)安装配置加入 Kubernetes HA 集群。

关闭 swap:

设置环境 IP:

设置 hosts:

复制公钥:

设置 k8s.conf:

配置 /etc/sysconfig/modules/ipvs.modules:

下载容器镜像:

设置 Kubernetes repo:

设置 cgroupfs:

设置 kube config 文件:

加入集群:

注意:以下是范例命令,需要根据 Master1 的实际输出命令运行。

查看容器:

第六部分:测试一个 Nginx 无状态 Pod

创建 Nginx 无状态容器(2个副本集):

创建 Nginx 无状态容器的服务,并测试 cluster-ip:

测试 Nginx 集群是否正常运行:

Kubernetes实战培训

Kubernetes实战培训将于2019年6月28日在深圳开课,3天时间带你系统掌握Kubernetes, 学习效果不好可以继续学习。 本次培训包括:云原生介绍、微服务;Docker基础、Docker工作原理、镜像、网络、存储、数据卷、安全;Kubernetes架构、核心组件、常用对象、网络、存储、认证、服务发现、调度和服务质量保证、日志、监控、告警、Helm、实践案例等,点击下方图片或者点击阅读原文了解详情。