使用Terraform创建各种Kubernetes资源很简单
Terraform 和 Kubernetes(基础设施部署与容器管理工具)
使用Terraform来创建Kubernetes(k8s)资源,将您的基础架构定义为代码。这使得自动化、版本控制和部署的可重复性成为可能。
下面,我将指导你如何使用Terraform来创建一些常见的Kubernetes资源:命名空间(Namespace)、应用部署(Deployment)和网络服务(Service)
Terraform为什么是配置Kubernetes集群的好工具:- Terraform 允许用户将 Kubernetes 集群定义保留在代码中。
- 它使用相同的声明式语法来提供底层基础设施的配置。
- 使用 Terraform,您可以通过变量修改 Kubernetes 集群。
- 它具有在将更改应用到 Kubernetes 集群之前进行修改的预览功能,类似于干运行测试。
- Terraform 的一个重要优势在于其使用相同的配置语言来定义和部署 Kubernetes 和应用程序。
- 使用 Terraform,只需一个命令即可完成创建、更新和删除操作,而无需检查识别这些资源的 API。
- Terraform 识别资源之间的依赖关系,并将基础设施模块化在代码中。
- Terraform 缩短了产品交付时间,因为它有助于缩短灾难恢复时间和减少发布问题。
- 已经运行起来的 Kubernetes 集群
- 已经安装并配置了
Terraform
和kubectl
现在,咱们开始做资源吧。
步骤 1:配置 Terraform 设置
你可以创建一个Terraform项目文件夹
mkdir terraform-k8s && cd terraform-k8s
- 创建一个
provider.tf
文件,在该文件中定义 Kubernetes 提供器。
terraform {
required_providers {
kubernetes = {
source = "hashicorp/kubernetes"
}
}
}
provider "kubernetes" {
config_path = "~/.kube/config"
}
# 在Terraform中,指定需要的提供者(provider),这里的提供者是kubernetes,其来源为 "hashicorp/kubernetes"。接着,配置kubernetes提供者的配置路径为 "~/.kube/config"。
第二步:定义 Kubernetes 资源请注意:确保更新配置文件路径。
- 创建一个
namespace.tf
文件以定义 Kubernetes 中的命名空间(namespace)。
resource "kubernetes_namespace" "演示" {
元数据 {
名称 = "演示命名空间"
}
}
- 创建一个
deployment.tf
文件来部署应用程序。
resource "kubernetes_deployment" "demo" {
元数据 {
name = "demo-deployment"
命名空间 = kubernetes_namespace.example.元数据[0].name
}
规范 {
复制品 = 3
选择器 {
匹配标签 = {
app = "demo"
}
}
模板 {
元数据 {
标签 = {
app = "demo"
}
}
规范 {
容器 {
镜像 = "nginx:latest"
名称 = "demo-deployment"
}
}
}
}
}
- 创建一个名为
service.tf
的文件来暴露此部署。
resource "kubernetes_service" "demo" {
metadata {
name = "demo-service"
namespace = kubernetes_namespace.example.metadata[0].name
}
spec {
selector = {
app = "example"
}
port {
port = 80
target_port = 80
}
type = "LoadBalancer"
}
}
资源 "kubernetes_service" "demo" {
元数据 {
名称 = "demo-service"
命名空间 = kubernetes_namespace.example.元数据[0].名称
}
规格 {
选择器 = {
app = "example"
}
端口 {
端口 = 80
目标端口 = 80
}
类型 = "LoadBalancer"
}
}
- 创建一个
configmap.tf
文件来定义配置。
资源对象 "kubernetes_config_map" "demo" {
元数据 {
name = "demo-config"
namespace = kubernetes_namespace.example.元数据[0].name
}
数据 = {
"config.json" = jsonencode({
"key" = "value"
})
}
}
- 创建一个名为
secret.tf
的文件来定义一个 Kubernetes 密钥。
resource "kubernetes_secret" "demo" { # 定义一个 Kubernetes Secret 资源
metadata { # 元数据
name = "demo-secret" # 名称
namespace = kubernetes_namespace.example.metadata[0].name # 命名空间
}
data = { # 数据
"password" = base64encode("supersecret") # 将 "supersecret" 转换为 base64 编码
}
}
注意:不建议使用 Kubernetes 自带的秘密,而应该使用外部的秘密管理工具或 Secret Store CSI 驱动程序
- 创建一个名为
pvc.tf
的文件来定义一个持久卷声明。
resource "kubernetes_persistent_volume_claim" "demo" {
metadata {
name = "demo-pvc" # 名称为 demo-pvc
namespace = kubernetes_namespace.example.metadata[0].name # 命名空间为 kubernetes_namespace.example 的命名空间
}
spec {
access_modes = ["ReadWriteOnce"] # 访问模式为读写一次
resources {
requests = {
storage = "10Gi" # 存储请求大小为 10Gi
}
}
}
}
现在,让我们修改部署挂接 ConfigMap 和 Secret。
resource "kubernetes_deployment" "demo" {
元数据 {
名称 = "demo-deployment"
命名空间 = kubernetes_namespace.example.metadata[0].name
}
规格 {
副本数 = 3
选择器 {
匹配标签 = {
app = "demo"
}
}
模板 {
元数据 {
标签 = {
app = "demo"
}
}
规格 {
容器 {
镜像 = "nginx:latest"
名称 = "demo"
卷挂载 {
挂载路径 = "/etc/config"
名称 = "config"
}
卷挂载 {
挂载路径 = "/etc/secret"
名称 = "secret"
只读 = true
}
}
卷 {
名称 = "config"
配置映射 {
名称 = kubernetes_config_map.example.metadata[0].name
}
}
卷 {
名称 = "secret"
密钥 {
密钥名称 = kubernetes_secret.example.metadata[0].name
}
}
}
}
}
}
第三步:开始工作目录
- 在工作目录中运行
terraform init
命令,这将下载所有必需的提供程序,并初始化所有模块和后端。
在工作目录里运行 terraform plan
命令,它会显示执行计划。
- 在当前工作目录中运行
terraform apply
命令,它会在 AWS 上创建所有必要的资源。
步骤六:检查一下资源
- 一旦 Terraform(Terraform)应用完这些更改,请检查资源已正确部署并就位。
kubectl get all --namespace=demo-namespace
现在你已经学会了如何用Terraform创建各种Kubernetes资源,你可以根据需要自由修改并使用它。
如果你觉得这个指南有用,请点个赞 👏,也可以留言。
关注我们,获取更多类似的故事 😊
学术圈 🎓感谢你读到最后。在你离开之前,想提醒你一下:
- 请鼓掌并关注作者!👏
- 关注我们 X|LinkedIn|YouTube|Discord
- 访问我们的其他平台:In Plain English|CoFeed|Venture杂志|Cubed
- 厌倦了那些让你不得不面对算法内容的博客平台?试试 Differ
- 更多精彩内容请访问 Stackademic.com
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