使用Terraform部署华为云和kubernetes资源

打印 上一主题 下一主题

主题 705|帖子 705|积分 2115

本文分享自华为云社区《使用Terraform部署华为云和kubernetes资源》,作者: 可以交个朋友。
Terraform概述

Terraform 是由 HashiCorp 创建的开源“基础架构即代码”工具。
作为一种声明式编码工具,Terraform 使开发人员能够使用一种称为 HCL(HashiCorp 配置语言)的高级配置语言来描述运行应用程序所需的“最终状态”云或本地基础设施。然后,它会生成一个达到该最终状态的计划,并执行该计划来供应基础设施。

terraform通过provider调用云厂商的API进行资源管理
安装terraform

Terraform是以二进制可执行文件发布,您只需下载terraform二进制文件,然后将terraform可执行文件添加到系统环境变量PATH中即可。
  1. wget https://releases.hashicorp.com/terraform/1.6.6/terraform_1.6.6_linux_amd64.zip
  2. unzip terraform_1.6.6_linux_amd64.zip
  3. mv terraform /usr/local/bin/
  4. terraform -version
复制代码
配置认证

Terraform支持编排华为云上的各种云资源,使用Terraform管理华为云资源前,您需要获取AK/SK,并在Terraform上进行配置,从而认证鉴权。
您可以使用如下两种方式配置Terraform
在Terraform配置文件中添加AK/SK信息
  1. provider "huaweicloud" {
  2.   region     = "cn-north-1"
  3.   access_key = "my-access-key"
  4.   secret_key = "my-secret-key"
  5. }
复制代码
region:区域,即需要创建管理哪个区域的资源。您可以在这里查询华为云支持的区域
access_key:密钥ID,即AK。查询方法请参见访问密钥
secret_key:访问密钥,即SK。查询方法请参见访问密钥
在系统环境变量中添加AK/SK信息
  1. export HW_REGION_NAME="cn-north-1"
  2. export HW_ACCESS_KEY="my-access-key"
  3. export HW_SECRET_KEY="my-secret-key"
复制代码
更多配置参数请参考:https://registry.terraform.io/providers/huaweicloud/huaweicloud/latest/docs
安装华为云provider

下载华为云provider:https://github.com/huaweicloud/terraform-provider-huaweicloud/releases
如何加速下载华为云 provider:https://support.huaweicloud.com/terraform_faq/index.html
准备terraform配置文件

准备provider的version文件,huaweicloud为本地安装,kubernetes在线安装
  1. terraform {
  2.   required_version = ">= 0.13"
  3.   required_providers {
  4.     huaweicloud = {
  5.       source = "local-registry/huaweicloud/huaweicloud"
  6.       version = ">= 1.60.1"
  7.     }
  8.     kubernetes = {
  9.       source = "hashicorp/kubernetes"
  10.       version = ">= 2.24.0"
  11.     }
  12.   }
  13. }
复制代码
准备provider需要的auth文件,mycluster是资源名称,请替换为实际值
  1. provider "huaweicloud" {
  2.   region        = "cn-north-4"
  3.   access_key     = "***"   #AK
  4.   secret_key     = "***"   #SK
  5. }
  6. provider "kubernetes" {
  7.   host                   = huaweicloud_cce_cluster.mycluster.certificate_clusters[0].server
  8.   cluster_ca_certificate = "${base64decode(huaweicloud_cce_cluster.mycluster.certificate_clusters[0].certificate_authority_data)}"
  9.   client_key             = "${base64decode(huaweicloud_cce_cluster.mycluster.certificate_users[0].client_key_data)}"
  10.   client_certificate     = "${base64decode(huaweicloud_cce_cluster.mycluster.certificate_users[0].client_certificate_data)}"
  11. }
