Kubernetes-Cluster erstellen

Mit Terraform können Sie ein Kubernetes-Cluster in Ihrem Oracle Cloud Infrastructure-Account einrichten.

Zu den wichtigsten Aufgaben gehören:

  • Kopieren Sie Ihre vorhandenen Skripte aus Terraform-Tutorials.
  • Bearbeiten Sie vorhandene Skripte für eine Wiederverwendung.
  • Schreiben Sie neue Skripte für ein Kubernetes-Cluster.
Ein Diagramm der Komponenten, die zum Erstellen eines Kubernetes-Clusters mit Terraform erforderlich sind. Der Benutzer stellt von einer lokalen Linux-Umgebung aus eine Verbindung zu einem Oracle Cloud Infrastructure-Account her und erstellt ein Cluster. Die Clustererstellung umfasst das Erstellen von Netzwerkressourcen. Die Netzwerkressourcen umfassen ein privates regionales Subnetz für Worker-Knoten. Diese Knoten sind Compute-Knoten. Außerdem wurde ein öffentliches regionales Subnetz für Load Balancer erstellt. In diesem Beispiel umfasst jedes regionale Subnetz drei Availability-Domains: AD1, AD2 und AD3. Das öffentliche Subnetz ist über einen bidirektionalen Pfeil mit dem Internet verbunden. Das private Subnetz verfügt über zwei unidirektionale, ausgehende Pfeile: einen zum Internet und einen zum Oracle Services Network.

Weitere Informationen finden Sie unter:

Bevor Sie beginnen

Für eine erfolgreiche Ausführung des Tutorials benötigen Sie Folgendes:

Anforderungen

1. Erforderliche Informationen erfassen

Erfassen Sie Informationen für die Compute-Instanzen im Knotenpool.

Knotenausprägung abrufen
In diesem Tutorial wird VM.Standard2.1 für die Compute-Instanzen im Knotenpool verwendet.
Speichern Sie <node-shape> VM.Standard2.1 in Notepad.
Weitere Informationen zur Ausprägung finden Sie unter Standardausprägungen.
Image-ID abrufen
  1. Suchen Sie in der Navigationsleiste der Konsole Ihre Region.
  2. Gehen Sie zu den Versionshinweisen des Image.
  3. Wählen Sie Oracle Linux 7.x aus.
  4. Wählen Sie das neueste Oracle Linux 7.x-<date> aus. Wählen Sie keine Images mit dem Label Gen2-GPU aus.
  5. Kopieren Sie die ID des Images für Ihre Region.
  6. Speichern Sie die <image-ocid> in Notepad.
    Hinweis

    Stellen Sie sicher, dass Sie eine kommerzielle OCID ohne die Zeichenfolge gov auswählen.

2. Vorhandene Skripte kopieren

Kopieren Sie Skripte, die unter Einfache Infrastruktur mit OCI Terraform einrichten erstellt wurden. Entfernen Sie dann die zur Compute-Instanz zugehörigen Skripte und Ausgaben. Im nächsten Abschnitt deklarieren Sie einen Knotenpool mit Compute-Instanzen.

