GKE-Cluster mit Config Controller verwalten

In dieser Anleitung wird gezeigt, wie Sie mit dem GKE-Cluster-Blueprint einen Google Kubernetes Engine-Cluster (GKE) mit Config Controller bereitstellen. Folgen Sie dem Abschnitt, wenn Sie ein GKE-Cluster-Operator sind und Ihre Clusterkonfiguration deklarativ verwalten möchten.

Config Controller ist ein gehosteter Dienst zur Bereitstellung und Orchestrierung von Anthos- und Google Cloud-Ressourcen. Diese Komponente bietet einen API-Endpunkt, der Google Cloud-Ressourcen als Teil von Anthos Config Management bereitstellen, aktivieren und orchestrieren kann.

KRM-Blueprints sind eine Möglichkeit, Ressourcen zu verpacken, die häufig zusammen verwendet werden, während Best Practices codiert werden, die Sie in Ihrer Organisation einführen können.

Der GKE-Cluster-Blueprint ist ein KRM-Blueprint, das alle Ressourcen enthält, die Sie für die Verwaltung eines GKE-Clusters auf einem bestehenden Google Cloud-Netzwerk benötigen. Sie können den Blueprint mehrmals instanziieren, um mehrere Cluster einzurichten.

Ziele

  • Ein GKE-Cluster deklarativ konfigurieren.
  • Konfiguration mithilfe von Config Controller anwenden

Kosten

In dieser Anleitung werden die folgenden kostenpflichtigen Komponenten von Google Cloud verwendet:

Eine vollständige Liste der im GKE-Cluster-Blueprint enthaltenen Ressourcen finden Sie im Abschnitt "Ressourcen" des GKE-Pakets und den zugehörigen Unterpaketen.

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.

Nach Abschluss dieser Anleitung können Sie weitere Kosten durch Löschen von erstellten Ressourcen vermeiden. Weitere Informationen finden Sie unter Bereinigen.

Voraussetzungen

Hinweis

  1. Aktivieren Sie Cloud Shell in der Cloud Console.

    Cloud Shell aktivieren

    Unten in der Cloud Console wird eine Cloud Shell-Sitzung gestartet und eine Eingabeaufforderung angezeigt. Cloud Shell ist eine Shell-Umgebung, in der das Cloud SDK einschließlich des gcloud-Befehlszeilentools vorinstalliert ist. Die Werte sind bereits für Ihr aktuelles Projekt festgelegt. Das Initialisieren der Sitzung kann einige Sekunden dauern.

  2. Führen Sie alle Befehle in dieser Anleitung in Cloud Shell aus.

Umgebung einrichten

Führen Sie in Cloud Shell die folgenden Befehle aus:

  1. Installieren Sie kubectl, das Befehlszeilentool für Kubernetes:

    gcloud components install kubectl
    
  2. Installieren Sie kpt, die primäre Befehlszeile für KRM-Blueprints:

    gcloud components install kpt
    
  3. Konfigurieren Sie kubectl und kpt für die Verbindung mit Config Controller:

    gcloud anthos config controller get-credentials CONFIG_CONTROLLER_NAME \
        --location COMPUTE_REGION \
        --project CONFIG_CONTROLLER_PROJECT_ID
    

    Dabei gilt:

    • CONFIG_CONTROLLER_NAME: der Name Ihres Config Controller-Clusters

    • COMPUTE_REGION: die Region Ihres Config Controller-Clusters (z. B. us-central1)

    • CONFIG_CONTROLLER_PROJECT_ID: die Projekt-ID Ihres Config Controller-Clusters

  4. Aktivieren Sie die Resource Manager API:

    gcloud services enable cloudresourcemanager.googleapis.com \
        --project PROJECT_ID
    

    Ersetzen Sie PROJECT_ID durch die ID Ihres Projekts.

  5. Installieren Sie die ResourceGroup-CRD, falls noch nicht geschehen:

    kpt live install-resource-group
    
  6. Prüfen Sie, ob Config Connector im Projekt-Namespace konfiguriert und fehlerfrei ist:

    kubectl get ConfigConnectorContext -n PROJECT_NAMESPACE \
        -o "custom-columns=NAMESPACE:.metadata.namespace,NAME:.metadata.name,HEALTHY:.status.healthy"
    

    Ersetzen Sie PROJECT_NAMESPACE durch den Namespace, den Sie zum Verwalten von Projektressourcen verwenden möchten (z. B. config-control).

    Beispielausgabe:

    NAMESPACE        NAME                                                HEALTHY
    config-control   configconnectorcontext.core.cnrm.cloud.google.com   true
    

