使用Terraform部署华为云和kubernetes资源
本文分享自华为云社区《使用Terraform部署华为云和kubernetes资源》,作者: 可以交个朋友。
Terraform概述
Terraform 是由 HashiCorp 创建的开源“基础架构即代码”工具。
作为一种声明式编码工具,Terraform 使开发人员能够使用一种称为 HCL(HashiCorp 配置语言)的高级配置语言来描述运行应用程序所需的“最终状态”云或本地基础设施。然后,它会生成一个达到该最终状态的计划,并执行该计划来供应基础设施。
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
在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。查询方法请参见访问密钥。
在系统环境变量中添加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配置文件
准备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"
    }
  }
}
准备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)}"
}
准备需要创建的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"
                         }]
                     })
    }
}
准备需要创建的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"
  }
}
使用命令创建以上资源
terraform init #初始化provider
terraform plan #查看计划
terraform apply -auto-approve #执行计划
效果展示
集群信息展示


节点池展示


CCE插件展示

kubernetes资源展示


使用Terraform部署华为云和kubernetes资源的更多相关文章
- Terraform入门教程,示例展示管理Docker和Kubernetes资源
		
我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 简介 最近工作中用到了Terraform,权当学习记录一下,希望能帮助到其它人. Terraform系列文章如下: T ...
 - Azure Kubernetes(AKS)部署及查看应用资源
		
简介 上一篇文章讲解了如何使用Azure DevOps持续部署应用到Azure Kubernetes上.但是部署是否成功?会不会遇到什么问题?项目运行中是否会出现问题?我们该怎么样查看这些问题,并且对 ...
 - 使用kubesql进行kubernetes资源查询
		
kubesql kubesql(https://github.com/xuxinkun/kubesql)是我最近开发的一个使用sql查询kubernetes资源的工具.诸如node,pod等kuber ...
 - Just 5分钟!使用k3s部署轻量Kubernetes集群快速教程
		
大小仅有40MB的k3s为想要节省开销进行开发和测试的企业提供了一个很好的选择.本文将用一种极为简洁的方式,教你在5分钟之内使用k3s部署轻量Kubernetes集群. Kubernetes已经改变了 ...
 - 深入理解 Kubernetes 资源限制:CPU
		
原文地址:https://www.yangcs.net/posts/understanding-resource-limits-in-kubernetes-cpu-time/ 在关于 Kubernet ...
 - kubefuse  让Kubernetes 资源成为fuse 文件系统
		
kubefuse 是基于fuse 开发的文件系统,我们可以像访问文件系统一样访问Kubernetes 资源,使用python开发 支持以下特性: 可以使用方便的linux tools: ls. vim ...
 - Kubernetes资源与对象简述
		
资料 k8s基本对象概念 背景 资源和对象 Kubernetes 中的所有内容都被抽象为"资源",如 Pod.Service.Node 等都是资源."对象" ...
 - Kubernetes as Database: 使用kubesql查询kubernetes资源
		
写在前面 kubectl虽然查询单个的kubernetes资源或者列表都已经比较方便,但是进行更为多个资源的联合查询(比如pod和node),以及查询结果的二次处理方面却是kubectl无法胜任的.所 ...
 - 【k8s实战一】Jenkins 部署应用到 Kubernetes
		
[k8s实战一]Jenkins 部署应用到 Kubernetes 01 本文主旨 目标是演示整个Jenkins从源码构建镜像到部署镜像到Kubernetes集群过程. 为了简化流程与容易重现文中效果, ...
 - kubernetes资源优化
		
kubernetes资源优化方向 系统参数限制 设置系统内核参数: vm.overcommit_memory = 0 vm.swappiness = 0 sysctl -p #生效 内核参数overc ...
 
随机推荐
- Jmeter-变量的嵌套使用
			
场景: 有存在获取到多个登录账号,循环获取单个变量的情况. 常用方法: ${__BeanShell(vars.get("变量字段_${变量字段}"))} 取值示例: 思维扩展: 一 ...
 - 04-华为HyperReplication中的多时间片技术
			
简介 多时间片技术,是应用于HyperReplication的异步远程复制:提高效率, 在同步远程复制中,没有这个概念: 时间片:在Cache中管理一段时间内写入数据的逻辑空间(数据大小没有限定): ...
 - oracle命令2 和一致性关闭、非一致性关闭
			
启动SQL*Plus语法sqlplus [username/password][@server] [as sysdba|sysoper] ,其中username/password如果不输人,SQL*P ...
 - 实验1 C语言输入输出和简单程序编写
			
1.试验任务1 task1.c //打印一个字符小人 #include <stdio.h> int main() { printf(" o \n"); printf(& ...
 - 一、docker的安装及docker-compose安装
			
一. 安装docker 1.1安装 curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun # https://get.d ...
 - .Net Core 3.1升级 .Net 5后出现代码错误 rzc generate exited with code 1.
			
安装.Net 5后出现错误,错误定位到了CodeGeneration相关的文件,找了半天也不知道哪里的问题. 升级类库,清理解决方案,删除obj.bin文件夹什么的卵用没有. 最后发现升级.Net 5 ...
 - 开发现代化的.NetCore控制台程序:(3)将nuget包发布到GitHubPackages
			
前言 上一篇文章已经把项目模板的nuget包发布到了 nuget 的官方源了,其实还可以发布到其他源,比如 GitHub ,本文记录一下发布到 GitHub Packages 的过程. 注意:本文建立 ...
 - JUC并发编程(终章)各种锁的理解
			
各种锁的理解 公平锁.非公平锁 公平锁:先到先得(不可插队) 非公平锁:达者为先(可插队)---------->默认 public ReentrantLock() { //默认非公平锁 sync ...
 - 普冉PY32系列(十) 基于PY32F002A的6+1通道遥控小车I - 综述篇
			
目录 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境 普冉PY32系列(三) P ...
 - 什么是oa软件?oa软件能做什么?
			
什么是OA软件? OA软件是办公自动化软件(Office Automation Software)的简称,是一种通过计算机技术,对办公业务流程进行管理和自动化处理的软件系统.它主要用于协调和管理企业内 ...