看到Terraform可以替代kubectl管理k8s資源的生命周期,于是調研了下它的使用場景,并對比Terraform和Helm的區別
一.Terraform介紹Terraform是一款開源工具,出自HashiCorp公司,著名的Vagrant、Consul也出自于該公司。其主要作用是:讓用戶更輕松地管理、配置任何基礎架構,管理公有和私有云服務,也可以管理外部服務,如GitHub,Nomad。
區別于ansible和puppet等傳統的配置管理工具,Terraform趨向于更上層的一個組裝者。
Terraform使用模板來定義基礎設施,通過指令來實現資源創建/更新/銷毀的全生命周期管理,實現“基礎設施即代碼”,具體示例如下:
resource "alicloud_instance" "web" { # cn-beijing availability_zone = "cn-beijing-b" image_id = "ubuntu_140405_32_40G_cloudinit_20161115.vhd" system_disk_category = "cloud_ssd" instance_type = "ecs.n1.small" internet_charge_type = "PayByBandwidth" security_groups = ["${alicloud_security_group.tf_test_foo.id}"] instance_name = "test_foo" io_optimized = "optimized" }
這是阿里云的一個Terraform邏輯,執行terraform apply,就可以創建一個ECS實例
Terraform AliCloud provider: terraform-provider
二.Terraform支持K8S17年9月,Terraform官方宣布支持Kubernetes,提供Kubernetes應用程序的完整生命周期管理,包含Pod的創建、刪除以及副本控制等功能(通過調用API)。
以下是操作示例:
1.安裝kubernete集群當前k8s的installer列表,已經很多了...
使用Terraform在阿里云上安裝k8s集群:kubernetes-examples
2.創建應用:1.初始化k8s-provider
因為是調用apiserver,所以需要指定k8s集群的連接方式 provider "kubernetes" {} // 默認~/.kube/config 或: provider "kubernetes" { host = "https://104.196.242.174" client_certificate = "${file("~/.kube/client-cert.pem")}" client_key = "${file("~/.kube/client-key.pem")}" cluster_ca_certificate = "${file("~/.kube/cluster-ca-cert.pem")}" }
2.初始化terraform
$ terraform init Initializing provider plugins... - Downloading plugin for provider "kubernetes"... Terraform has been successfully initialized! You may now begin working with Terraform. Try running "terraform plan" to see any changes that are required for your infrastructure. All Terraform commands should now work. If you ever set or change modules or backend configuration for Terraform, rerun this command to reinitialize your working directory. If you forget, other commands will detect it and remind you to do so if necessary.
3.創建RC
// Terraform不支持Deployment // issue:https://github.com/terraform-providers/terraform-provider-kubernetes/issues/3 resource "kubernetes_replication_controller" "nginx" { metadata { name = "scalable-nginx-example" labels { App = "ScalableNginxExample" } } spec { replicas = 2 selector { App = "ScalableNginxExample" } template { container { image = "nginx:1.7.8" name = "example" port { container_port = 80 } resources { limits { cpu = "0.5" memory = "512Mi" } requests { cpu = "250m" memory = "50Mi" } } } } } }
4.創建service
resource "kubernetes_service" "nginx" { metadata { name = "nginx-example" } spec { selector { App = "${kubernetes_replication_controller.nginx.metadata.0.labels.App}" } port { port = 80 target_port = 80 } type = "LoadBalancer" } }
4.查看和執行
以上的步驟均為執行計劃的定義 執行操作:terraform apply 查看當前執行幾乎:terraform plan三.為什么使用Terraform
1.如果你的基礎設施(虛機、BLB等)是用Terraform來管理,那么你無需任何成本,可以用同樣的配置語言,來管理k8s集群
2.完整的生命周期管理
3.每個執行的同步反饋
4.關系圖譜:比如PVC和PV,如果PV創建失敗,則不會去執行PVC的流程
四.與Helm的對比如果是對K8S做上層的資源管理,大多數人會想到用Helm:參考
以下是Helm與Terraform都創建一個APP的操作對比:https://dzone.com/articles/te...
Terraform的優勢:
1.如果你的基礎設施已經用了Terraform,那么k8s集群管理也可以直接用這個,沒有學習成本
2.Terraform不需要在k8s集群中安裝任何組件,它通過APISERVER管理資源
Terraform的缺點:
1.對K8S的支持還比較弱,而且17年9月才開始支持,項目還在初期
2.嚴重依賴Terraform的基礎設施provider,比如外部磁盤、consul等沒有支持的話,k8s中無法使用
2.不支持beta資源,這個是硬傷,如:Deployment/StatefulSet/Daemonset不支持
3.沒有生態和市場的概念,比如helm中的倉庫,共享大家的應用倉庫
五.吐槽對于Terraform,不支持Deployment這一條,足以讓很多人放棄這個方案,而issue中對于這個的討論,也有點不太樂觀
必須在v1中的資源才會支持。對于Deployment大家只能用RC代替、或者kube exec加進去(尬
但對于kubernetes而言,beta階段的很多資源,已經被大家廣泛使用(Deployment、Daemonset),而且新版本的Deployment已經變成了apps/v1。
k8s各種版本(v1、apps/v1)的區別:參考文章
不知道后續Terraform有沒有更多的支持,觀望下~
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/32771.html
看到Terraform可以替代kubectl管理k8s資源的生命周期,于是調研了下它的使用場景,并對比Terraform和Helm的區別 一.Terraform介紹 Terraform是一款開源工具,出自HashiCorp公司,著名的Vagrant、Consul也出自于該公司。其主要作用是:讓用戶更輕松地管理、配置任何基礎架構,管理公有和私有云服務,也可以管理外部服務,如GitHub,Nomad。...
摘要:本文是介紹關于如何創建一個高效的集群,用于在上使用和的開發目的。單擊左下角的按鈕,忽略警告并強制訪問頁面。取而代之的,我們將在這里使用,在上創建代理,自動設置這些由服務器管理的集群。 Kubernetes是我主要學習的主題之一。我知道不光是我,還有一定數量的人愿意在工作之余進一步使用和研究它。 本文是介紹關于如何創建一個高效的Kubernetes集群,用于在Scaleway上使用Ter...
摘要:如何允許開發人員團隊在多云和混合云環境中編寫和實施一致的策略和授權。使用跨云創建一致的策略和流程開放策略代理是一種流行的工具,正是因為它與域無關。簡而言之,組織無需浪費任何時間對應用程序進行逆向工程以實現多云可移植性。OpenPolicy Agent如何允許開發人員團隊在多云和混合云環境中編寫和實施一致的策略和授權。 隨著多云戰略成為完全主流,公司和開發團隊必須弄清楚如何在云環境中創建...
摘要:是谷歌內部為解決這個問題所做的工作的產物,它為管理容器如何在整個集群中運行提供了一個單一的框架。在云中使用服務在許多云中作為標準問題項提供,盡管它在谷歌云平臺,中最突出地表現為本地特性。使用,運行控制平面,將重點部署將用于所需配置的容器。每一項創新都會帶來新的復雜性。容器使以一種方便的、可移植的形式打包和運行應用程序成為可能,但至少要說以規模管理容器是一個挑戰。Kubernetes是谷歌內部...
閱讀 2178·2023-04-25 19:06
閱讀 1375·2021-11-17 09:33
閱讀 1767·2019-08-30 15:53
閱讀 2582·2019-08-30 14:20
閱讀 3541·2019-08-29 12:58
閱讀 3534·2019-08-26 13:27
閱讀 501·2019-08-26 12:23
閱讀 485·2019-08-26 12:22