GKE-Cluster konfigurieren

Führen Sie die folgenden Befehle aus, um einen GKE-Cluster mit dem GKE-Cluster-Blueprint zu konfigurieren.

  1. Rufen Sie den Entwurf des GKE-Clusters mit kpt aus dem gewünschten Arbeitsverzeichnis ab:

    kpt pkg get \
        https://github.com/GoogleCloudPlatform/blueprints.git/catalog/gke@v0.3.0 \
        CLUSTER_NAME
    

    Ersetzen Sie CLUSTER_NAME durch den gewünschten Namen, der für den GKE-Cluster verwendet werden soll (z. B. hello-cluster).

  2. Wechseln Sie in das Clusterverzeichnis:

    cd ./CLUSTER_NAME/
    
  3. Konfigurieren Sie das Paket. Ändern Sie dazu die Datei setters.yaml:

    cat > setters.yaml << EOF
    apiVersion: v1
    kind: ConfigMap
    metadata: # kpt-merge: /setters
      name: setters
    data:
      # The cluster name
      cluster-name: CLUSTER_NAME
      # The environment (set as a label on the cluster)
      environment: dev
      # The compute location (region or zone)
      location: us-central1
      # The project in which to manage cluster resources
      platform-project-id: PROJECT_ID
      # The namespace in which to manage cluster resources
      platform-namespace: PROJECT_NAMESPACE
      # The name of the VPC in which to create a dedicated subnet
      network-name: default
      # The project that the VPC is in
      network-project-id: PROJECT_ID
      # The namespace in which to manage network resources
      networking-namespace: PROJECT_NAMESPACE
      # The private IP range for masters to use when peering to the VPC
      master-ip-range: 192.168.0.0/28
      # The private IP range for nodes to use, allocated to the dedicated subnet
      node-ip-range: 10.4.0.0/22
      # The private IP range for pods to use, allocated to the dedicated subnet
      pod-ip-range: 10.5.0.0/16
      # The private IP range for services to use, allocated to the dedicated subnet
      service-ip-range: 10.6.0.0/16
      # The namespace in which to manage service enablement resources
      projects-namespace: PROJECT_NAMESPACE
      # The group in which to manage the list of groups that can be used for RBAC.
      # Must be named exactly 'gke-security-groups'.
      security-group: gke-security-groups@YOUR_DOMAIN
    EOF
    

    Dabei gilt:

    • PROJECT_ID: die Projekt-ID.

      In dieser Anleitung werden der Cluster und das Netzwerk im selben Projekt bereitgestellt.

    • PROJECT_NAMESPACE: Der Namespace zur Verwaltung von Projektressourcen, z. B. config-control.

      In dieser Anleitung werden die Cluster-, Netzwerk- und Dienstaktivierung im selben Namespace verwaltet.

    • YOUR_DOMAIN: Die Domain, die von Ihren Gruppen verwendet wird (z. B. example.com).

    Alle anderen Datenfelder können nach Bedarf neu konfiguriert werden.

    Die angegebenen Standardeinstellungen sollten in einem ansonsten leeren Projekt mit dem Standardnetzwerk funktionieren.

  4. Rendern Sie die Setter-Werte in den vorlagenbasierten Ressourcen:

    kpt fn render
    

    Beispielausgabe:

    Package "example/cluster":
    [RUNNING] "gcr.io/kpt-fn/apply-setters:v0.1"
    [PASS] "gcr.io/kpt-fn/apply-setters:v0.1"
      Results:
        [INFO] set field value to "example-us-west4" in file "cluster/cluster.yaml" in field "metadata.name"
        [INFO] set field value to "config-control" in file "cluster/cluster.yaml" in field "metadata.namespace"
        [INFO] set field value to "dev" in file "cluster/cluster.yaml" in field "metadata.labels.gke.io/environment"
        [INFO] set field value to "platform-project-id" in file "cluster/cluster.yaml" in field "metadata.annotations.cnrm.cloud.google.com/project-id"
        ...(10 line(s) truncated, use '--truncate-output=false' to disable)
    
    Package "example/nodepools/primary":
    [RUNNING] "gcr.io/kpt-fn/apply-setters:v0.1"
    [PASS] "gcr.io/kpt-fn/apply-setters:v0.1"
      Results:
        [INFO] set field value to "gke-example-us-east4-primary" in file "nodepools/primary/node-iam.yaml" in field "metadata.name"
        [INFO] set field value to "config-control" in file "nodepools/primary/node-iam.yaml" in field "metadata.namespace"
        [INFO] set field value to "platform-project-id" in file "nodepools/primary/node-iam.yaml" in field "metadata.annotations.cnrm.cloud.google.com/project-id"
        [INFO] set field value to "gke-example-us-east4-primary" in file "nodepools/primary/node-iam.yaml" in field "spec.displayName"
        ...(23 line(s) truncated, use '--truncate-output=false' to disable)
    
    Package "example/subnet":
    [RUNNING] "gcr.io/kpt-fn/apply-setters:v0.1"
    [PASS] "gcr.io/kpt-fn/apply-setters:v0.1"
      Results:
        [INFO] set field value to "platform-project-id-example-us-west4" in file "subnet/subnet.yaml" in field "metadata.name"
        [INFO] set field value to "networking" in file "subnet/subnet.yaml" in field "metadata.namespace"
        [INFO] set field value to "network-project-id" in file "subnet/subnet.yaml" in field "metadata.annotations.cnrm.cloud.google.com/project-id"
        [INFO] set field value to "platform-project-id-example-us-west4" in file "subnet/subnet.yaml" in field "spec.description"
        ...(5 line(s) truncated, use '--truncate-output=false' to disable)
    
    Package "example":
    [RUNNING] "gcr.io/kpt-fn/apply-setters:v0.1"
    [PASS] "gcr.io/kpt-fn/apply-setters:v0.1"
      Results:
        [INFO] set field value to "example" in file "cluster/cluster.yaml" in field "metadata.name"
        [INFO] set field value to "config-control" in file "cluster/cluster.yaml" in field "metadata.namespace"
        [INFO] set field value to "dev" in file "cluster/cluster.yaml" in field "metadata.labels.gke.io/environment"
        [INFO] set field value to "example-project-1234" in file "cluster/cluster.yaml" in field "metadata.annotations.cnrm.cloud.google.com/project-id"
        ...(44 line(s) truncated, use '--truncate-output=false' to disable)
    
    Successfully executed 4 function(s) in 4 package(s).
    

