この文書は自動機械翻訳技術を使用して翻訳されています。 正確な翻訳を提供するように努めておりますが、翻訳された内容の完全性、正確性、信頼性については一切保証いたしません。 相違がある場合は、元の英語版 英語 が優先され、正式なテキストとなります。

Rancher Terraform

Rancher Terraform プロバイダー は、管理者が Terraform を使用して RKE2 ゲスト クラスターを作成および管理できるようにします。

展開

前提条件

  • Kubernetes クラスターは、Harvester VM の上に構築されています。

  • ゲスト Kubernetes ノードとして実行される Harvester VM は、同じネームスペース内にあります。

Rancher Terraform プロバイダーを使用してゲスト クラスターをデプロイする

  1. API キーを作成します。

    Rancher UI で、アカウント & API キー > API キーを作成 > 作成 に移動します。

    API キーを作成

    アクセス & シークレット キー

  2. Harvester クラスター ID を取得します。

    Rancher UI で、仮想化管理 > 管理 > 関連リソース > 管理クラスター名 に移動します。

    Harvester クラスター ID
  3. Harvester Cloud Provider と Harvester CSI ドライバーの kubeconfig を取得します。

    • UI

    • シェル

    Rancher UI で、仮想化管理 に移動します。リスト内の対象の Harvester クラスターを見つけて、 > KubeConfig をダウンロード を選択します。

    download kubeconfig harvester
    # Generate harvester cloud provider kubeconfig
    RANCHER_SERVER_URL="<RANCHER_SERVER_URL>" # Pure server URL like https://192.168.0.181:6443
    RANCHER_ACCESS_KEY="<RANCHER_ACCESS_KEY>"
    RANCHER_SECRET_KEY="<RANCHER_SECRET_KEY>"
    HARVESTER_CLUSTER_ID="<HARVESTER_CLUSTER_ID>"
    CLUSTER_NAME="rke2-demo"
    curl -k -X POST ${RANCHER_SERVER_URL}/k8s/clusters/${HARVESTER_CLUSTER_ID}/v1/harvester/kubeconfig \
    -H 'Content-Type: application/json' \
    -u ${RANCHER_ACCESS_KEY}:${RANCHER_SECRET_KEY} \
    -d '{"clusterRoleName": "harvesterhci.io:cloudprovider", "namespace": "default", "serviceAccountName": "'${CLUSTER_NAME}'"}' | xargs | sed 's/\\n/\n/g' > ${CLUSTER_NAME}-kubeconfig
  4. 次の内容が含まれる`provider.tf`ファイルを準備します:

     terraform {
     required_providers {
         rancher2 = {
             source  = "rancher/rancher2"
             version = "4.2.0"
             }
         }
     }
    
     # Configure the Rancher2 provider to admin
     provider "rancher2" {
         api_url    = "<api_url>" # API Endpoint on Account & API Keys page
         access_key = "<access_key>"
         secret_key = "<secret_key>"
         insecure   = true # Set to true if the Rancher server uses a self-signed certificate
     }
  5. 次の内容が含まれる`main.tf`ファイルを準備します:

     # Get imported harvester cluster info
     data "rancher2_cluster_v2" "harv" {
         name = "<harvester_cluster_name_in_rancher>"
     }
    
     # Create a new Cloud Credential for an imported Harvester cluster
     resource "rancher2_cloud_credential" "harv-cred" {
         name = "harv-cred"
         harvester_credential_config {
             cluster_id = data.rancher2_cluster_v2.harv.cluster_v1_id
             cluster_type = "imported"
             kubeconfig_content = data.rancher2_cluster_v2.harv.kube_config
         }
     }
    
     # Create a new rancher2 machine config v2 using harvester node_driver
     resource "rancher2_machine_config_v2" "rke2-machine" {
         generate_name = "rke2-machine"
         harvester_config {
             vm_namespace = "default"
             cpu_count = "2"
             memory_size = "4"
             disk_info = <<EOF
             {
                 "disks": [{
                     "imageName": "default/<vmimage-name>",
                     "size": 15,
                     "bootOrder": 1
                 }]
             }
             EOF
             network_info = <<EOF
             {
                 "interfaces": [{
                     "networkName": "default/<network-name>"
                 }]
             }
             EOF
             ssh_user = "<ssh_user>"
             user_data = <<EOF
             package_update: true
             packages:
             - qemu-guest-agent
             - iptables
             runcmd:
             - - systemctl
                 - enable
                 - '--now'
                 - qemu-guest-agent.service
             EOF
         }
     }
    
     resource "rancher2_cluster_v2" "rke2-demo" {
         name = "rke2-demo"
         kubernetes_version = "v1.28.10+rke2r1"
         rke_config {
             machine_pools {
                 name = "pool1"
                 cloud_credential_secret_name = rancher2_cloud_credential.harv-cred.id
                 control_plane_role = true
                 etcd_role = true
                 worker_role = true
                 quantity = 1
                 machine_config {
                     kind = rancher2_machine_config_v2.rke2-machine.kind
                     name = rancher2_machine_config_v2.rke2-machine.name
                 }
             }
    
             machine_selector_config {
                 config = yamlencode({
                     cloud-provider-config = file("${path.module}/rke2-demo-kubeconfig")
                     cloud-provider-name = "harvester"
                 })
             }
    
             machine_global_config = <<EOF
             cni: "calico"
             disable-kube-proxy: false
             etcd-expose-metrics: false
             EOF
    
             upgrade_strategy {
                 control_plane_concurrency = "1"
                 worker_concurrency = "1"
             }
    
             etcd {
                 snapshot_schedule_cron = "0 */5 * * *"
                 snapshot_retention = 5
             }
    
             chart_values = <<EOF
             harvester-cloud-provider:
             clusterName: rke2-demo
             cloudConfigPath: /var/lib/rancher/rke2/etc/config-files/cloud-provider-config
             EOF
         }
     }
  6. `terraform init`を実行します。

  7. `terraform apply`を実行します。