睡睡念
終於要來試試看terraorm了,
現在公司好像很少全部k8s,
大部分還是用虛擬機,這樣變成還是要把terraform學一下。
正文
Terraform跟ansible的差異
差異點 | Terraform | Ansible |
---|---|---|
組態檔案管理 vs 組態 | Terraform使用組態檔案管理基礎設施,描述其狀態,而不是組態。 | Ansible基於主機的管理,直接組態基礎設施。 |
可變基礎設施 vs 不可變基礎設施 | Terraform以可變的方式管理基礎設施,可以對基礎設施進行更改。 | Ansible通常將基礎設施視為不可變的,一旦組態,它們就不再更改。 |
過程式的 vs 聲明式的 | Terraform是過程式的,會循序漸進地執行創建、修改和刪除操作。 | Ansible是聲明式的,描述了期望的最終狀態,而不是執行一系列步驟來實現它。 |
Master vs Masterless | Terraform通常使用單一主節點管理基礎設施狀態。 | Ansible可以在主節點和無主節點(即agentless)模式下運行。 |
Agent vs Agentless | Terraform不需要在目標基礎設施上安裝任何代理。 | Ansible需要在目標基礎設施上安裝一個代理。 |
成熟 vs 前沿 | Terraform是成熟的基礎設施自動化工具,已被廣泛使用。 | Ansible是一個新興的基礎設施自動化工具,並且正在積極發展。 |
綜合使用多種工具 | Terraform與其他工具整合,如Packer、Docker和AWS CloudFormation等。 | Ansible與其他工具整合,如Jenkins、Docker和Kubernetes等。 |
安裝
官網安裝最快了,上面有各個平臺的安裝方式。
詠唱
我先問了一下chatGPT怎麼學Terraform,然後給了我很標準的答案。
- 閱讀Terraform官方文檔,熟悉其基礎結構、功能和概念。
- 安裝Terraform,並學習如何使用它來創建基礎設施。
- 開始使用Terraform的示例項目,並嘗試使用它們創建簡單的基礎設施。
- 學習如何使用Terraform管理不同的基礎設施提供者,如AWS、Azure、Google Cloud等。
- 閱讀Terraform的模塊化文檔,並學習如何使用模塊化設計來管理複雜的基礎設施。
- 學習如何使用Terraform命令列工具來測試和調試基礎設施代碼。
- 研究Terraform的最佳實踐,包括如何管理機密、編寫可重用的代碼和設計可擴展的基礎設施。
我還是直接從實際案例來看好了,
Q: 幫我建立一個部署deployment的terrform程式碼
A:
# 定義Kubernetes provider
provider "kubernetes" {
config_context_cluster = "my-cluster"
}
# 定義deployment
resource "kubernetes_deployment" "my_deployment" {
metadata {
name = "my-deployment"
labels = {
app = "my-app"
}
}
spec {
replicas = 3
selector {
match_labels = {
app = "my-app"
}
}
template {
metadata {
labels = {
app = "my-app"
}
}
spec {
container {
image = "my-image:latest"
name = "my-container"
}
}
}
}
}
看了一下他提供的程式碼,有點問題,然後接著問
Q:resouce 宣告 kubernetes_deployment my_deployment 是要跟deployment的name一樣嗎
A:
是的,
kubernetes_deployment
的metadata
區塊中的name
屬性會定義Kubernetes deployment的名稱,您需要將其設定為與實際的deployment名稱相同。
然後在後續的對談過程中,發現另一個指令。
terraform import
再緊接著問,這個的功用是什麼。
A:
terraform import
是Terraform提供的一個命令,用於將現有的資源引入Terraform管理的狀態中。使用terraform import
可以讓Terraform瞭解現有資源的狀態,並允許你使用Terraform管理這些資源,並在需要時進行更改。
通常情況下,Terraform會從頭開始創建和管理所有資源。然而,在實際環境中,有時候會存在一些已經存在的資源,這些資源可能是手動創建的,或者是由其他工具創建的。這些資源可能包括Kubernetes deployment、AWS EC2實例、GCP虛擬機等等。在這種情況下,使用terraform import
命令可以將這些現有資源引入到Terraform管理的狀態中,以便Terraform能夠管理它們。
使用terraform import
命令時,需要指定要引入的資源的類型和ID,以及要對應到Terraform的哪個資源。Terraform將使用提供的資源類型和ID尋找現有資源的狀態,並將其對應到Terraform組態檔案中的相應資源。一旦資源成功被引入,Terraform就可以開始管理它們,並將它們的狀態保存到狀態檔案中,這樣就可以使用terraform plan
、terraform apply
等命令進行更改。
如果不知道怎麼用沒關係,
再問一下,
Q:該怎麼使用terraform import
A:
使用terraform import
命令引入現有資源到Terraform管理的狀態中,通常需要以下步驟:
- 在Terraform組態檔案中定義資源的組態,例如使用
kubernetes_deployment
定義Kubernetes deployment的組態。 - 執行
terraform init
初始化Terraform,以設置Terraform的工作目錄和相關外掛。 - 執行
terraform import
命令引入現有資源。例如,要引入Kubernetes deployment,可以使用以下命令:
terraform import kubernetes_deployment.systemservice deployment2k7
這裡的`kubernetes_deployment.systemservice`指的是在Terraform組態檔案中定義的Kubernetes deployment資源,`deployment2k7`則是現有Kubernetes deployment的名稱或ID。通過這樣的方式,Terraform就會將現有的Kubernetes deployment引入到Terraform管理的狀態中。
- 檢查Terraform的狀態,使用
terraform state list
命令可以列出Terraform目前管理的所有資源,可以確認引入的資源是否已經被成功管理。 - 更新Terraform組態檔案,通過
terraform plan
和terraform apply
命令對資源進行更改。當Terraform管理現有資源時,它會比較Terraform組態檔案和現有資源的狀態,並生成一個計劃,顯示要將資源帶到Terraform所需的更改。通過執行terraform apply
命令,Terraform就可以將這些更改應用到現有的資源中。
結論
光看沒有用,最重要的還是實作,
一開始沒碰terraform是不知道寫壞了,會不會影響線上的服務,
現在我能夠先import,看目前服務建設的程式後,再來修改。
感想
實作後完全崩掉,有很多東西還是要從頭開始看一下。
像是, terraform 的backend ,跟tfstate 這些觀念。
上面也有提到引入資源,但實際上可能跟你想得不太一樣,
引入後是變成一個tfstate,而不是tf,
那tf 跟 tfstate又有什麼不同呢?
我們還是看下一篇,從頭來過吧。
ref.
0 意見:
張貼留言