Konfigurationsänderungen anwenden

Lokale Änderungen in den vorherigen Schritten wirken sich erst auf die Cloud aus, wenn sie angewendet werden.

Führen Sie die folgenden Befehle aus, um Ihre Konfigurationsänderungen anzuwenden.

  1. Initialisieren Sie das Arbeitsverzeichnis mit kpt, das eine Ressource erstellt, um Änderungen verfolgen zu können:

    kpt live init --namespace PROJECT_NAMESPACE
    

    Ersetzen Sie PROJECT_NAMESPACE durch den Namespace, der zum Verwalten der Projektressourcen verwendet wird, z. B. config-control.

  2. Sehen Sie sich die erstellen Ressourcen in der Vorschau an:

    kpt live apply --dry-run
    

    Alle Ressourcen sollten mit "Erstellt (Probelauf)" versehen sein.

    Beispielausgabe:

    service.serviceusage.cnrm.cloud.google.com/example-project-1234-example-container created (dry-run)
    computesubnetwork.compute.cnrm.cloud.google.com/example-project-1234-example created (dry-run)
    containercluster.container.cnrm.cloud.google.com/example created (dry-run)
    containernodepool.container.cnrm.cloud.google.com/example-primary created (dry-run)
    iampolicymember.iam.cnrm.cloud.google.com/artifactreader-gke-example-primary created (dry-run)
    iampolicymember.iam.cnrm.cloud.google.com/logwriter-gke-example-primary created (dry-run)
    iampolicymember.iam.cnrm.cloud.google.com/metricwriter-gke-example-primary created (dry-run)
    iamserviceaccount.iam.cnrm.cloud.google.com/gke-example-primary created (dry-run)
    8 resource(s) applied. 8 created, 0 unchanged, 0 configured, 0 failed (dry-run)
    0 resource(s) pruned, 0 skipped, 0 failed (dry-run)
    
  3. Wenden Sie die Ressourcen mit kpt an:

    kpt live apply
    

    Alle Ressourcen sollten "Erstellt" versehen sein.

    Beispielausgabe:

    service.serviceusage.cnrm.cloud.google.com/example-project-1234-example-container created
    computesubnetwork.compute.cnrm.cloud.google.com/example-project-1234-example created
    containercluster.container.cnrm.cloud.google.com/example created
    containernodepool.container.cnrm.cloud.google.com/example-primary created
    iampolicymember.iam.cnrm.cloud.google.com/artifactreader-gke-example-primary created
    iampolicymember.iam.cnrm.cloud.google.com/logwriter-gke-example-primary created
    iampolicymember.iam.cnrm.cloud.google.com/metricwriter-gke-example-primary created
    iamserviceaccount.iam.cnrm.cloud.google.com/gke-example-primary created
    8 resource(s) applied. 8 created, 0 unchanged, 0 configured, 0 failed
    0 resource(s) pruned, 0 skipped, 0 failed
    