Skripte kopieren
  1. Erstellen Sie im Verzeichnis $HOME ein Verzeichnis mit dem Namen tf-cluster, und wechseln Sie zu diesem Verzeichnis.
    mkdir tf-cluster
    cd tf-cluster
  2. Kopieren Sie alle Dateien, die auf .tf enden, aus dem Verzeichnis tf-simple-infrastructure.
    cp ../tf-simple-infrastructure/*.tf .
  3. Stellen Sie sicher, dass sich die folgenden Dateien in Ihrem Verzeichnis befinden.
    ls
    availability-domains.tf
    compartment.tf
    compute.tf
    outputs.tf
    private-security-list.tf
    private-subnet.tf
    provider.tf
    public-security-list.tf
    public-subnet.tf
    vcn-module.tf
    Hinweis

    Kopieren Sie nicht die Statusdateien (terraform.tfstate oder terraform.tfstate.backup). Diese Dateien enthalten den Ressourcenstatus ihres aktuellen Verzeichnisses. Nachdem Sie die Skripte in diesem neuen Verzeichnis ausgeführt haben, erhalten Sie eine neue Statusdatei.
Irrelevante Skripte entfernen
  1. Entfernen Sie die Datei compute.tf aus dem Verzeichnis tf-cluster.
    rm compute.tf
  2. Entfernen Sie in der Datei outputs.tf alle Ausgaben für die Compute-Instanz.
    
    
    # Outputs for compute instance
    
    output "public-ip-for-compute-instance" {
      value = oci_core_instance.ubuntu_instance.public_ip
    }
    output "instance-name" {
      value = oci_core_instance.ubuntu_instance.display_name
    }
    
    output "instance-OCID" {
      value = oci_core_instance.ubuntu_instance.id
    }
    
    output "instance-region" {
      value = oci_core_instance.ubuntu_instance.region
    }
    
    output "instance-shape" {
      value = oci_core_instance.ubuntu_instance.shape
    }
    
    output "instance-state" {
      value = oci_core_instance.ubuntu_instance.state
    }
    
    output "instance-OCPUs" {
      value = oci_core_instance.ubuntu_instance.shape_config[0].ocpus
    }
    
    output "instance-memory-in-GBs" {
      value = oci_core_instance.ubuntu_instance.shape_config[0].memory_in_gbs
    }
    
    output "time-created" {
      value = oci_core_instance.ubuntu_instance.time_created
    }

3. Skripte erstellen

Erstellen Sie Skripte für ein Cluster, einen Knotenpool und zum Drucken von Ausgaben.

Cluster deklarieren
  1. Erstellen Sie eine Datei mit dem Namen cluster.tf.
  2. Fügen Sie den folgenden Code zu cluster.tf hinzu.
    • Ersetzen Sie <your-cluster-name> durch einen Namen Ihrer Wahl. Beispiel: tf-cluster.
    # Source from https://registry.terraform.io/providers/oracle/oci/latest/docs/resources/containerengine_cluster
    
    resource "oci_containerengine_cluster" "oke-cluster" {
        # Required
        compartment_id = oci_identity_compartment.tf-compartment.id
        kubernetes_version = "v1.21.5"
        name = "<your-cluster-name>"
        vcn_id = module.vcn.vcn_id
    
        # Optional
        options {
            add_ons{
                is_kubernetes_dashboard_enabled = false
                is_tiller_enabled = false
            }
            kubernetes_network_config {
                pods_cidr = "10.244.0.0/16"
                services_cidr = "10.96.0.0/16"
            }
            service_lb_subnet_ids = [oci_core_subnet.vcn-public-subnet.id]
        }  
    }
  3. Speichern Sie die Datei cluster.tf.
Erläuterung

Suchen Sie unter Argumentreferenz (oci_containerengine_cluster) alle erforderlichen Argumente:

  • compartment_id
  • kubernetes_version
  • Name
  • vcn_id
So navigieren Sie zu dieser URL

So navigieren Sie zur Argumentreferenz (oci_containerengine_cluster):

  1. Gehen Sie zu Oracle Cloud Infrastructure-Provider.
  2. Geben Sie im Feld Filter oben links container engine ein.

    Die Ergebnisse werden für Datenquellen und Ressourcen zurückgegeben.

  3. Wählen Sie unter Container Engine unter Ressourcen die Option oci_containerengine_cluster aus.
  4. Wählen Sie Argumentreferenz aus.

    Die Argumentreferenz wird geöffnet.

Erstellen Sie einen Ressourcenblock:

  • Deklarieren Sie einen Ressourcenblock mit dem Schlüsselwort: resource
  • Hinzufügen eines Labels für den Typ der Ressource: "oci_containerengine_cluster"
  • Fügen Sie ein Label für einen lokalen Namen (Ihrer Wahl) hinzu:
    • Das Label darf Buchstaben, Ziffern, Unterpunkte (_) und Bindestriche (-) enthalten. Das erste Zeichen darf keine Ziffer sein.
    • Beispiel: "oke-cluster"
  • Geben Sie im Codeblock einen Wert für die Argumente mit dem Label "Erforderlich" ein:
    • compartment_id: Verweisen Sie auf das in compartment.tf deklarierte Compartment: oci_identity_compartment.tf-compartment.id
    • kubernetes_version: In diesem Tutorial wird Version v1.21.5 verwendet. Über die Option Schnellerstellung in der Konsole können Sie die neueste Version abrufen.
    • name: Weisen Sie einen Namen Ihrer Wahl zu.
    • vcn_id: Verweisen Sie auf das in vcn-module.tf deklarierte Compartment: module.vcn.vcn_id

    Ein erforderliches Argument hat keinen Standardwert.

  • Geben Sie Werte für die folgenden optionalen Argumente an, um deren Standardwerte zu überschreiben.
    • add_ons: Weisen Sie den folgenden Argumenten die Werte true oder false zu:
      • is_kubernetes_dashboard_enabled
      • is_tiller_enabled
    • kubernetes_network_config: Weisen Sie den folgenden Argumenten einen CIDR-Block als Zeichenfolge zu:
      • pods_cidr
      • services_cidr
      Hinweis

      Der CIDR-Block für die Pods darf sich nicht mit den CIDR-Blöcken des Worker-Knotens und des Load-Balancer-Subnetzes überlappen.

      Der CIDR-Block für den Kubernetes-Service darf sich nicht mit dem VCN-CIDR-Block überschneiden.

      Der Beispielcode in diesem Tutorial verwendet dieselben CIDR-Blöcke wie die Option Schnellerstellung in der Konsole.

      Weitere Erläuterungen finden Sie unter CIDR-Blöcke und Kubernetes-Engine (OKE).

    • service_lb_subnet_ids: Weisen Sie das in public-subnet.tf deklarierte öffentliche Subnetz zu.
      Hinweis

      Das Argument service_lb_subnet_ids akzeptiert eine Liste der Subnetz-IDs:
      • Auch wenn Sie nur ein Subnetz haben, verwenden Sie eckige Klammern, um eine Liste zu bezeichnen.
      • Beispiel: [oci_core_subnet.vcn-public-subnet.id]
Knotenpool deklarieren
  1. Erstellen Sie eine Datei mit dem Namen node-pool.tf.
  2. Fügen Sie folgenden Code zu node-pool.tf hinzu.
    • Ersetzen Sie die folgenden Felder durch die Informationen, die Sie im ersten Abschnitt erfasst haben:
      • <node-shape> durch VM.Standard2.1
      • <image-ocid>
    • Ersetzen Sie das folgende Feld durch den Namen, den Sie beim Deklarieren eines Clusters gewählt haben:
      • <your-cluster-name>
    # Source from https://registry.terraform.io/providers/oracle/oci/latest/docs/resources/containerengine_node_pool
    
    resource "oci_containerengine_node_pool" "oke-node-pool" {
        # Required
        cluster_id = oci_containerengine_cluster.oke-cluster.id
        compartment_id = oci_identity_compartment.tf-compartment.id
        kubernetes_version = "v1.21.5"
        name = "pool1"
        node_config_details{
            placement_configs{
                availability_domain = data.oci_identity_availability_domains.ads.availability_domains[0].name
                subnet_id = oci_core_subnet.vcn-private-subnet.id
            } 
            placement_configs{
                availability_domain = data.oci_identity_availability_domains.ads.availability_domains[1].name
                subnet_id = oci_core_subnet.vcn-private-subnet.id
            }
             placement_configs{
                availability_domain = data.oci_identity_availability_domains.ads.availability_domains[2].name
                subnet_id = oci_core_subnet.vcn-private-subnet.id
            }
            size = 3
        }
        node_shape = "<node-shape>"
    
        # Using image Oracle-Linux-7.x-<date>
        # Find image OCID for your region from https://docs.oracle.com/iaas/images/ 
        node_source_details {
             image_id = "<image-ocid>"
             source_type = "image"
        }
     
        # Optional
        initial_node_labels {
            key = "name"
            value = "<your-cluster-name>"
        }    
    }
  3. Speichern Sie die Datei node-pool.tf.
Erläuterung

Suchen Sie unter Alarmreferenz (oci_containerengine_node_pool) nach allen erforderlichen Argumenten:

  • cluster_id
  • compartment_id
  • kubernetes_version
  • Name
  • node_config_details
    • placement_configs
      • availability_domain
      • subnet_id
  • node_shape
  • node_source_details
    • image_id
    • source_type
So navigieren Sie zu dieser URL

So navigieren Sie zu Alarmreferenz (oci_containerengine_node_pool):

  1. Gehen Sie zu Oracle Cloud Infrastructure-Provider.
  2. Geben Sie im Feld Filter oben links container engine ein.

    Die Ergebnisse werden für Datenquellen und Ressourcen zurückgegeben.

  3. Wählen Sie unter Container Engine unter Ressourcen die Option oci_containerengine_node_pool aus.
  4. Wählen Sie Argumentreferenz aus.

    Die Argumentreferenz wird geöffnet.

Erstellen Sie einen Ressourcenblock:

  • Deklarieren Sie einen Ressourcenblock mit dem Schlüsselwort: resource
  • Fügen Sie ein Label für den Typ der Ressource hinzu:
    "oci_containerengine_node_pool"
  • Fügen Sie ein Label für einen lokalen Namen (Ihrer Wahl) hinzu:
    • Das Label darf Buchstaben, Ziffern, Unterpunkte (_) und Bindestriche (-) enthalten. Das erste Zeichen darf keine Ziffer sein.
    • Beispiel:"oke-node-pool"
  • Geben Sie im Codeblock einen Wert für die Argumente mit dem Label Erforderlich ein:
    • cluster_id: Verweisen Sie auf das in cluster.tf deklarierte Cluster:
      oci_containerengine_cluster.oke-cluster.id
    • compartment_id Verweisen Sie auf das in compartment.tf deklarierte Compartment:
      oci_identity_compartment.tf-compartment.id
    • kubernetes_version: Dieses Tutorial verwendet dieselbe Version wie der Assistent zum Erstellen von Clustern der Konsole.
    • name: Weisen Sie einen Namen Ihrer Wahl zu. Der Assistent zum Erstellen von Clustern der Konsole verwendet den Namen pool1.
    • node_shape: Geben Sie die Informationen ein, die Sie im ersten Abschnitt erfasst haben.
    • node_source_details:
      • image_id: Geben Sie die Informationen ein, die Sie im ersten Abschnitt erfasst haben.
      • source_type: Setzen Sie diesen Wert auf "image".
  • Geben Sie Werte für die folgenden optionalen Argumente an, um deren Standardwerte zu überschreiben.
    • initial_node_labels: Weisen Sie Schlüssel/Wert-Paare für die Knoten zu.
      • key: Weisen Sie einen Schlüssel Ihrer Wahl zu. Mit der Option Schnellerstellung der Konsole wird der Schlüssel "name" erstellt.
      • value: Weisen Sie einen Wert für den Schlüssel zu. Mit der Option Schnellerstellung der Konsole wird "<your-cluster-name>" dem Schlüssel "name" zugewiesen.
Ausgaben hinzufügen

In diesem Abschnitt deklarieren Sie Ausgaben für das Cluster und den Knotenpool.

  1. Fügen Sie den folgenden Code zu outputs.tf hinzu.
    # Outputs for k8s cluster
    
    output "cluster-name" {
      value = oci_containerengine_cluster.oke-cluster.name
    }
    output "cluster-OCID" {
      value = oci_containerengine_cluster.oke-cluster.id
    }
    output "cluster-kubernetes-version" {
      value = oci_containerengine_cluster.oke-cluster.kubernetes_version
    }
    output "cluster-state" {
      value = oci_containerengine_cluster.oke-cluster.state
    }
    
    # Outputs for k8s node pool
    
    output "node-pool-name" {
      value = oci_containerengine_node_pool.oke-node-pool.name
    }
    output "node-pool-OCID" {
      value = oci_containerengine_node_pool.oke-node-pool.id
    }
    output "node-pool-kubernetes-version" {
      value = oci_containerengine_node_pool.oke-node-pool.kubernetes_version
    }
    output "node-size" {
      value = oci_containerengine_node_pool.oke-node-pool.node_config_details[0].size
    }
    output "node-shape" {
      value = oci_containerengine_node_pool.oke-node-pool.node_shape
    }
  2. Speichern Sie die Datei outputs.tf.
Erläuterung
Ausgaben für Listenelemente
  • Normalerweise sind Listen-Attribute Plural (enden auf s).
  • Beispiel für eine Liste von Attributen für Knotenpool:
    • node_config_details
  • Um alle Attribute in einer Liste auszugeben, verwenden Sie das list-Attribut allein, ohne Klammern.
  • Beispiel:
    output "node-configuration-details"{
      value = oci_containerengine_node_pool.oke-node-pool.node_config_details
    }

    Beispielausgabe:

    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
      },
    ]
  • So geben Sie ein Element aus einer Liste aus oder rufen es auf:
    • Verwenden Sie das folgende Format:

      <list-attribute-name>[index].<attribute-from-list>

    • Ersetzen Sie [index] durch:
      • [0] für das erste Element.
      • [1] für das zweite Element.
      • ...
      • [n] für das Element (n+1).
  • Beispiel:

    Wert für das Attribut size:

    output "node-size" {
      value = oci_containerengine_node_pool.oke-node-pool.node_config_details[0].size
    }

4. Skripte ausführen

Führen Sie Ihre Terraform-Skripte aus, um ein Compartment, ein virtuelles Cloud-Netzwerk, ein Kubernetes-Cluster und einen Knotenpool zu erstellen.

Initialisieren
  1. Initialisieren Sie ein Arbeitsverzeichnis im Verzeichnis tf-cluster.
    terraform init

    Beispielausgabe:

    Initializing the backend...
    
    Initializing provider plugins...
    - Finding hashicorp/oci versions matching ">= 4.41.0"...
    - Installing hashicorp/oci v4.59.0...
    - Installed hashicorp/oci v4.59.0 (signed by HashiCorp)
    
    Terraform has been successfully initialized!
  2. Prüfen Sie den Inhalt des Verzeichnisses tf-cluster.
    ls -a
    Hinweis

    Fehlerbehebung:
    • Nach der Ausführung von terraform init
    • Fehlmeldung: Fehler beim Abfragen der verfügbaren Providerpackages:
      • Wenn Sie sich in einem VPN befinden, prüfen Sie Ihre Proxyeinstellungen.
Sie haben jetzt einen Ordner mit dem Namen .terraform, der die Plug-ins für den OCI-Provider enthält.
Plan
  1. Erstellen Sie einen Ausführungsplan:
    terraform plan
  2. Prüfen Sie die Änderungen, die Terraform an Ihrem Account vornehmen möchte.

    Beispielausgabe:

    Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
      + create
    
    Terraform will perform the following actions:
    
    Plan: 14 to add, 0 to change, 0 to destroy.
Einspielen

Terraform-Skripte ausführen:

terraform apply

Wenn Sie zur Bestätigung aufgefordert werden, geben Sie yes ein, damit Ihre Ressourcen erstellt werden können.

Es kann mindestens 15 Minuten dauern, bis das Cluster erstellt ist. Nachdem Terraform die Ressourcen erstellt hat, prüfen Sie die Ausgabe im Terminal.

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
...
Fehlerbehebung
  • Fehler 401 (Service error: NotAuthenticated):
    • Sie haben einen falschen Wert bei einer der folgenden Angaben:
      • Mandanten-OCID
      • Benutzer-OCID
      • Fingerprint
      • RSA-Private Key (Pfad oder Schlüssel)
  • Kein derartiger Host:
    • Sie haben einen falschen Wert bei einer der folgenden Angaben:
      • Regions-ID

Referenzen:

Weitere Schritte

Herzlichen Glückwunsch. Sie haben ein Kubernetes-Cluster mit Terraform in Ihrem Oracle Cloud Infrastructure-Account erstellt.

Nachdem Sie ein Kubernetes-Cluster erstellt haben, können Sie Kubernetes-Tutorials unter Entwicklertutorials ausführen.

Weitere Informationen zur Entwicklung mit Oracle-Produkten finden Sie auf folgenden Websites: