Part 1 简介 使用Terraform Kubespray全自动化在vSphere上部署kubernetes群集

前言

相信大家在看这篇文章的时候已经对kubernetes有一定的了解或者已经知道怎么部署。

对kubernetes有一定了解之后会发现一个问题,在部署过程中不论是使用源码或者官方提供的便捷工具都相当的复杂,要一步一步的安装各种服务api server,etcd等等。

截止本文发布,kubernetes官方提供以下的快捷部署工具:

Part 1 简介 使用Terraform Kubespray全自动化在vSphere上部署kubernetes群集

但是大家有没有想过一个问题,那就是如果现实的企业环境中需要大量的部署kubernetes呢?

难道需要一台一台的安装和配置吗?那后期的扩展和高可用性呢?

所以这也就是引出了我们今天要提到的第一个工具:kubespray

kubespray是什么?

kubespray是面向生产环境的全自动配置和部署kubernetes群集的一个工具:

  • 全面支持云计算环境和裸金属架构(物理机)
  • 高可用性集群可组合(例如,选择网络插件)
  • 基于Ansible完全开源
  • 支持大多数流行的Linux发行版
  • 支持CICD

支持的系统版本

  • Container Linux by CoreOS
  • Debian Buster, Jessie, Stretch, Wheezy
  • Ubuntu 16.04, 18.04
  • CentOS/RHEL 7
  • Fedora 28
  • Fedora/CentOS Atomic
  • openSUSE Leap 42.3/Tumbleweed
  • Oracle Linux 7

支持的kubernetes插件

Terraform是什么?

我们要了解为什么要使用terraform?

上面我们提到了kubespray,他基于Ansible负责配置kubernetes核心部分和需要的组件软件进行自动化部署。

但是我们需要考虑一个问题,如果我们要部署一百台虚拟机的群集的话,那我们需要在群集中创建100虚拟机。

没错手动安装系统!手动进行基础设置!

或许你会说——我可以克隆虚拟机啊!

是的你可以克隆,但是虚拟机的ip地址 DHCP?服务器使用DHCP地址是非常错误的选择,非常不利于后期的管理。

如何调虚拟机应用于不同角色的场景呢(比如master需要比较少的资源,node需要比较多的资源)?

那Ansible是没办法对于云基础设施进行配置

所以我们就要引出我们的重量级角色了——Terraform

Terraform是用于安全高效地构建,更改和版本控制基础结构的工具。Terraform可以管理现有和流行的服务提供商以及定制的内部解决方案。

配置文件向Terraform描述了运行单个应用程序或整个数据中心所需的组件。Terraform生成执行计划,以描述达到预期状态所需执行的操作,然后执行该计划以构建所描述的基础结构。随着配置的更改,Terraform能够确定更改的内容并创建可以应用的增量执行计划。

Terraform可以管理的基础结构包括低级组件(例如计算实例,存储和网络)以及高级组件(例如DNS条目,SaaS功能等)。

Terraform架构

Part 1 简介 使用Terraform Kubespray全自动化在vSphere上部署kubernetes群集

ref:https://zhuanlan.zhihu.com/p/69512630

Terraform负责的对于基础设置的自动化部署,简单来说在我们这次的环境中就是部署虚拟机。

换句话说,通过 Terraform 来创建虚拟机,然后使用 Ansible 来配置和部署应用,过去都是这么搭配操作的。

核心:terraform-vsphere-kubespray 简介

terraform-vsphere-kubespray是我们这次部署要使用的脚本,作者已经在github中开源:

https://github.com/sguyennet/terraform-vsphere-kubespray

  • 使用terraform调用vsphere API自动化创建虚拟机
  • 使用kubespray调用Ansible 自动化部署kubernetes群集
  • 支持大多数Linux版本,包括ubuntu LTS 18.04 ,CentOS 7 等等
  • 需要VMtools的支持,CentOS和RHEL需要perl package的支持
  • 默认基于Calico网络插件
  • 支持自动化伸缩worker 节点 (自动创建虚拟机,自动加入现有群集)
  • 支持更新kubernetes和kubespray的自动化更新
  • 使用vsphere cloud provider创建PVC(PersistentVolumes)

