首页 > 其他分享 >使用Terraform部署华为云和kubernetes资源

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

时间:2024-01-09 11:35:51浏览次数:35  
标签:kubernetes terraform cluster Terraform 华为 key huaweicloud cce id

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

Terraform概述

Terraform 是由 HashiCorp 创建的开源“基础架构即代码”工具。

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

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


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

安装terraform

Terraform是以二进制可执行文件发布,您只需下载terraform二进制文件,然后将terraform可执行文件添加到系统环境变量PATH中即可。下载连接:

wget https://releases.hashicorp.com/terraform/1.6.6/terraform_1.6.6_linux_amd64.zip
unzip terraform_1.6.6_linux_amd64.zip
mv terraform /usr/local/bin/
terraform -version

配置认证

Terraform支持编排华为云上的各种云资源,使用Terraform管理华为云资源前,您需要获取AK/SK,并在Terraform上进行配置,从而认证鉴权。
您可以使用如下两种方式配置Terraform。

1、在Terraform配置文件中添加AK/SK信息

provider "huaweicloud" {
  region     = "cn-north-1"
  access_key = "my-access-key"
  secret_key = "my-secret-key"
}

region:区域,即需要创建管理哪个区域的资源。您可以在这里查询华为云支持的区域
access_key:密钥ID,即AK。查询方法请参见访问密钥
secret_key:访问密钥,即SK。查询方法请参见访问密钥

2、在系统环境变量中添加AK/SK信息

export HW_REGION_NAME="cn-north-1"
export HW_ACCESS_KEY="my-access-key"
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配置文件

1、准备provider的version文件,huaweicloud为本地安装,kubernetes在线安装

terraform {
  required_version = ">= 0.13"

  required_providers {
    huaweicloud = {
      source = "local-registry/huaweicloud/huaweicloud"
      version = ">= 1.60.1"
    }
    kubernetes = {
      source = "hashicorp/kubernetes"
      version = ">= 2.24.0"
    }
  }
}

2、准备provider需要的auth文件,mycluster是资源名称,请替换为实际值

provider "huaweicloud" {
  region        = "cn-north-4"
  access_key     = "***"   #AK
  secret_key     = "***"   #SK
}

provider "kubernetes" {
  host                   = huaweicloud_cce_cluster.mycluster.certificate_clusters[0].server
  cluster_ca_certificate = "${base64decode(huaweicloud_cce_cluster.mycluster.certificate_clusters[0].certificate_authority_data)}"
  client_key             = "${base64decode(huaweicloud_cce_cluster.mycluster.certificate_users[0].client_key_data)}"
  client_certificate     = "${base64decode(huaweicloud_cce_cluster.mycluster.certificate_users[0].client_certificate_data)}"
}

3、准备需要创建的CCE资源文件

variable cce_node_password {
  description = "node password"
  type = string
  nullable = "false"
  sensitive = "true"  #不显示输入的密码
}
//创建vpc
resource "huaweicloud_vpc" "myvpc" {
  name = "vpc"
  cidr = "172.16.0.0/16"
}

//创建子网
resource "huaweicloud_vpc_subnet" "mysubnet" {
  name       = "subnet"
  cidr       = "172.16.0.0/16"
  gateway_ip = "172.16.0.1"

  //设置VPC的DNS信息
  primary_dns   = "100.125.1.250"
  secondary_dns = "100.125.21.250"
  vpc_id        = huaweicloud_vpc.myvpc.id
}

//创建CCE集群
resource "huaweicloud_cce_cluster" "mycluster" {
  name                   = "terraform-cce"
  flavor_id              = "cce.s1.small"
  vpc_id                 = huaweicloud_vpc.myvpc.id
  subnet_id              = huaweicloud_vpc_subnet.mysubnet.id
  container_network_type = "vpc-router"
  container_network_cidr = "10.128.0.0/10"
  kube_proxy_mode        = "iptables"
}