Ergebnis prüfen

Mit den folgenden Befehlen prüfen Sie, ob die Änderungen angewendet wurden und ob die von ihnen angegebenen Ressourcen bereitgestellt werden:

  1. Warten Sie, bis die Ressourcen bereit sind:

    kpt live status --output table --poll-until current
    

    Dieser Befehl fragt die Ressourcen ab, bis alle Ressourcen den Status Current und die Bedingung Ready haben.

    Verwenden Sie ctrl-c, um ihn bei Bedarf zu unterbrechen.

    Beispielausgabe:

    NAMESPACE   RESOURCE                                  STATUS      CONDITIONS      AGE     MESSAGE
    config-con  ComputeSubnetwork/example-project-1234-e  Current     Ready           41m     Resource is Ready
    config-con  ContainerCluster/example                  Current     Ready           41m     Resource is Ready
    config-con  ContainerNodePool/example-primary         Current     Ready           41m     Resource is Ready
    config-con  IAMPolicyMember/artifactreader-gke-examp  Current     Ready           41m     Resource is Ready
    config-con  IAMPolicyMember/logwriter-gke-example-pr  Current     Ready           41m     Resource is Ready
    config-con  IAMPolicyMember/metricwriter-gke-example  Current     Ready           41m     Resource is Ready
    config-con  IAMServiceAccount/gke-example-primary     Current     Ready           41m     Resource is Ready
    config-con  Service/example-project-1234-example-con  Current     Ready           41m     Resource is Ready
    
  2. Wenn ein Fehler auftritt, verwenden Sie die Standardereignisausgabe, um die vollständigen Fehlermeldungen zu sehen:

    kpt live status
    

FAQ

Bereinigen

Wenn Sie Config Controller nicht mehr verwenden möchten, sollten Sie zuerst alle mit Config Controller erstellten Ressourcen bereinigen und dann Config Controller selbst löschen.

  1. Löschen Sie die Ressourcen mit kpt aus dem Arbeitsverzeichnis:

    kpt live destroy
    
  2. Warten Sie, bis alle Ressourcen gelöscht wurden:

    until [ -z "$(kubectl get -R -f . --ignore-not-found | tee /dev/fd/2)" ]; \
    do sleep 1; done
    

    Dieser Befehl fragt die Ressourcen ab, bis alle Ressourcen den Status Deleted haben.

    Verwenden Sie ctrl-c, um ihn bei Bedarf zu unterbrechen.

Nächste Schritte