使用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资源展示
关注公众号
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
网易有道 Qanything 开源:探索个性化问答的新纪元
网易有道最新开源力作:QAnything引擎。是基于RAG(Retrieval Augmentated Generation)的引擎,可以用于建立本地知识库做问答,解锁本土ChatGPT般的问答体验。☝ 「Qaynthing」是一个成熟的系统,有着准确率高、速度快、纯离线,易于使用(一键部署),占用资源小(只要16G显存即可)的特点。 目前,「Qaynthing」已经在有道的多个产品中落地应用,包括有道词典的文档问答,有道速读,以及有道课程业务(高中、少儿围棋等)的客服系统等,在有道合作的2B客户的场景中已经落地应用。 chatgpt的大模型能力很强,但其训练耗时很长,无法利用用户的私有数据,且有胡乱编造的幻觉问题。 与ChatGPT相比,有道自研的「Qaynthing」有自己的突出优势。它能够快速塞入各种格式的文档,如doc、ppt、excel、图片、pdf等,系统将在很短的时间内对这些文档进行处理并根据语义建立知识库,用户可以基于这样的知识库做各种问答。系统将理解用户的意图,在全库中寻找相关的内容,理解、提取用户关心的要点,并加以总结后呈现给用户。 「Qaynthing」包含的...
-
下一篇
这些常见的python编码习惯,你都会吗
本文分享自华为云社区《不得不知的十个常见PY编码习惯》,作者:码乐。 简介 语言在发展和变化,编码习惯也在发生改变。这里简单聊聊 17个python中常见的编码习惯或者风格。 1,可变数据结构: 注意在函数变量不要使用它 def foo(x=[]): x.append(1) print(x) >>>foo() [1] >>>foo() [1,1] >>>foo() [1,1,1] def foo(p=None): if p is None: p = [] p.append(1) print(p) foo() [1] foo([2,3,4]) [2,3,4,1] 1.1模块的循环导入 我们定义一个老王模块,再定义一个小李模块,相互导入时,将报错 # laowang.py import xiaoli count =4 def main(): wilma.pr('Hello') if __name__ == '__main__': main() # xiaoli....
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS关闭SELinux安全模块
- Dcoker安装(在线仓库),最新的服务器搭配容器使用
- CentOS8编译安装MySQL8.0.19
- Windows10,CentOS7,CentOS8安装Nodejs环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS7,8上快速安装Gitea,搭建Git服务器







微信收款码
支付宝收款码