//创建节点池
resource "huaweicloud_cce_node_pool" "node_pool" {
  cluster_id               = huaweicloud_cce_cluster.mycluster.id
  name                     = "test-pool"
  subnet_id                = huaweicloud_vpc_subnet.mysubnet.id
  os                       = "Huawei Cloud EulerOS 2.0"
  initial_node_count       = 2    #节点池初始节点数
  flavor_id                = "c7.large.2"
  availability_zone        = "cn-north-4a"
  password                 = var.cce_node_password
  scall_enable             = true  #开启弹性伸缩
  min_node_count           = 1
  max_node_count           = 10
  scale_down_cooldown_time = 100
  priority                 = 1
  type                     = "vm"

  root_volume {
    size       = 40
    volumetype = "SAS"
  }
  data_volumes {
    size       = 100
    volumetype = "SAS"
  }
  labels = {
  //key         = value
    test        = "test"
  }

  taints {
    key = "test"
    value = "test"
    effect = "NoSchedule"
  }

}

data "huaweicloud_cce_addon_template" "metrics-server" {
  name = "metrics-server"
  cluster_id = huaweicloud_cce_cluster.mycluster.id
  version = "1.3.12"
}

//安装CCE插件metric-server
resource "huaweicloud_cce_addon" "metrics-server" {
    cluster_id = huaweicloud_cce_cluster.mycluster.id
    template_name = "metrics-server"
    version = "1.3.12"
    values {
       basic  = jsondecode(data.huaweicloud_cce_addon_template.metrics-server.spec).basic
       custom_json = jsonencode(
                        {
                            tolerations = [{
                                key      = "test"
                                operator = "Exists"
                            }]
                        })
       flavor_json = jsonencode({
                         replicas = 1
                         resources = [{
                             limitsCpu = "1000m"
                             limitsMem = "1000Mi"
                             requestsCpu = "200m"
                             requestsMem = "400Mi"
                         }]
                     })
    }
}

4、准备需要创建的kubernetes资源文件

resource "kubernetes_deployment_v1" "example" {
  metadata {
    name = "terraform-example"
    labels = {
      test = "MyExampleApp"
    }
  }

  spec {
    replicas = 1

    selector {
      match_labels = {
        test = "MyExampleApp"
      }
    }

    template {
      metadata {
        labels = {
          test = "MyExampleApp"
        }
      }

      spec {
        container {
          image = "nginx:1.17.4"
          name  = "example"

          resources {
            limits = {
              cpu    = "0.5"
              memory = "512Mi"
            }
            requests = {
              cpu    = "250m"
              memory = "50Mi"
            }
          }

          liveness_probe {
            http_get {
              path = "/"
              port = 80
            }
          }
        }
        toleration {
          key      = "test"
          operator = "Exists"
        }
      }
    }
  }
}
resource "kubernetes_service_v1" "example" {
  metadata {
    name = "terraform-example"
  }
  spec {
    selector = {
      test = "MyExampleApp"
    }
    port {
      port        = 80
      target_port = 80
    }

    type = "ClusterIP"
  }
}

5、使用命令创建以上资源

terraform init   #初始化provider
terraform plan   #查看计划
terraform apply -auto-approve  #执行计划

效果展示

  1. 集群信息展示

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

2、节点池展示

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

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

3、CCE插件展示

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

4、kubernetes资源展示

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

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

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

标签:kubernetes,terraform,cluster,Terraform,华为,key,huaweicloud,cce,id
From: https://blog.51cto.com/u_15214399/9158320

