Men-deploy GDCV untuk Bare Metal di OpenStack

GKE di Bare Metal mendukung penggunaan OpenStack sebagai platform cloud pribadi. Dukungan ini memungkinkan Anda menggunakan layanan OpenStack berikut:

  • Infrastructure as a Service (IaaS)
  • Load balancing as a Service (LBaaS)
  • Penyimpanan

Anda dapat men-deploy GKE pada Bare Metal yang berjalan di virtual machine (VM) OpenStack dengan sistem operasi yang didukung. GKE di Bare Metal tidak menyediakan VM secara otomatis, dan penyediaan VM berada di luar cakupan panduan ini. Untuk mempelajari persyaratan VM dan meninjau contoh deployment, lihat contoh Terraform untuk membuat VM OpenStack.

Anda dapat menggunakan OpenStack LBaaS dan OpenStack Cloud Provider Kubernetes di GKE di Bare Metal untuk mengekspos layanan Kubernetes di luar cluster OpenStack.

Panduan ini terdiri dari bagian-bagian berikut:

  1. Men-deploy GKE di Bare Metal
  2. Konfigurasikan OpenStack Cloud Provider untuk Kubernetes di GKE pada Bare Metal untuk berintegrasi dengan load balancer Octavia
  3. Memvalidasi Penyedia Cloud OpenStack untuk integrasi Kubernetes

Panduan ini menggunakan OpenStack Ussuri, tetapi dapat berfungsi dengan versi OpenStack yang lebih lama. Versi OpenStack lama belum diuji. Panduan ini menggunakan VM OpenStack untuk memberi Anda GKE dua node pada lingkungan konsep Bare Metal yang berjalan di OpenStack. Untuk mengetahui informasi cara membuat lingkungan produksi dengan bidang kontrol ketersediaan tinggi, lihat dokumentasi GKE on Bare Metal untuk mengetahui persyaratan lingkungan produksi.

Contoh penerapan

Panduan ini menyajikan contoh deployment GKE pada Bare Metal di OpenStack yang terintegrasi dengan LBaaS OpenStack. Anda harus memahami dan menyesuaikan perintah dan nilai konfigurasi dengan lingkungan OpenStack Anda. Diagram berikut menunjukkan deployment yang dihasilkan:

GKE pada Bare Metal yang diinstal di OpenStack.

Prasyarat

  • OpenStack Ussuri dengan LBaaS v2 yang di-deploy dan berfungsi
  • Akun layanan untuk mendownload alat bmctl
  • Konfigurasikan VM dan jaringan OpenStack Anda seperti yang ditunjukkan dalam contoh deployment. Untuk menyediakan penyiapan serupa di lingkungan OpenStack, Anda memiliki opsi berikut:
    1. Gunakan skrip Terraform ini untuk menyediakan resource secara otomatis.
    2. Sediakan resource secara manual.
  • VM OpenStack berikut harus siap dan tersedia melalui SSH:
Nama Penggunaan Alamat IP
abm-ws 10.200.0.10 (IP pribadi)
floating_ip (IP publik)
Bertindak sebagai workstation admin yang digunakan untuk men-deploy Anthos on bare metal ke komputer lain.
abm-cp1 10.200.0.11 Bidang kontrol cluster Anthos: Host ini menjalankan bidang kontrol dan load balancer Kubernetes.
abm-w1 10.200.0.12 Node pekerja cluster Anthos: Host ini menjalankan beban kerja Kubernetes.

Men-deploy GKE di Bare Metal

Bagian ini menunjukkan cara menyelesaikan tugas berikut:

  1. Instal alat yang Anda perlukan di VM workstation admin abm-ws.
  2. Mengonfigurasi project ID dan akun layanan yang diperlukan untuk menyelesaikan deployment dengan aman
  3. Membuat file konfigurasi cluster
  4. Men-deploy GKE di Bare Metal

Instal alat yang Anda perlukan

  1. Ambil alamat IP mengambang publik dari VM abm-ws.

    export OPENSTACK_IPS=$(openstack floating ip list --tags=abm_ws_floatingip -f json)
    export FLOATING_IP=$(jq -c '.[]."Floating IP Address"' <<< $OPENSTACK_IPS | tr -d '"')
    
  2. Pastikan Anda dapat terhubung dengan aman ke VM abm-ws melalui SSH dan login sebagai pengguna root. Pengguna root seperti yang dikonfigurasi oleh skrip Terraform adalah abm.

    ssh ubuntu@$FLOATING_IP
    sudo -u abm -i
    
  3. Verifikasi bahwa Anda dapat melakukan SSH ke node lainnya.

    ssh abm@10.200.0.11 'echo SSH to $HOSTNAME succeeded'
    ssh abm@10.200.0.12 'echo SSH to $HOSTNAME succeeded'
    

    Output yang diharapkan untuk perintah di atas adalah:

    SSH to abm-cp1 succeeded
    SSH to abm-w1 succeeded
    
  4. Download utilitas command line kubectl di VM abm-ws.

    curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"
    chmod +x kubectl
    sudo mv kubectl /usr/local/sbin/
    
  5. Instal Docker di VM abm-ws.

    curl -fsSL https://get.docker.com -o get-docker.sh
    sh get-docker.sh
    sudo usermod -aG docker abm
    newgrp docker
    

