0%

一键在Rancher上创建一个Kubernetes集群

之前,在Rancher手动的创建Kubernetes集群。为了做一些测试,我会经常创建/删除集群。如果一直手动做这样的事情会比较痛苦。
在本文中,将介绍创建Rancher Cluster以及后续的操作。

创建一个Cluster

在一个崭新的Rancher上部署一个新的集群。我们需要做如下的事情:

  1. 创建一个Cloud Credential,之后Node Template需要。
  2. 创建Kubernetes Master和Worker Node Template。在Rancher 2.3.5 中, 已经支持手动选择配置,比如Datacenter, Datastore, Folder以及Network等。
  3. 创建一个Cluster.
  4. (可选)配置Kubernetes Cloud Provider

这是一个重复的过程,因此尝试着使用Terraform将这些可重复的过程代码化,即基础设施即代码(Infrastructure As Code)。我已经将代码保存到了Github上。https://github.com/chengqing-su/vsphere-cluster-on-rancher

如何使用

首先,拉取代码。

1
git clone git@github.com:chengqing-su/vsphere-cluster-on-rancher.git

然后,新建一个文件terraform/terraform.tfvars,编辑如下内容并复制到文件中。

1
2
3
4
5
6
7
8
9
10
11
12
name = "<YOUR-CLUSTER-NAME>"
rancher_url = "<YOUR-RANCHER-URL>"
rancher_access_key = "<YOUR-RANCHER-ACCESS-KEY>"
rancher_secret_key = "<YOUR-RANCHER-SECRET-KEY>"

vcenter_server = "<YOUR-VCENTER-IP-OR-DOMAIN>"
vcenter_username = "<YOUR-VCENTER-USERNAME>"
vcenter_password = "<YOUR-VCENTER-PASSWORD>"
vcenter_datacenter = "<YOUR-VCENTER-DATACENTER>" #absolute path, like /datacenter
vcenter_datastore = "<YOUR-VCENTER-DATASTORE>" #absolute path, like /<your-datacenter-name>/datastore/<your-datastore-name>"
vcenter_folder = "<YOUR-VCENTER-VM-FOLDER>" #absolute path, like /<your-datacenter-name>/vm/<your-vm-folder>"
vcenter_resourcepool = "<YOUR-VCENTER-RESOURCE-POOL>" # absolute path, like /<your-datacenter-name>/host/<your-cluster-name>/Resources/<your-resource-pool>

然后,运行自动化脚本auto/deploy一键部署。

当不需要这个集群的时候可以运行auto/destory一键删除。

创建Cluster之后

在我们创建好了一个Cluster之后,我们还要一些后续的操作帮助我们由更好的体验。

创建一个默认Storage Class

我们知道PV的创建总共由两种方式,第一种是管理员直接创建,第二种是用通过Storage Class动态创建。因此我们经常需要创建一个Storage Class来使用存储资源。

下面是Storage Class的manifest:

1
2
3
4
5
6
7
8
9
10
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
annotations:
storageclass.kubernetes.io/is-default-class: "true"
name: vsphere
parameters:
datastore: <YOUR-DATASTORE>
diskformat: thin
provisioner: kubernetes.io/vsphere-volume

使用kubectl命令apply一下上面的manifest就可以创建一个默认的Storage Class.

配置Loadbalancer

在创建一个LoadBalancer类型的Service的时候,发现一直不成功。
为了解决这个问题,可以在App种安装一个叫做metallb的应用。安装完成之后,还需要创建一个ConfigMap,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb
name: metallb-config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 192.168.0.10-192.168.0.50 #修改此处地址为你的地址