我最新最全的文章都在 南瓜慢說 www.pkslow.com ,歡迎大家來喝茶!
簡介
最近工作中用到了Terraform,權當學習記錄一下,希望能幫助到其它人。
Terraform系列文章如下:
Terraform入門教程,示例展示管理Docker和Kubernetes資源
Terraform插件Provider管理,搜索、定義、下載
Terraform模塊Module管理,聚合資源的抽取與復用
Provider即插件
Provider可理解為插件,Terraform是支持多雲基礎設施編排的,但光terraform
這個程序只是核心功能,對於不同的雲平台,需要不同的Provider來支持。這樣可以非常靈活的添加平台,需要AWS的部署,就添加AWS的Provider;需要Kubernetes,就添加Kubernetes的功能。
其實一個Provider就一個程序,它是一個獨立的進程,terrafrom會跟Provider通信,以完成所有功能。
搜索Provider
Provider分為四種:
- Official:官方提供的;
- Verified:官方認證的;
- Community: 社區提供的;
- Custom: 自定義的;
我們可以到( https://registry.terraform.io/browse/providers )去搜索,這里已經提供了極其豐富的Provider,基本是夠用的了。
而且每個Provider都提供了很好的文檔說明,如GCP:https://registry.terraform.io/providers/hashicorp/google/latest/docs
˛
定義Provider
我們可以定義需要用到哪些Provider和對應的版本,新建一個versions.tf文件,內容如下:
terraform {
required_version = "= v0.15.4"
required_providers {
kubernetes = {
source = "hashicorp/kubernetes"
version = "= 2.2.0"
}
docker = {
source = "kreuzwerker/docker"
version = "= 2.12.2"
}
}
}
版本號可以用=
或者>=
等,靈活方便。
下載Provider
當我們定義好了Provider和對應的版本號后,就可以通過terraform init
命令下載了。如下:
$ terraform init
Initializing provider plugins...
- Finding hashicorp/kubernetes versions matching "2.2.0"...
- Finding kreuzwerker/docker versions matching "2.12.2"...
- Installing kreuzwerker/docker v2.12.2...
- Installed kreuzwerker/docker v2.12.2 (self-signed, key ID 24E54F214569A8A5)
- Installing hashicorp/kubernetes v2.2.0...
- Installed hashicorp/kubernetes v2.2.0 (signed by HashiCorp)
這里有兩個問題需要解決:
(1)它從哪里下載?
(2)它下載到什么地方去了?
對於Provider的定義有一個source
值,格式如下:
[<HOSTNAME>]<NAMESPACE>/<TYPE>
HostName是選填的,默認是官方的 registry.terraform.io
,所以它是從這個地址去下載的,當然也可以自建Terraform倉庫,特別是許多大公司,不會直接連外網。
那它會下載到哪里呢?以版本Terraform v0.15.4 on darwin_amd64
為例,它會下載在項目當前目錄下:
$ tree -a
.
├── .terraform
│ ├── modules
│ │ └── modules.json
│ └── providers
│ └── registry.terraform.io
│ ├── hashicorp
│ │ └── kubernetes
│ │ └── 2.2.0
│ │ └── darwin_amd64
│ │ └── terraform-provider-kubernetes_v2.2.0_x5
│ └── kreuzwerker
│ └── docker
│ └── 2.12.2
│ └── darwin_amd64
│ ├── CHANGELOG.md
│ ├── LICENSE
│ ├── README.md
│ └── terraform-provider-docker_v2.12.2
├── .terraform.lock.hcl
├── main.tf
├── nginx
│ ├── main.tf
│ └── variables.tf
└── versions.tf
13 directories, 11 files
但如果每個項目都要單獨下載一次,那可是太麻煩了。我們可以把所有插件都放在同一個地方,然后通過-plugin-dir
來指定,如下:
$ rm -rf ./.terraform*
$ terraform init -plugin-dir=/Users/larry/Software/terraform/plugins
Initializing provider plugins...
- Finding kreuzwerker/docker versions matching "2.12.2"...
- Finding hashicorp/kubernetes versions matching "2.2.0"...
- Installing kreuzwerker/docker v2.12.2...
- Installed kreuzwerker/docker v2.12.2 (unauthenticated)
- Installing hashicorp/kubernetes v2.2.0...
- Installed hashicorp/kubernetes v2.2.0 (unauthenticated)
$ tree -a
.
├── .terraform
│ ├── modules
│ │ └── modules.json
│ ├── plugin_path
│ └── providers
│ └── registry.terraform.io
│ ├── hashicorp
│ │ └── kubernetes
│ │ └── 2.2.0
│ │ └── darwin_amd64 -> /Users/larry/Software/terraform/plugins/registry.terraform.io/hashicorp/kubernetes/2.2.0/darwin_amd64
│ └── kreuzwerker
│ └── docker
│ └── 2.12.2
│ └── darwin_amd64 -> /Users/larry/Software/terraform/plugins/registry.terraform.io/kreuzwerker/docker/2.12.2/darwin_amd64
├── .terraform.lock.hcl
├── main.tf
├── nginx
│ ├── main.tf
│ └── variables.tf
└── versions.tf
13 directories, 7 files
可以看到它只是在當前目錄創建了一個鏈接到指定plugin目錄的Provider上。
如果想要自己手動下載,可以到這個網址:https://releases.hashicorp.com/
其實工作時用到的Provider就幾個,直接下載好放在plugin
目錄即可。
歡迎關注微信公眾號<南瓜慢說>,將持續為你更新...
多讀書,多分享;多寫作,多整理。