复制代码
准备需要创建的CCE资源文件
  1. variable cce_node_password {
  2.   description = "node password"
  3.   type = string
  4.   nullable = "false"
  5.   sensitive = "true"  #不显示输入的密码
  6. }
  7. //创建vpc
  8. resource "huaweicloud_vpc" "myvpc" {
  9.   name = "vpc"
  10.   cidr = "172.16.0.0/16"
  11. }
  12. //创建子网
  13. resource "huaweicloud_vpc_subnet" "mysubnet" {
  14.   name       = "subnet"
  15.   cidr       = "172.16.0.0/16"
  16.   gateway_ip = "172.16.0.1"
  17.   //设置VPC的DNS信息
  18.   primary_dns   = "100.125.1.250"
  19.   secondary_dns = "100.125.21.250"
  20.   vpc_id        = huaweicloud_vpc.myvpc.id
  21. }
  22. //创建CCE集群
  23. resource "huaweicloud_cce_cluster" "mycluster" {
  24.   name                   = "terraform-cce"
  25.   flavor_id              = "cce.s1.small"
  26.   vpc_id                 = huaweicloud_vpc.myvpc.id
  27.   subnet_id              = huaweicloud_vpc_subnet.mysubnet.id
  28.   container_network_type = "vpc-router"
  29.   container_network_cidr = "10.128.0.0/10"
  30.   kube_proxy_mode        = "iptables"
  31. }
  32. //创建节点池
  33. resource "huaweicloud_cce_node_pool" "node_pool" {
  34.   cluster_id               = huaweicloud_cce_cluster.mycluster.id
  35.   name                     = "test-pool"
  36.   subnet_id                = huaweicloud_vpc_subnet.mysubnet.id
  37.   os                       = "Huawei Cloud EulerOS 2.0"
  38.   initial_node_count       = 2    #节点池初始节点数
  39.   flavor_id                = "c7.large.2"
  40.   availability_zone        = "cn-north-4a"
  41.   password                 = var.cce_node_password
  42.   scall_enable             = true  #开启弹性伸缩
  43.   min_node_count           = 1
  44.   max_node_count           = 10
  45.   scale_down_cooldown_time = 100
  46.   priority                 = 1
  47.   type                     = "vm"
  48.   root_volume {
  49.     size       = 40
  50.     volumetype = "SAS"
  51.   }
  52.   data_volumes {
  53.     size       = 100
  54.     volumetype = "SAS"
  55.   }
  56.   labels = {
  57.   //key         = value
  58.     test        = "test"
  59.   }
  60.   taints {
  61.     key = "test"
  62.     value = "test"
  63.     effect = "NoSchedule"
  64.   }
  65. }
  66. data "huaweicloud_cce_addon_template" "metrics-server" {
  67.   name = "metrics-server"
  68.   cluster_id = huaweicloud_cce_cluster.mycluster.id
  69.   version = "1.3.12"
  70. }
  71. //安装CCE插件metric-server
  72. resource "huaweicloud_cce_addon" "metrics-server" {
  73.     cluster_id = huaweicloud_cce_cluster.mycluster.id
  74.     template_name = "metrics-server"
  75.     version = "1.3.12"
  76.     values {
  77.        basic  = jsondecode(data.huaweicloud_cce_addon_template.metrics-server.spec).basic
  78.        custom_json = jsonencode(
  79.                         {
  80.                             tolerations = [{
  81.                                 key      = "test"
  82.                                 operator = "Exists"
  83.                             }]
  84.                         })
  85.        flavor_json = jsonencode({
  86.                          replicas = 1
  87.                          resources = [{
  88.                              limitsCpu = "1000m"
  89.                              limitsMem = "1000Mi"
  90.                              requestsCpu = "200m"
  91.                              requestsMem = "400Mi"
  92.                          }]
  93.                      })
  94.     }
  95. }
复制代码
准备需要创建的kubernetes资源文件
  1. resource "kubernetes_deployment_v1" "example" {
  2.   metadata {
  3.     name = "terraform-example"
  4.     labels = {
  5.       test = "MyExampleApp"
  6.     }
  7.   }
  8.   spec {
  9.     replicas = 1
  10.     selector {
  11.       match_labels = {
  12.         test = "MyExampleApp"
  13.       }
  14.     }
  15.     template {
  16.       metadata {
  17.         labels = {
  18.           test = "MyExampleApp"
  19.         }
  20.       }
  21.       spec {
  22.         container {
  23.           image = "nginx:1.17.4"
  24.           name  = "example"
  25.           resources {
  26.             limits = {
  27.               cpu    = "0.5"
  28.               memory = "512Mi"
  29.             }
  30.             requests = {
  31.               cpu    = "250m"
  32.               memory = "50Mi"
  33.             }
  34.           }
  35.           liveness_probe {
  36.             http_get {
  37.               path = "/"
  38.               port = 80
  39.             }
  40.           }
  41.         }
  42.         toleration {
  43.           key      = "test"
  44.           operator = "Exists"
  45.         }
  46.       }
  47.     }
  48.   }
  49. }
  50. resource "kubernetes_service_v1" "example" {
  51.   metadata {
  52.     name = "terraform-example"
  53.   }
  54.   spec {
  55.     selector = {
  56.       test = "MyExampleApp"
  57.     }
  58.     port {
  59.       port        = 80
  60.       target_port = 80
  61.     }
  62.     type = "ClusterIP"
  63.   }
  64. }
复制代码
使用命令创建以上资源
  1. terraform init   #初始化provider
  2. terraform plan   #查看计划
  3. terraform apply -auto-approve  #执行计划
复制代码
效果展示

集群信息展示


节点池展示


CCE插件展示

kubernetes资源展示

 
点击关注,第一时间了解华为云新鲜技术~
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

西河刘卡车医

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表