Terraform学习笔记
【摘要】 背景介绍Terraform是HashiCorp公司开源的工具,目前众多的云厂商支持使用terraform进行资源编排。Terraform采用插件的方式对接不同种类和厂家资源,涉及计算、存储、网络、数据库等。因为插件的可扩展性强,未来会支持更多种类的资源操作以及编排。目前我司也有相应的云服务插件。
背景介绍
Terraform是HashiCorp公司开源的工具,目前众多的云厂商支持使用terraform进行资源编排。Terraform采用插件的方式对接不同种类和厂家资源,涉及计算、存储、网络、数据库等。因为插件的可扩展性强,未来会支持更多种类的资源操作以及编排。目前我司也有相应的云服务插件。
跑通Kubernetes样例
1、下载terraform二进制(https://www.terraform.io/downloads.html),保存到$PATH目录。
2、Terraform拉取Plugins, 运行 terraform init;如果是内网运行可能遇到错误(x509: certificate signed by unknown authority),记得注册公司的根证书。
provider "kubernetes" {
config_path = "~/.kube/config"
}
3、编写需要部署的资源文件deploy.tf, 需要注意的Terraform与yaml语法略微有差别,文章后面有介绍。
resource "kubernetes_deployment" "test"
| | |
资源语法关键字 资源类型 Terraform能识别的资源名称
provider "kubernetes" {
config_path = "~/.kube/config"
}
resource "kubernetes_namespace" "test" {
metadata {
name = "nginx"
}
}
resource "kubernetes_deployment" "test" {
metadata {
name = "nginx"
namespace = kubernetes_namespace.test.metadata.0.name
}
spec {
replicas = 1
selector {
match_labels = {
app = "MyTestApp"
}
}
template {
metadata {
labels = {
app = "MyTestApp"
}
}
spec {
container {
image = "nginx"
name = "nginx-container"
port {
container_port = 80
}
}
}
}
}
}
4、运行terraform plan查看资源概览
# kubernetes_deployment.test:
resource "kubernetes_deployment" "test" {
id = "nginx/nginx"
wait_for_rollout = true
metadata {
generation = 1
name = "nginx"
namespace = "nginx"
resource_version = "138151370"
uid = "610b9bd5-da91-405e-9beb-5559a8031a5b"
}
spec {
min_ready_seconds = 0
paused = false
progress_deadline_seconds = 600
replicas = "1"
revision_history_limit = 10
selector {
match_labels = {
"app" = "MyTestApp"
}
}
strategy {
type = "RollingUpdate"
rolling_update {
max_surge = "25%"
max_unavailable = "25%"
}
}
template {
metadata {
generation = 0
labels = {
"app" = "MyTestApp"
}
}
spec {
active_deadline_seconds = 0
automount_service_account_token = true
dns_policy = "ClusterFirst"
enable_service_links = true
host_ipc = false
host_network = false
host_pid = false
restart_policy = "Always"
share_process_namespace = false
termination_grace_period_seconds = 30
container {
image = "nginx"
image_pull_policy = "Always"
name = "nginx-container"
stdin = false
stdin_once = false
termination_message_path = "/dev/termination-log"
termination_message_policy = "File"
tty = false
port {
container_port = 80
host_port = 0
protocol = "TCP"
}
resources {}
}
}
}
}
}
# kubernetes_namespace.test:
resource "kubernetes_namespace" "test" {
id = "nginx"
metadata {
generation = 0
name = "nginx"
resource_version = "138151336"
uid = "d9a012f4-f2e3-4af9-932f-073ada5fdefc"
}
}
5、执行terraform apply,部署Kuberntes资源,部署过程Terraform会持久化状态文件:terraform.tfstate(注意不要删除该文件)。
5、部署后,运行terraform show查看刚刚部署的资源。
# kubernetes_deployment.test:
resource "kubernetes_deployment" "test" {
id = "nginx/nginx"
wait_for_rollout = true
metadata {
...
}
spec {
...
}
}
# kubernetes_namespace.test:
resource "kubernetes_namespace" "test" {
id = "nginx"
metadata {
...
}
}
6、资源更新,更新deploy镜像,修改deploy.tf,运行terraform apply。
QA:
1、如何定义资源的先后关系?
2、如果引用其他资源的属性?
参考
1、Terraform语法,例如list、map格式。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)