Terraform で Kubernetes リソースを作る際にリソースタイプがわからなくなったら読むエントリ

2023.01.16

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは!AWS事業本部コンサルティング部のたかくに(@takakuni_)です。

皆さん、Terraform で Kubernetes をデプロイしていますか?

Kubernetes の勉強がてら「リソースをTerraform でデプロイしてみよう!」と意気込んだものの、リソースタイプの使い分けで詰まったのでブログにしてみることにしました。

先に結論

  • 新規利用はサフィックスがついている方を利用しましょう
  • Kubernetes Provider v2.7.0 以降に標準リソースもサフィックスが付与された
    • Kubernetes API バージョンとリソース名を合わせる意図
  • サフィックスがないリソースは削除予定
    • Teraform Kubernetes Provider v3.0.0 から非推奨予定
    • Teraform Kubernetes Provider v4.0.0 から削除予定

サフィックスの有無

私はサフィックスの有無で、どちらのリソースを利用したらいいのか迷いました。例えば、Terraform で Pod をデプロイしようと思います。

その際に利用可能なリソースは Kubernetes Provider v2.16.1 だと、「kubernetes_pod」と「kubernetes_pod_v1」があります。

上記のドキュメントを確認すると、リソースタイプ以外の違いがありません。

ではどのように使い分けるのでしょうか。

ドキュメントに書いてあった

こちらのドキュメントにサフィックス追加の経緯が書いてありました。

今後は Kubernetes API バージョンのサフィックスが記載されている方(今回だとkubernetes_pod_v1)を選ぶ必要があるみたいです。

Versioned resource names

ドキュメントを抜粋してご紹介します。

いつから始まったのか

Kubernetes Provider v2.7.0 から標準で提供されているリソースも含めて、サフィックスが追記されていました。

From provider version v2.7.0 onwards Terraform resources and data sources that cover the standard set of Kubernetes APIs will be suffixed with their corresponding Kubernetes API version (e.g v1, v2, v2beta1). The existing resources in the provider will continue to be maintained as is.

Version suffixes

意図

Kubernetes API バージョンとリソース名を合わせる意図があるみたいです。

確かにスキーマが異なるリソースを同一リソースタイプで管理するのは苦労しそうですね...(とても納得です。)

We are doing this to make it easier to use and maintain the provider, and to promote long-term stability and backwards compatibility with resources in the Kubernetes API as they reach maturity, and as the provider sees wider adoption.

Motivation

今後、Kubernetes API により近いバージョン管理されたスキーマのセットが提供予定のため期待ですね!

Ultimately, we plan to completely automate the generation of Terraform resources to cover the core Kubernetes API. Having a set of versioned schemas that more closely matches the Kubernetes API definition is going to make this easier to achieve and will enable us to add built-in support for new API versions much faster.

サフィックスがないリソースはどうなるのか

Kubernetes Provider v3.0.0まではサポートと保守が継続されますが、非推奨とマークされるそうです。

Kubernetes Provider v4.0.0 以降では削除される予定のため注意が必要です。

These resources will continue to be supported and maintained as is through to v3.0.0 of the provider, at which point they will be marked as deprecated and then subsequently removed in v4.0.0.

What will happen to the resources without versions in the name?

まとめ

以上、「Terraform で Kubernetes リソースを作る際にリソースタイプがわからなくなったら読むエントリ」でした!

Terraform を活用して Kubernetes をどんどん勉強していこうと思います!

この記事がどなたかの参考になれば幸いです。

AWS事業本部コンサルティング部のたかくに(@takakuni_)でした!