相关文章

  • 在Kubernetes中优雅地导出和清理Ingress资源
    引言Kubernetes的Ingress资源是定义外部访问集群服务的规则。随着微服务架构和容器化技术的普及,Ingress作为路由流量的关键组件变得愈发重要。当我们需要在环境之间迁移Ingress资源或者备份当前的配置时,就会用到导出功能。然而,直接使用kubectl导出可能会包括一些我们不需要的元数......
  • 【云原生】kubernetes 1.24 安装教程
    博主介绍:–我是了凡微信公众号【了凡银河系】期待你的关注。未来大家一起加油啊~前言下面记录kubernets1.24安装记录。主要使用calico作为网络插件、kongingress作为路由转发、nginx作为四层代理。如果安装过程中遇到问题,及时沟通,如果不能及时回应,可以关注【了凡银河系】微......
  • Kubernetes容器实践深度解析
    Kubernetes容器实践深度解析引言在当今云原生时代,容器技术已经成为构建、部署和管理应用程序的关键工具之一。而在众多的容器编排系统中,Kubernetes(简称K8s)因其强大的自动化、弹性和可扩展性而备受欢迎。本文将深入探讨Kubernetes容器实践,从基础概念到高级应用,为读者提供全面的指南......
  • 华为HarmonyOS开发之模拟器不能启动的问题(虚拟化未开启)
    如图,点击查看处理指导,根据提示修改配置后还是启动失败 查看任务管理器——》性能——》CPU 显示虚拟化未开启,需要开启开启步骤开启成功,模拟器也可以启动了 ......
  • 华为认证 | HCIP和HCIE难度差多了?
    许多有志于在ICT领域发展的人士,都希望获得华为的HCIP或HCIE认证。那么,考取这些认证到底需要多少钱?HCIP和HCIE的难度又存在怎样的差异?下面将为您揭晓答案。01考华为HCIE多少钱?★考试费用华为HCIE认证考试的费用主要由两部分组成:笔试费用和实验费用。笔试部分的费用为300美金,实验部......
  • “云+冷链”新场景,华为云助力前海粤十“物畅其流”
    本文分享自华为云社区《“云+冷链”新场景,华为云助力前海粤十“物畅其流”》,作者:华为云社区精选。导语:随着技术进步,冷链物流从传统模式向信息化、智能化演进,作为冷链数智化发展的先锋,前海粤十凭借其创新的智慧冷链物流园区一体化管理云平台,在“2023华为开发者大赛”企业赛道获得......
  • “华为杯”杭州电子科技大学2023新生编程大赛 1005
    树-HDU7406$xordist(i,j)=xordist(i,k)\oplusxordist(k,j)$在数轴和树上都是成立的那么原式变成$\sum_{i=l}^{r}xordist(i,k)\oplusxordist(k,j)$这里k指定为1号点就变成了一个很简单的拆位考虑贡献的问题了#include<bits/stdc++.h>usingnamespacestd;#de......
  • LiveGBS流媒体平台GB/T28181功能-国标级联对接海康大华宇视华为等上级平台选择通道支
    LiveGBS功能国标级联对接海康大华宇视华为等上级平台选择通道支持只看已选只看未选1、国标级联2、只看已选3、只看未选4、搭建GB28181视频直播平台1、国标级联LiveGBS可以作为下级平台,级联到第三方国标平台,详见:LiveGBS国标GB/T28181流媒体平台功能-作为下级国标平台级联到第三方......
  • Kubernetes最佳实践与进阶技巧
    @[TOC]Kubernetes最佳实践与进阶技巧Kubernetes(K8s)作为当前最流行的容器编排工具之一,已经在云原生应用开发中扮演着关键的角色。在这篇文章中,我们将深入探讨一些Kubernetes的最佳实践和进阶技巧,帮助开发者更好地利用和优化这一强大的容器编排平台。1.自定义调度策略Kubernetes的调......
  • 想要了解华为IPD,先要了解需求如何管理!
    华为云CodeArtsReq需求管理服务开启单独购买模式,适用于灵活多样的使用场景!华为云CodeArtsReq需求管理服务,提供一站式多元化需求管理、高效团队协作平台,支持IPD、Scrum、看板等多种项目模型,包含结构化需求管理流程、跨项目协同、基线与变更管理、E2E追溯、自定义报表、Wiki在线协......