Terraform: Kubernetesクラスタの作成
このチュートリアルでは、Terraformを使用して、Oracle Cloud InfrastructureアカウントにKubernetesクラスタを設定します。
主なタスクは:
- Terraformの開始チュートリアルから既存のスクリプトをコピーします。
- 既存のスクリプトを編集して再利用します。
- Kubernetesクラスタ用の新しいスクリプトを記述します。
その他の情報については、次のWebサイトを参照してください。
開始する前に
このチュートリアルを正常に実行するには、次が必要です:
- 有料Oracle Cloud Infrastructureアカウント。Oracle Cloud Infrastructureへのサインアップを参照してください。
- MacOS、LinuxまたはWindowsコンピュータ。
- Terraformチュートリアル・リソース:
- 次のすべてのステップを実行します:
- 作成したスクリプトを次のディレクトリに保持します:
$HOME/tf-simple-infrastructure/
1. 必要な情報の収集
ノード・プール内のコンピュート・インスタンスの情報を収集します。
VM.Standard2.1
を使用します。-
<node-shape>
,VM.Standard2.1
をメモ帳に保存します。 - シェイプの詳細は、VM Standardシェイプを参照してください。
2. 既存のスクリプトのコピー
Terraform: 単純なインフラストラクチャの設定チュートリアルのスクリプトをコピーします。次に、コンピュート・インスタンスに関連するスクリプトおよび出力を削除します。次の項では、コンピュート・インスタンスを使用してノード・プールを宣言します。
3. スクリプトの作成
3つのスクリプトを作成します: 1つはクラスタ用、もう1つはノード・プール用、もう1つは出力の印刷用です。
- Oracle Cloud Infrastructureプロバイダに移動します。
- 左側のナビゲーション・フィルタで、
container engine
と入力します。 - 「コンテナ・エンジン」で、「リソース」に移動し、「oci_containerengine_cluster」をクリックします。
- ページのタイトルからリソース・タイプを検索します:
- タイプ:
oci_containerengine_cluster
- タイプ:
- 引数リファレンスの項で、(必須)というラベルの付いたすべての引数(入力)を見つけます
- compartment_id
- kubernetes_version
- name
- vcn_id
- リソース・ブロックを作成します:
- キーワード
resource
を使用してリソース・ブロックを宣言します - リソース・タイプ
"oci_containerengine_cluster"
のラベルを追加します - ローカル名のラベルを追加します(任意):
- ラベルには、文字、数字、アンダースコア(_)およびハイフン(-)を含めることができます。最初の文字は数字にできません。
- 例:
"oke-cluster"
- コード・ブロック内で、必要な引数の値を指定します。デフォルト値はありません:
- compartment_id:
compartment.tf
で宣言されているコンパートメントを指します:oci_identity_compartment.tf-compartment.id
- kubernetes_version: このチュートリアルでは、バージョン
v1.21.5
を使用します。最新バージョンのコンソールで「クイック作成」オプションを選択できます。 - name: 任意の名前を割り当てます。
- vcn_id:
vcn-module.tf
で宣言されているコンパートメントを指します:module.vcn.vcn_id
- compartment_id:
- 次のオプションの引数に値を指定して、デフォルト値をオーバーライドします。
- add_ons: 次の引数に
true
またはfalse
を割り当てます:- is_kubernetes_dashboard_enabled
- is_tiller_enabled
- kubernetes_network_config: CIDRブロックを次の引数の文字列として割り当てます:
pods_cidr
services_cidr
ノート
ポッドのCIDRブロックは、ワーカー・ノードおよびロード・バランサ・サブネットのCIDRブロックと重複できません。
KubernetesサービスのCIDRブロックは、VCN CIDRブロックと重複できません。
このチュートリアルのサンプル・コードでは、コンソールのクイック作成オプションと同じCIDRブロックを使用します。
詳細は、CIDRブロックおよびContainer Engine for Kubernetesを参照してください。
- service_lb_subnet_ids:
public-subnet.tf
で宣言したパブリック・サブネットを割り当てますノート
引数service_lb_subnet_idsは、サブネットIDのリストを受け入れます:- サブネットが1つある場合でも、大カッコを使用してリストを示します。
- 例:
[oci_core_subnet.vcn-public-subnet.id]
- add_ons: 次の引数に
- キーワード
- Oracle Cloud Infrastructureプロバイダに移動します。
- 左側のナビゲーション・フィルタで、
container engine
と入力します。 - 「コンテナ・エンジン」で、「リソース」に移動し、「oci_containerengine_node_pool」をクリックします。
- ページのタイトルからリソース・タイプを検索します:
- タイプ:
oci_containerengine_node_pool
- タイプ:
- 引数リファレンスの項で、(必須)というラベルの付いたすべての引数(入力)を見つけます
- cluster_id
- compartment_id
- kubernetes_version
- name
- node_config_details
- placement_configs
- availability_domain
- subnet_id
- placement_configs
- node_shape
- node_source_details
- image_id
- source_type
- リソース・ブロックを作成します:
- キーワード
resource
を使用してリソース・ブロックを宣言します - リソース・タイプのラベルを追加します:
"oci_containerengine_node_pool"
- ローカル名のラベルを追加します(任意):
- ラベルには、文字、数字、アンダースコア(_)およびハイフン(-)を含めることができます。最初の文字は数字にできません。例:
"oke-node-pool"
- ラベルには、文字、数字、アンダースコア(_)およびハイフン(-)を含めることができます。最初の文字は数字にできません。例:
- コード・ブロック内で、必要な引数の値を指定します:
- cluster_id:
cluster.tf
で宣言されているクラスタを指定します:oci_containerengine_cluster.oke-cluster.id
- compartment_id
compartment.tf
で宣言されているコンパートメントを指します:oci_identity_compartment.tf-compartment.id
- kubernetes_version: このチュートリアルでは、コンソールのクラスタの作成ウィザードと同じバージョンを使用します。
- name: 任意の名前を割り当てます。クラスタの作成ウィザードでは、
pool1
という名前を使用します。 - node_shape: 1項で収集した情報を入力します。
- node_source_details:
- image_id: 1項で収集した情報を入力します。
- source_type:
"image"
に設定します。
- cluster_id:
- 次のオプションの引数に値を指定して、デフォルト値をオーバーライドします。
- initial_node_labels: ノードにキー/値のペアを割り当てます。
- key: 任意のキーを割り当てます。コンソールの「クイック作成」オプションでは、キー
"name"
が作成されます。 - value: キーに値を割り当てます。コンソールの「クイック作成」オプションは、
"<your-cluster-name>"
を"name"
キーに割り当てます。
- key: 任意のキーを割り当てます。コンソールの「クイック作成」オプションでは、キー
- initial_node_labels: ノードにキー/値のペアを割り当てます。
- キーワード
この項では、クラスタおよびノード・プールの出力を宣言します。
- クラスタの出力については、リソース: oci_containerengine_clusterページの属性リファレンスを参照してください。
- ノード・プールの出力については、リソース: oci_containerengine_node_poolページの属性リファレンスを参照してください。
リスト・アイテムの出力
- 通常、リスト属性は複数形(末尾はs)です。
- ノード・プールのリスト属性の例:
node_config_details
- リスト内のすべての属性を出力するには、リスト属性を単独でカッコなしで使用します。
- 例:
output "node-configuration-details"{ value = oci_containerengine_node_pool.oke-node-pool.node_config_details }
サンプル出力:
node-configuration-details = [ { "placement_configs" = [ { "availability_domain" = "QnsC:US-ASHBURN-AD-1" "subnet_id" = "ocid1.subnet.xxx" }, { "availability_domain" = "QnsC:US-ASHBURN-AD-2" "subnet_id" = "ocid1.subnet.xxx" }, { "availability_domain" = "QnsC:US-ASHBURN-AD-3" "subnet_id" = "ocid1.subnet.xxx" }, ] "size" = 3 }, ]
- リストからアイテムを出力またはコールするには:
- 次のフォーマットを使用します:
<list-attribute-name>[index].<attribute-from-list>
-
[index]
を次のように置き換えます:- 1つ目のアイテムの場合は[0]。
- 2つ目のアイテムの場合は[1]。
- ...
- (n+1)個目のアイテムの場合は[n]。
- 次のフォーマットを使用します:
- 例:
size
属性の値:output "node-size" { value = oci_containerengine_node_pool.oke-node-pool.node_config_details[0].size }
4. スクリプトの実行
Terraformスクリプトを実行して、コンパートメント、仮想クラウド・ネットワーク、Kubernetesクラスタおよびノード・プールを作成します。
- Terraformスクリプトを実行します:
terraform apply
- 確認を求められた場合は、作成するリソースに
yes
を入力します。 - クラスタの作成には15分以上かかる場合があります。Terraformによってリソースが作成されたら、ターミナルで出力を確認します。
Apply complete! Resources: 14 added, 0 changed, 0 destroyed. Outputs: ... cluster-OCID = ocid1.cluster.xxx cluster-kubernetes-version = "v1.21.5" cluster-name = <your-cluster-name> cluster-state = ACTIVE ... node-pool-OCID = ocid1.nodepool.xxx node-pool-kubernetes-version = "v1.21.5" node-pool-name = "pool1" node-shape = "VM.Standard2.1" node-size = 3 ...
- 401エラー - (Service error:NotAuthenticated):
- 次のいずれかの値が正しくありません:
- テナンシOCID
- ユーザーOCID
- フィンガープリント
- RSA秘密キー(パスまたはキー)
- 次のいずれかの値が正しくありません:
- そのようなホストはありません:
- 次の値が正しくありません:
- リージョン識別子
- 次の値が正しくありません:
参照:
次の手順
完了しました。Terraformを使用して、Oracle Cloud InfrastructureアカウントにKubernetesクラスタが作成されました。
Kubernetesクラスタができたので、Kubernetesチュートリアルを試してみます。
Oracle製品を使用した開発の詳細を確認するには、次のサイトを参照してください: