terraform管理本地K8S集群
terraform管理本地K8S集群
·
1 关于terraform
terraform是一个开源的基础设施即代码的自动化编排工具,用于管理各种不同厂商的各种云服务。不仅可以避免人工操作的麻烦,也可以降低手误的概率,同时还能对资源的变更进行跟踪记录。
2 安装terraform
直接通过yum安装,不过需要先添加对应的repo
yum install -y yum-utils
yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
yum -y install terraform
3 配置使用本地K8S集群
要管理集群,肯定需要有账号和权限,因为我的集群是通过kubeadm创建的,因此我的admin配置文件就是/etc/kubernetes/admin.conf,同时我们的集群provider是kubernetes,可以理解为一个专门的驱动,用于解析对k8s集群资源的操作
provider "kubernetes" {
config_path = "/etc/kubernetes/admin.conf"
}
4 创建资源
我们以新建一个namespace为例,在本地k8s集群里创建新的资源,
resource "kubernetes_namespace" "nginx-test" {
metadata {
name = "nginx"
}
}
资源类型为kubernetes_namespace,资源名称为nginx-test,这个资源名称并不重要,我们真正的namespace名称由meadata指定,也就是nginx。
然后就是terraform的三部曲,init->plan->apply,
- init主要是为了初始化运行环境,下载和安装一些依赖模块
- plan则是实现查看变更的资源是否是我们预期的,这一步并不会真正执行资源修改操作
- apply才是最终执行资源变更
[root@master terraform]# terraform init
Initializing the backend...
Initializing provider plugins...
- Reusing previous version of hashicorp/kubernetes from the dependency lock file
- Using previously-installed hashicorp/kubernetes v2.7.1
Terraform has been successfully initialized!
...
[root@master terraform]# terraform plan
Terraform used the selected providers to generate the following execution plan.
Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# kubernetes_namespace.nginx-test will be created
+ resource "kubernetes_namespace" "nginx-test" {
+ id = (known after apply)
+ metadata {
+ generation = (known after apply)
+ name = "nginx"
+ resource_version = (known after apply)
+ uid = (known after apply)
}
}
Plan: 1 to add, 0 to change, 0 to destroy.
...
[root@master terraform]# terraform apply
Terraform used the selected providers to generate the following execution plan.
Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# kubernetes_namespace.nginx-test will be created
+ resource "kubernetes_namespace" "nginx-test" {
+ id = (known after apply)
+ metadata {
+ generation = (known after apply)
+ name = "nginx"
+ resource_version = (known after apply)
+ uid = (known after apply)
}
}
Plan: 1 to add, 0 to change, 0 to destroy.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
kubernetes_namespace.nginx-test: Creating...
kubernetes_namespace.nginx-test: Creation complete after 0s [id=nginx]
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
apply成功后,我们可以通过kubectl查看下对应资源是否创建,
[root@master terraform]# kubectl get ns
NAME STATUS AGE
nginx Active 5s
可见,nginx这个namespace已经被成功创建。
参考文档:
- https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs
更多推荐
已为社区贡献25条内容
所有评论(0)