Mengonfigurasi project Google Cloud dan akun layanan

  1. Dapatkan kredensial akses Google Cloud CLI untuk akun pengguna Anda. Ini akan digunakan saat menggunakan perintah gcloud berikut.

    gcloud auth login
    
  2. Pastikan Google Cloud CLI dikonfigurasi untuk menggunakan project Google Cloud tempat Anda ingin mendaftarkan GKE di Bare Metal.

    gcloud config set project PROJECT_ID
    
  3. Tetapkan Kredensial Default Aplikasi (ADC) untuk akun pengguna Anda di workstation admin. Atribut ini akan digunakan saat alat bmctl digunakan untuk pembuatan cluster.

    gcloud auth application-default login
    
  4. Buat akun layanan bm-gcr. Anda menggunakan akun layanan ini untuk melakukan autentikasi dari GKE pada cluster Bare Metal.

    gcloud iam service-accounts create bm-gcr
    
    gcloud iam service-accounts keys create bm-gcr.json \
      --iam-account=bm-gcr@PROJECT_ID.iam.gserviceaccount.com
    
  5. Aktifkan API yang diperlukan.

    gcloud services enable \
      anthos.googleapis.com \
      anthosaudit.googleapis.com \
      anthosgke.googleapis.com \
      cloudresourcemanager.googleapis.com \
      connectgateway.googleapis.com \
      container.googleapis.com \
      gkeconnect.googleapis.com \
      gkehub.googleapis.com \
      gkeonprem.googleapis.com \
      iam.googleapis.com \
      logging.googleapis.com \
      monitoring.googleapis.com \
      opsconfigmonitoring.googleapis.com \
      serviceusage.googleapis.com \
      stackdriver.googleapis.com \
      storage.googleapis.com
    
  6. Memberikan izin tambahan ke akun layanan bm-gcr. Dengan menambahkan izin, Anda tidak perlu membuat beberapa akun layanan untuk setiap layanan.

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/gkehub.connect"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/gkehub.admin"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/logging.logWriter"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/monitoring.metricWriter"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/monitoring.dashboardEditor"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/stackdriver.resourceMetadata.writer"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/opsconfigmonitoring.resourceMetadata.writer"
    

Membuat file konfigurasi cluster

  1. Download utilitas command line bmctl.

    mkdir baremetal && cd baremetal
    gsutil cp gs://anthos-baremetal-release/bmctl/1.15.11/linux-amd64/bmctl .
    chmod a+x bmctl
    sudo mv bmctl /usr/local/sbin/
    
  2. Buat GKE di ruang kerja Bare Metal untuk cluster Anda.

    bmctl create config -c CLUSTER_NAME
    
  3. Buat file konfigurasi untuk GKE Anda di cluster Bare Metal.

    cat > bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME.yaml << EOB
    ---
    gcrKeyPath: /home/abm/bm-gcr.json
    sshPrivateKeyPath: /home/abm/.ssh/id_rsa
    gkeConnectAgentServiceAccountKeyPath: /home/abm/bm-gcr.json
    gkeConnectRegisterServiceAccountKeyPath: /home/abm/bm-gcr.json
    cloudOperationsServiceAccountKeyPath: /home/abm/bm-gcr.json
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: openstack-cluster-ns
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: CLUSTER_NAME
      namespace: openstack-cluster-ns
      annotations:
        baremetal.cluster.gke.io/external-cloud-provider: "true"
    spec:
      type: hybrid
      anthosBareMetalVersion: 1.15.11
      gkeConnect:
        projectID: PROJECT_ID
      controlPlane:
        nodePoolSpec:
          clusterName: CLUSTER_NAME
          nodes:
          - address: 10.200.0.11
      clusterNetwork:
        pods:
          cidrBlocks:
          - 192.168.0.0/16
        services:
          cidrBlocks:
          - 10.96.0.0/20
      loadBalancer:
        mode: manual
        ports:
          controlPlaneLBPort: 443
        vips:
          controlPlaneVIP: 10.200.0.101
          ingressVIP: 10.200.0.102
      clusterOperations:
        location: us-central1
        projectID: PROJECT_ID
      storage:
        lvpNodeMounts:
          path: /mnt/localpv-disk
          storageClassName: node-disk
        lvpShare:
          numPVUnderSharedPath: 5
          path: /mnt/localpv-share
          storageClassName: standard
      nodeAccess:
        loginUser: abm
    
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: NodePool
    metadata:
      name: node-pool-1
      namespace: openstack-cluster-ns
    spec:
      clusterName: CLUSTER_NAME
      nodes:
      - address: 10.200.0.12
    EOB
    

