Dieses Dokument wurde mithilfe automatisierter maschineller Übersetzungstechnologie übersetzt. Wir bemühen uns um korrekte Übersetzungen, übernehmen jedoch keine Gewähr für die Vollständigkeit, Richtigkeit oder Zuverlässigkeit der übersetzten Inhalte. Im Falle von Abweichungen ist die englische Originalversion maßgebend und stellt den verbindlichen Text dar.

Rancher Terraform

Der Rancher Terraform Provider ermöglicht es Administratoren, RKE2-Gastcluster mit Terraform zu erstellen und zu verwalten.

Bereitstellung

Voraussetzungen

  • Der Kubernetes-Cluster basiert auf Harvester-VMs.

  • Die Harvester-VMs, die als Gast-Kubernetes-Knoten fungieren, befinden sich im selben Namespace.

Gastcluster mit dem Rancher Terraform Provider Bereitstellen

  1. Erstellen Sie einen API-Schlüssel.

    Gehen Sie in der Rancher-Benutzeroberfläche zu Account & API-Schlüssel > API-Schlüssel erstellen > Erstellen.

    API-Schlüssel erstellen

    Zugriffs- und Geheimschlüssel

  2. Erhalten Sie die Harvester-Cluster-ID.

    Gehen Sie in der Rancher-Benutzeroberfläche zu Virtualization Management > Manage > Related Resources > Mgmt Cluster Name.

    Harvester Cluster ID
  3. Erhalten Sie die kubeconfig für den Harvester Cloud Provider und den Harvester CSI-Treiber.

    • UI

    • Shell-

    Gehen Sie in der Rancher-Benutzeroberfläche zu Virtualization Management. Suchen Sie den Ziel-Harvester-Cluster in der Liste und wählen Sie dann > KubeConfig herunterladen aus.

    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. Bereiten Sie eine provider.tf-Datei mit folgendem Inhalt vor:

     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. Bereiten Sie eine main.tf-Datei mit folgendem Inhalt vor:

     # 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. Führen Sie terraform init.

  7. Führen Sie terraform apply.