本文分享自华为云社区《使用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资源的更多相关文章

  1. Terraform入门教程,示例展示管理Docker和Kubernetes资源

    我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 简介 最近工作中用到了Terraform,权当学习记录一下,希望能帮助到其它人. Terraform系列文章如下: T ...

  2. Azure Kubernetes(AKS)部署及查看应用资源

    简介 上一篇文章讲解了如何使用Azure DevOps持续部署应用到Azure Kubernetes上.但是部署是否成功?会不会遇到什么问题?项目运行中是否会出现问题?我们该怎么样查看这些问题,并且对 ...

  3. 使用kubesql进行kubernetes资源查询

    kubesql kubesql(https://github.com/xuxinkun/kubesql)是我最近开发的一个使用sql查询kubernetes资源的工具.诸如node,pod等kuber ...

  4. Just 5分钟!使用k3s部署轻量Kubernetes集群快速教程

    大小仅有40MB的k3s为想要节省开销进行开发和测试的企业提供了一个很好的选择.本文将用一种极为简洁的方式,教你在5分钟之内使用k3s部署轻量Kubernetes集群. Kubernetes已经改变了 ...

  5. 深入理解 Kubernetes 资源限制:CPU

    原文地址:https://www.yangcs.net/posts/understanding-resource-limits-in-kubernetes-cpu-time/ 在关于 Kubernet ...

  6. kubefuse 让Kubernetes 资源成为fuse 文件系统

    kubefuse 是基于fuse 开发的文件系统,我们可以像访问文件系统一样访问Kubernetes 资源,使用python开发 支持以下特性: 可以使用方便的linux tools: ls. vim ...

  7. Kubernetes资源与对象简述

    资料 k8s基本对象概念 背景 资源和对象   Kubernetes 中的所有内容都被抽象为"资源",如 Pod.Service.Node 等都是资源."对象" ...

  8. Kubernetes as Database: 使用kubesql查询kubernetes资源

    写在前面 kubectl虽然查询单个的kubernetes资源或者列表都已经比较方便,但是进行更为多个资源的联合查询(比如pod和node),以及查询结果的二次处理方面却是kubectl无法胜任的.所 ...

  9. 【k8s实战一】Jenkins 部署应用到 Kubernetes

    [k8s实战一]Jenkins 部署应用到 Kubernetes 01 本文主旨 目标是演示整个Jenkins从源码构建镜像到部署镜像到Kubernetes集群过程. 为了简化流程与容易重现文中效果, ...

  10. kubernetes资源优化

    kubernetes资源优化方向 系统参数限制 设置系统内核参数: vm.overcommit_memory = 0 vm.swappiness = 0 sysctl -p #生效 内核参数overc ...

随机推荐

  1. DHorse v1.4.2 发布,基于 k8s 的发布平台

    版本说明 优化特性 在集群列表增加集群版本: 修改Jvm的GC指标名: 解决问题 解决shell脚本换行符的问题: 解决部署历史列表页,环境名展示错误的问题: 解决指标收集功能的异常: 升级指南 升级 ...

  2. 洛谷P1462spfa + 二分答案

    第一次接触二分答案的题目最开始是没有思路的看了一个题解,然后强行理解之后开始自己打了一遍,然而结果是只得了30分过了3个点其他全wa,之后是漫长的debug,这里想感慨一句自己debug的速度是真慢. ...

  3. 使用 Docker Compose 部署 RabbitMQ 的一些经验与踩坑记录

    前言 RabbitMQ 是一个功能强大的开源消息队列系统,它实现了高效的消息通信和异步处理. 本文主要介绍其基于 Docker-Compose 的部署安装和一些使用的经验. 特点 成熟,稳定 消息持久 ...

  4. 一张图搞懂sql执行顺序

    冲浪时发现一张很有意思的图,细分了一个长sql语句的执行顺序

  5. Neural Networks投稿要求总结

    自用,NN投稿要求,相关的部分的中文版翻译,原文链接:https://www.sciencedirect.com/journal/neural-networks/publish/guide-for-a ...

  6. dsBlog前后台博客系统

    博客简介:本博客采用Spring Boot + LayUI做为基础,进行的博客系统开发,与boot+vue相比,更为适合开发简单的系统,并且更容易上手,简单!高效!更易上手! Spring Boot ...

  7. 原生JS实现视频截图

    视频截图效果预览 利用Canvas进行截图 要用原生js实现视频截图,可以利用canvas的绘图功能 ctx.drawImage,只需要获取到视频标签,就可以通过drawImage把视频当前帧图像绘制 ...

  8. Python 在PDF中生成水印

    前言 在PDF中插入水印是比较常用的一种功能.一般在生成比较重要的,或者需要注明版权.作者的文档时使用比较多. 这里我将分享一个通过python代码为PDF文档添加水印的办法(包括文本水印和图像水印) ...

  9. 手撕Vue-Router-提取路由信息

    前言 好了经过上一篇的学习,我们已经知道了如何监听 Hash 的变化,如何监听路径的一个变化,本篇我们就可以来实现我们自己的 VueRouter 了, 那么怎么实现呢,在实现之前我们先来回顾一下官方的 ...

  10. LabVIEW基于机器视觉的实验室设备管理系统(5)

    目录 行动计划 设备借用 判断设备ID是否正确.设备是否在库 判断是否为已注册用户.电话是否正确 借出设备 设备归还 信息查询 ​判断ID是否正确.选择设备状态 效果演示 今天这一期,我们就来完成实验 ...