Deploy

  1. Deploy cluster.

    bmctl create cluster -c CLUSTER_NAME
    

Menjalankan perintah bmctl akan memulai penyiapan cluster hybrid baru. Hal ini termasuk melakukan pemeriksaan preflight pada node, membuat admin dan cluster pengguna, serta mendaftarkan cluster tersebut ke Google Cloud menggunakan Connect. Seluruh penyiapan dapat memerlukan waktu hingga 15 menit. Anda akan melihat output berikut saat cluster sedang dibuat:

Please check the logs at bmctl-workspace/CLUSTER_NAME/log/create-cluster-20210926-020741/create-cluster.log
[2021-09-26 02:07:59+0000] Creating bootstrap cluster...  kind get kubeconfig --name bmctl > ~/.kube/config && k get pods --all-namespaces
[2021-09-26 02:07:59+0000] Creating bootstrap cluster... OK
[2021-09-26 02:10:48+0000] Installing dependency components... OK
[2021-09-26 02:13:42+0000] Waiting for preflight check job to finish... OK
[2021-09-26 02:15:22+0000] - Validation Category: machines and network
[2021-09-26 02:15:22+0000]  - [PASSED] gcp
[2021-09-26 02:15:22+0000]  - [PASSED] node-network
[2021-09-26 02:15:22+0000]  - [PASSED] 10.200.0.11
[2021-09-26 02:15:22+0000]  - [PASSED] 10.200.0.11-gcp
[2021-09-26 02:15:22+0000]  - [PASSED] 10.200.0.12
[2021-09-26 02:15:22+0000]  - [PASSED] 10.200.0.12-gcp
[2021-09-26 02:15:22+0000] Flushing logs... OK
[2021-09-26 02:15:23+0000] Applying resources for new cluster
[2021-09-26 02:15:24+0000] Waiting for cluster to become ready OK
[2021-09-26 02:25:04+0000] Writing kubeconfig file
[2021-09-26 02:25:04+0000] kubeconfig of created cluster is at bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig, please run
[2021-09-26 02:25:04+0000] kubectl --kubeconfig bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig get nodes
[2021-09-26 02:25:04+0000] to get cluster node status.
[2021-09-26 02:25:04+0000] Please restrict access to this file as it contains authentication credentials of your cluster.
[2021-09-26 02:25:04+0000] Waiting for node pools to become ready OK
[2021-09-26 02:25:24+0000] Moving admin cluster resources to the created admin cluster
[2021-09-26 02:25:53+0000] Flushing logs... OK
[2021-09-26 02:25:53+0000] Deleting bootstrap cluster...

Memverifikasi dan berinteraksi dengan cluster

Anda dapat menemukan file kubeconfig cluster pada VM abm-ws di dalam direktori bmctl-workspace. Untuk memverifikasi deployment, selesaikan langkah-langkah berikut.

  1. Tetapkan variabel lingkungan KUBECONFIG dengan jalur ke file konfigurasi cluster untuk menjalankan perintah kubectl di cluster:

    export KUBECONFIG=$HOME/bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
    kubectl get nodes
    

    Anda akan melihat node cluster yang dicetak, mirip dengan output berikut:

    NAME      STATUS   ROLES                  AGE     VERSION
    abm-cp1   Ready    control-plane,master   5m24s   v1.20.5-gke.1301
    abm-w1    Ready    <none>                 2m17s   v1.20.5-gke.1301
    

Login ke cluster Anda dari konsol Google Cloud

Untuk mengamati workload di konsol Google Cloud, Anda harus login ke cluster. Untuk mendapatkan petunjuk dan informasi lebih lanjut tentang cara login ke cluster, lihat Login ke cluster dari Konsol Google Cloud.

Pembersihan

Anda dapat membersihkan cluster dengan mengeluarkan perintah berikut di VM workstation admin (abm-ws).

export KUBECONFIG=$HOME/bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
bmctl reset --cluster CLUSTER_NAME

Apa langkah selanjutnya?

Kini Anda dapat menginstal OpenStack Cloud Provider di GKE pada cluster Bare Metal yang baru dibuat dengan mengikuti panduan Mengonfigurasi OpenStack Cloud Provider untuk Kubernetes. Hal ini memungkinkan Anda mengekspos aplikasi menggunakan layanan jenis LoadBalancer, dengan memanfaatkan LBaaS OpenStack.