为了账号安全,请及时绑定邮箱和手机立即绑定

使用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 集群
  • 已经安装并配置了 Terraformkubectl

现在,咱们开始做资源吧。

步骤 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 命令,这将下载所有必需的提供程序,并初始化所有模块和后端。
步骤 4: 创建 Terraform 规划

在工作目录里运行 terraform plan 命令,它会显示执行计划。

第 5 步:运行 Terraform 应用
  • 在当前工作目录中运行 terraform apply 命令,它会在 AWS 上创建所有必要的资源。

步骤六:检查一下资源

  • 一旦 Terraform(Terraform)应用完这些更改,请检查资源已正确部署并就位。
kubectl get all --namespace=demo-namespace

现在你已经学会了如何用Terraform创建各种Kubernetes资源,你可以根据需要自由修改并使用它。

如果你觉得这个指南有用,请点个赞 👏,也可以留言。

关注我们,获取更多类似的故事 😊

学术圈 🎓

感谢你读到最后。在你离开之前,想提醒你一下:

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消