vSphere Cloud Provider 简介

什么是vSphere Cloud Provider?

vSphere Cloud Provider 主要的功能是提供基于ESXi主机的低层存储卷(比如:VMFS,vSAN)给kubernetes上面的容器提供持久化存储(PV/PVC)存储驱动(SC**)**

Part 1 简介 使用Terraform Kubespray全自动化在vSphere上部署kubernetes群集

terraform-vsphere-kubespray 源代码分析:

  • 全部使用terraform脚本
  • 变量的配置
  • 基于HAprxoy + keepalived 负载均衡 和 高可用 kubernetes API server
  • 通过template通告kubespray启用vSphere Cloud Provider

Part 1 简介 使用Terraform Kubespray全自动化在vSphere上部署kubernetes群集

Part 1 简介 使用Terraform Kubespray全自动化在vSphere上部署kubernetes群集

通过template通告kubespray启用vSphere Cloud Provider:

## There are some changes specific to the cloud providers
## for instance we need to encapsulate packets with some network plugins
## If set the possible values are either 'gce', 'aws', 'azure', 'openstack', 'vsphere', 'oci', or 'external'
## When openstack is used make sure to source in the openstack credentials
## like you would do when using nova-client before starting the playbook.
## Note: The 'external' cloud provider is not supported.
## TODO(riverzhang): https://kubernetes.io/docs/tasks/administer-cluster/running-cloud-controller/#running-cloud-controller-manager
cloud_provider: "vsphere"
vsphere_vcenter_ip: "${vsphere_vcenter_ip}"
vsphere_vcenter_port: 443
vsphere_insecure: 1
vsphere_user: "${vsphere_user}"
vsphere_password: "${vsphere_password}"
vsphere_datacenter: "${vsphere_datacenter}"
vsphere_datastore: "${vsphere_datastore}"
vsphere_working_dir: "${vsphere_working_dir}"
vsphere_scsi_controller_type: "pvscsi"
vsphere_resource_pool: "${vsphere_resource_pool}"

https://github.com/sguyennet/terraform-vsphere-kubespray/blob/master/templates/kubespray_all.tpl

写在最后的话

下面我会演示如何使用terraform-vsphere-kubespray在vsphere中部署高可用的kubernetes群集。

Hostname IP Role/Software
k8s-kubespray-haproxy-0 192.168.8.207 HAprxoy + keepalived
k8s-kubespray-haproxy-1 192.168.8.208 HAprxoy + keepalived
k8s-kubespray-master-0 192.168.8.200 Master
k8s-kubespray-master-1 192.168.8.201 Master
k8s-kubespray-master-2 192.168.8.202 Master
k8s-kubespray-worker-0 192.168.8.210 Compute Node
k8s-kubespray-worker-1 192.168.8.211 Compute Node
k8s-kubespray-worker-2 192.168.8.212 Compute Node
K8s-auto-installer 192.168.8.220 Client

Reference

Install and manage automatically a Kubernetes cluster on VMware vSphere with Terraform and Kubespray 2018, viewed 28 October 2019, https://blog.inkubate.io/install-and-manage-automatically-a-kubernetes-cluster-on-vmware-vsphere-with-terraform-and-kubespray/.

Introduction – Terraform by HashiCorp 2019, viewed 28 October 2019, https://www.terraform.io/intro/index.html.

Kantor, I 2018, How To Become a DevOps Engineer In Six Months or Less, Part 2: Configure, in , Medium, viewed 28 October 2019, https://medium.com/@devfire/how-to-become-a-devops-engineer-in-six-months-or-less-part-2-configure-a2dfc11f6f7d.

kubernetes-sigs/kubespray 2019, viewed 28 October 2019, https://github.com/kubernetes-sigs/kubespray.

sguyennet/terraform-vsphere-kubespray 2018, viewed 28 October 2019, https://github.com/sguyennet/terraform-vsphere-kubespray.