使用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 ...
随机推荐
- buffer busy waits等待事件案例-vage
转自vage 讨厌香草冰激凌的汽车与Buffer busy wiats的故事 记得好几年前看到过一个故事,通用公司曾收到一客户的邮件,邮件中客户描述了一个非常奇怪的问题.他们家有晚饭后去 ...
- 自然数的拆分问题(lgP2404)
dfs.又调了一个小时,窝果然菜 需要传递的变量分别为目前搜索的数字:目前所有选中数字的和:目前所选数字个数. 见注释. #include<bits/stdc++.h> using nam ...
- http协议与apache
http协议与apache 1.httpd协议 两台主机通信需要socket文件 yum insatll -y nc [root@localhost ~]#nc -l 8000 #主机1 ...
- [Python急救站]草莓熊的绘制
草莓熊也是一个热门的图案,今天就用Python绘制一下 import turtle as t # 设置背景颜色,窗口位置以及大小 t.colormode(255) # 颜色模式 t.speed(0) ...
- 线上SQL超时场景分析-MySQL超时之间隙锁
前言 之前遇到过一个由MySQL间隙锁引发线上sql执行超时的场景,记录一下. 背景说明 分布式事务消息表:业务上使用消息表的方式,依赖本地事务,实现了一套分布式事务方案 消息表名:mq_messag ...
- require()、import、import()有哪些区别?
require().import.import()是我们常用的引入模块的三种方式,代码中几乎处处用到.如果对它们存在模糊,就会在工作过程中不断产生困惑,更无法做到对它们的使用挥洒自如.今天我们来一起捋 ...
- AcWing 1064. 小国王
状态:f[i][j][k]表示第i行放了j个皇帝,状态为k的方案. 那么首先预处理出所有可行的方案,以及两两可以相互转移的答案. 从b状态转移到a状态就是 :\(f[i][j][a] += f[i - ...
- Java开发者的Python快速进修指南:异常捕获
在之前的学习中,我们已经讲解了函数和控制流等基本概念.然而,在接触实际业务时,你会发现异常捕获也是必不可少的一部分,因为在Java编程中,异常处理是不可或缺的.Python的异常捕获与Java的异常捕 ...
- 新手VSCode配置C++20
最近买了本C++20的书,想要自己配置下在VScode的环境 例子代码: #include <iostream> #include <format> int main() { ...
- 【Codeforces Global Round 12】 C2 - Errich-Tac-Toe题解(思维)
题面 题目要求不能有有三个连续相同的'X'或'O',注意到这样的连续串它们的横纵坐标之和是连续变化的,考虑将它们按照横纵坐标之和对 \(3\)的模值分组,因为这样分组后相邻的三个相同字符就被分到了三个 ...