terraform部署kubernetes1.26.12集群
使用terraform部署一个kubernetes1.26.12集群
Terraform
用途: Terraform是一种基础设施即代码(IaC)工具,用于自动化云和本地基础设施的创建、更新和删除。它支持多云平台,如AWS、Azure、Google Cloud等,以及本地虚拟化平台。
工作原理: 用户通过编写HCL(HashiCorp Configuration Language)代码描述所需的基础设施资源,例如虚拟机、存储桶、网络配置等。然后,Terraform根据这些代码执行计划,将实际基础设施配置为代码中所描述的状态。
Kubernetes
用途: Kubernetes是一个开源的容器编排平台,用于自动化、部署、扩展和管理容器化应用程序。它提供了一种容器编排的解决方案,使得应用程序可以在一个集群中灵活运行,并自动处理容器的调度、伸缩和故障恢复。
工作原理: 用户将应用程序容器化,并使用Kubernetes定义应用程序的部署、服务、配置等方面的规范。Kubernetes集群负责管理这些容器,确保它们在可用节点上运行,并提供高度可扩展的、自我修复的应用程序部署。
项目地址
https://github.com/huisebug/terraform-kubernetes.git
项目介绍
1 | ├── down.sh #使用containerd下载kubernetes的客户端,如kubectl、kubelet |
配置修改介绍terraform.tfvars
主要修改下面的地方
- 如果你有3台服务器,希望3台都是master节点(默认会安装node节点),那就按照如下格式进行填写,node变量留空
- 当master超过2台时,说明集群需要负载均衡,这时候就需要在clusterha处填写预留的vip信息
- console是为了方便对机器系统初始化后进行重启生效,terraform不允许机器重启,后面会特别说明
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46作为terraform管理的节点
console = "192.168.137.100"
作为master的节点
master = [
{
ip = "192.168.137.100"
hostname = "k8s-m1"
},
{
ip = "192.168.137.101"
hostname = "k8s-m2"
},
]
作为node的节点
node = [
{
ip = "192.168.137.102"
hostname = "k8s-n1"
},
]
作为etcd的节点
etcd = [
{
ip = "192.168.137.100"
clusterName = "k8s-m1"
},
{
ip = "192.168.137.101"
clusterName = "k8s-m2"
},
{
ip = "192.168.137.102"
clusterName = "k8s-m3"
},
]
clusterha = {
k8s集群HA vip IP地址
vip = "192.168.137.99"
k8s集群HA vip IP地址子网掩码,一般是32
vipSubnet = "24"
}
执行安装
1)执行脚本,脚本会安装terraform,并且进行terraform init
1 | bash tf.sh |
2)查看tf.sh效果
1 | bash tf.sh |
依照上述的module会对应序列号,只需要按照序列号传递即可
例如 1 ,然后回车
3)初始化所有机器
1 | bash tf.sh #输入2 |
最终会提示机器ssh断开,这是正常的,terraform不允许机器重启,此时已经重启了除开terraform console的所有机器
4)重启当前机器
这时候terraform console机器(也就是本机)需要手动重启reboot 或 init 6
5)部署containerd服务
1 | bash tf.sh #输入3 |
完成后会执行down.sh下载相关的kubernetes二进制包
6)直接执行安装剩余的过程:install
1 | bash tf.sh #输入install |
7)查看节点状态和pod信息
1 | kubectl get node |
注意:我这里是2master 1node的集群