Membuat cluster campuran di VM Compute Engine

Halaman ini menunjukkan cara menyiapkan cluster hybrid dalam mode ketersediaan tinggi (HA) menggunakan Virtual Machine (VM) yang berjalan di Compute Engine.

Anda dapat mencoba Google Distributed Cloud khusus software dengan cepat dan tanpa perlu menyiapkan hardware apa pun. Dengan menyelesaikan langkah-langkah di halaman ini, Anda akan mendapatkan lingkungan pengujian yang berfungsi dan berjalan di Compute Engine.

Untuk mencoba Google Distributed Cloud khusus software di VM Compute Engine, selesaikan langkah-langkah berikut:

  1. Buat enam VM di Compute Engine
  2. Buat jaringan vxlan di antara semua VM dengan konektivitas L2
  3. Menginstal prasyarat untuk Google Distributed Cloud
  4. Men-deploy cluster hybrid
  5. Verifikasi cluster Anda

Sebelum memulai

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Catat project ID karena Anda membutuhkannya untuk menetapkan variabel lingkungan yang digunakan dalam skrip dan perintah di halaman ini. Jika Anda memilih project yang sudah ada, pastikan Anda adalah pemilik atau editor project.
  7. Di workstation Linux, pastikan Anda telah menginstal Google Cloud CLI versi terbaru, alat command line untuk berinteraksi dengan Google Cloud. Jika Anda sudah menginstal gcloud CLI, update komponennya dengan menjalankan perintah berikut:
    gcloud components update

    Bergantung pada cara gcloud CLI diinstal, Anda mungkin melihat pesan berikut:

    "You cannot perform this action because the Google Cloud CLI component manager is disabled for this installation. You can run the following command to achieve the same result for this installation:"

    Ikuti petunjuk untuk menyalin dan menempelkan perintah guna mengupdate komponen.

  8. Langkah-langkah dalam panduan ini diambil dari skrip penginstalan di repositori anthos-samples. Bagian FAQ memiliki informasi selengkapnya tentang cara menyesuaikan skrip ini agar berfungsi dengan beberapa variasi populer.

    Buat enam VM di Compute Engine

    Selesaikan langkah-langkah berikut untuk membuat VM berikut:

    • Satu VM untuk workstation admin. Workstation admin menghosting alat antarmuka command line (CLI) dan file konfigurasi untuk menyediakan cluster selama penginstalan, dan alat CLI untuk berinteraksi dengan cluster yang disediakan setelah penginstalan. Workstation admin akan memiliki akses ke semua node lain di cluster menggunakan SSH.
    • Tiga VM untuk tiga node bidang kontrol yang diperlukan untuk menjalankan bidang kontrol Google Distributed Cloud.
    • Dua VM untuk dua node pekerja yang diperlukan untuk menjalankan workload di cluster Google Distributed Cloud.
    1. Siapkan variabel lingkungan:

      export PROJECT_ID=PROJECT_ID
      export ZONE=ZONE
      export CLUSTER_NAME=CLUSTER_NAME
      export BMCTL_VERSION=1.32.100-gke.106
      

      Untuk ZONE, Anda dapat menggunakan us-central1-a atau salah satu zona Compute Engine lainnya .

    2. Jalankan perintah berikut untuk login dengan Akun Google Anda dan menetapkan project Anda sebagai project default:

      gcloud auth login
      gcloud config set project $PROJECT_ID
      gcloud config set compute/zone $ZONE
      
    3. Buat kunci dan akun layanan baremetal-gcr:

      gcloud iam service-accounts create baremetal-gcr
      
      gcloud iam service-accounts keys create bm-gcr.json \
          --iam-account=baremetal-gcr@"${PROJECT_ID}".iam.gserviceaccount.com
    4. Aktifkan Google Cloud API dan layanan:

      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 \
          serviceusage.googleapis.com \
          stackdriver.googleapis.com \
          monitoring.googleapis.com \
          logging.googleapis.com \
          opsconfigmonitoring.googleapis.com \
          compute.googleapis.com \
          gkeonprem.googleapis.com \
          iam.googleapis.com \
          kubernetesmetadata.googleapis.com
    5. Beri akun layanan baremetal-gcr izin tambahan untuk menghindari kebutuhan akan beberapa akun layanan untuk berbagai API dan layanan:

      gcloud projects add-iam-policy-binding "$PROJECT_ID" \
        --member="serviceAccount:baremetal-gcr@$PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/gkehub.connect" \
        --no-user-output-enabled
      
      gcloud projects add-iam-policy-binding "$PROJECT_ID" \
        --member="serviceAccount:baremetal-gcr@$PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/gkehub.admin" \
        --no-user-output-enabled
      
      gcloud projects add-iam-policy-binding "$PROJECT_ID" \
        --member="serviceAccount:baremetal-gcr@$PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/logging.logWriter" \
        --no-user-output-enabled
      
      gcloud projects add-iam-policy-binding "$PROJECT_ID" \
        --member="serviceAccount:baremetal-gcr@$PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/monitoring.metricWriter" \
        --no-user-output-enabled
      
      gcloud projects add-iam-policy-binding "$PROJECT_ID" \
        --member="serviceAccount:baremetal-gcr@$PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/monitoring.dashboardEditor" \
        --no-user-output-enabled
      
      gcloud projects add-iam-policy-binding "$PROJECT_ID" \
        --member="serviceAccount:baremetal-gcr@$PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/stackdriver.resourceMetadata.writer" \
        --no-user-output-enabled
      
      gcloud projects add-iam-policy-binding "$PROJECT_ID" \
        --member="serviceAccount:baremetal-gcr@$PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/opsconfigmonitoring.resourceMetadata.writer" \
        --no-user-output-enabled
      
      gcloud projects add-iam-policy-binding "$PROJECT_ID" \
          --member="serviceAccount:baremetal-gcr@$PROJECT_ID.iam.gserviceaccount.com" \
          --role="roles/kubernetesmetadata.publisher" \
          --no-user-output-enabled
      
      gcloud projects add-iam-policy-binding "$PROJECT_ID" \
        --member="serviceAccount:baremetal-gcr@$PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/monitoring.viewer" \
        --no-user-output-enabled
      
      gcloud projects add-iam-policy-binding "$PROJECT_ID" \
        --member="serviceAccount:baremetal-gcr@$PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/serviceusage.serviceUsageViewer" \
        --no-user-output-enabled
    6. Buat variabel dan array yang diperlukan untuk semua perintah di halaman ini:

      MACHINE_TYPE=n1-standard-8
      VM_PREFIX=abm
      VM_WS=$VM_PREFIX-ws
      VM_CP1=$VM_PREFIX-cp1
      VM_CP2=$VM_PREFIX-cp2
      VM_CP3=$VM_PREFIX-cp3
      VM_W1=$VM_PREFIX-w1
      VM_W2=$VM_PREFIX-w2
      declare -a VMs=("$VM_WS" "$VM_CP1" "$VM_CP2" "$VM_CP3" "$VM_W1" "$VM_W2")
      declare -a IPs=()
    7. Gunakan loop berikut untuk membuat enam VM:

      for vm in "${VMs[@]}"
      do
          gcloud compute instances create "$vm" \
            --image-family=ubuntu-2004-lts --image-project=ubuntu-os-cloud \
            --zone="${ZONE}" \
            --boot-disk-size 200G \
            --boot-disk-type pd-ssd \
            --can-ip-forward \
            --network default \
            --tags http-server,https-server \
            --min-cpu-platform "Intel Haswell" \
            --enable-nested-virtualization \
            --scopes cloud-platform \
            --machine-type "$MACHINE_TYPE" \
            --metadata "cluster_id=${CLUSTER_NAME},bmctl_version=${BMCTL_VERSION}"
          IP=$(gcloud compute instances describe "$vm" --zone "${ZONE}" \
               --format='get(networkInterfaces[0].networkIP)')
          IPs+=("$IP")
      done

      Perintah ini akan membuat instance VM dengan nama berikut:

      • abm-ws: VM untuk workstation admin.
      • abm-cp1, abm-cp2, abm-cp3: VM untuk node control plane.
      • abm-w1, abm-w2: VM untuk node yang menjalankan workload.
    8. Gunakan loop berikut untuk memverifikasi bahwa SSH siap di semua VM:

      for vm in "${VMs[@]}"
      do
          while ! gcloud compute ssh root@"$vm" --zone "${ZONE}" --command "printf 'SSH to $vm succeeded\n'"
          do
              printf "Trying to SSH into %s failed. Sleeping for 5 seconds. zzzZZzzZZ" "$vm"
              sleep  5
          done
      done

    Membuat jaringan vxlan dengan konektivitas L2 antar-VM

    Gunakan fungsi vxlan standar Linux untuk membuat jaringan yang menghubungkan semua VM dengan konektivitas L2.

    Perintah berikut berisi dua loop yang melakukan tindakan berikut:

    1. Gunakan SSH untuk mengakses setiap VM.
    2. Update dan instal paket yang diperlukan.
    3. Jalankan perintah yang diperlukan untuk mengonfigurasi jaringan dengan vxlan.

      i=2 # We start from 10.200.0.2/24
      for vm in "${VMs[@]}"
      do
          gcloud compute ssh root@"$vm" --zone "${ZONE}" << EOF
              apt-get -qq update > /dev/null
              apt-get -qq install -y jq > /dev/null
              set -x
              ip link add vxlan0 type vxlan id 42 dev ens4 dstport 0
              current_ip=\$(ip --json a show dev ens4 | jq '.[0].addr_info[0].local' -r)
              printf "VM IP address is: \$current_ip"
              for ip in ${IPs[@]}; do
                  if [ "\$ip" != "\$current_ip" ]; then
                      bridge fdb append to 00:00:00:00:00:00 dst \$ip dev vxlan0
                  fi
              done
              ip addr add 10.200.0.$i/24 dev vxlan0
              ip link set up dev vxlan0
      
      EOF
          i=$((i+1))
      done

    Sekarang Anda memiliki konektivitas L2 dalam jaringan 10.200.0.0/24. VM memiliki alamat IP berikut:

    • VM workstation admin: 10.200.0.2
    • VM yang menjalankan node bidang kontrol:
      • 10.200.0.3
      • 10.200.0.4
      • 10.200.0.5
    • VM yang menjalankan node pekerja:
      • 10.200.0.6
      • 10.200.0.7

    Menginstal prasyarat untuk Google Distributed Cloud

    Anda perlu menginstal alat berikut di workstation admin sebelum menginstal Google Distributed Cloud:

    • bmctl
    • kubectl
    • Docker

    Untuk menginstal alat dan menyiapkan penginstalan Google Distributed Cloud:

    1. Jalankan perintah berikut untuk mendownload kunci akun layanan ke workstation admin dan menginstal alat yang diperlukan:

      gcloud compute ssh root@$VM_WS --zone "${ZONE}" << EOF
      set -x
      
      export PROJECT_ID=\$(gcloud config get-value project)
      BMCTL_VERSION=\$(curl http://metadata.google.internal/computeMetadata/v1/instance/attributes/bmctl_version -H "Metadata-Flavor: Google")
      export BMCTL_VERSION
      
      gcloud iam service-accounts keys create bm-gcr.json \
        --iam-account=baremetal-gcr@\${PROJECT_ID}.iam.gserviceaccount.com
      
      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
      mv kubectl /usr/local/sbin/
      mkdir baremetal && cd baremetal
      gsutil cp gs://anthos-baremetal-release/bmctl/$BMCTL_VERSION/linux-amd64/bmctl .
      chmod a+x bmctl
      mv bmctl /usr/local/sbin/
      
      cd ~
      printf "Installing docker"
      curl -fsSL https://get.docker.com -o get-docker.sh
      sh get-docker.sh
      EOF
    2. Jalankan perintah berikut untuk memastikan root@10.200.0.x berfungsi. Perintah melakukan tugas berikut:

      1. Buat kunci SSH baru di workstation admin.
      2. Tambahkan kunci publik ke semua VM lain dalam deployment.
      gcloud compute ssh root@$VM_WS --zone "${ZONE}" << EOF
      set -x
      ssh-keygen -t rsa -N "" -f /root/.ssh/id_rsa
      sed 's/ssh-rsa/root:ssh-rsa/' ~/.ssh/id_rsa.pub > ssh-metadata
      for vm in ${VMs[@]}
      do
          gcloud compute instances add-metadata \$vm --zone ${ZONE} --metadata-from-file ssh-keys=ssh-metadata
      done
      EOF

    Men-deploy cluster hybrid

    Blok kode berikut berisi semua perintah dan konfigurasi yang diperlukan untuk menyelesaikan tugas berikut:

    1. Buat file konfigurasi untuk cluster hybrid yang diperlukan.
    2. Jalankan pemeriksaan awal.
    3. Deploy cluster.
    gcloud compute ssh root@$VM_WS --zone "${ZONE}" <<EOF
    set -x
    export PROJECT_ID=$(gcloud config get-value project)
    CLUSTER_NAME=\$(curl http://metadata.google.internal/computeMetadata/v1/instance/attributes/cluster_id -H "Metadata-Flavor: Google")
    BMCTL_VERSION=\$(curl http://metadata.google.internal/computeMetadata/v1/instance/attributes/bmctl_version -H "Metadata-Flavor: Google")
    export CLUSTER_NAME
    export BMCTL_VERSION
    bmctl create config -c \$CLUSTER_NAME
    cat > bmctl-workspace/\$CLUSTER_NAME/\$CLUSTER_NAME.yaml << EOB
    ---
    gcrKeyPath: /root/bm-gcr.json
    sshPrivateKeyPath: /root/.ssh/id_rsa
    gkeConnectAgentServiceAccountKeyPath: /root/bm-gcr.json
    gkeConnectRegisterServiceAccountKeyPath: /root/bm-gcr.json
    cloudOperationsServiceAccountKeyPath: /root/bm-gcr.json
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-\$CLUSTER_NAME
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: \$CLUSTER_NAME
      namespace: cluster-\$CLUSTER_NAME
    spec:
      type: hybrid
      anthosBareMetalVersion: \$BMCTL_VERSION
      gkeConnect:
        projectID: \$PROJECT_ID
      controlPlane:
        nodePoolSpec:
          clusterName: \$CLUSTER_NAME
          nodes:
          - address: 10.200.0.3
          - address: 10.200.0.4
          - address: 10.200.0.5
      clusterNetwork:
        pods:
          cidrBlocks:
          - 192.168.0.0/16
        services:
          cidrBlocks:
          - 172.26.232.0/24
      loadBalancer:
        mode: bundled
        ports:
          controlPlaneLBPort: 443
        vips:
          controlPlaneVIP: 10.200.0.49
          ingressVIP: 10.200.0.50
        addressPools:
        - name: pool1
          addresses:
          - 10.200.0.50-10.200.0.70
      clusterOperations:
        # might need to be this location
        location: us-central1
        projectID: \$PROJECT_ID
      storage:
        lvpNodeMounts:
          path: /mnt/localpv-disk
          storageClassName: node-disk
        lvpShare:
          numPVUnderSharedPath: 5
          path: /mnt/localpv-share
          storageClassName: local-shared
      nodeConfig:
        podDensity:
          maxPodsPerNode: 250
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: NodePool
    metadata:
      name: node-pool-1
      namespace: cluster-\$CLUSTER_NAME
    spec:
      clusterName: \$CLUSTER_NAME
      nodes:
      - address: 10.200.0.6
      - address: 10.200.0.7
    EOB
    
    bmctl create cluster -c \$CLUSTER_NAME
    EOF

    Verifikasi cluster Anda

    Anda dapat menemukan file kubeconfig cluster di workstation admin dalam direktori bmctl-workspace akun root. Untuk memverifikasi deployment Anda, selesaikan langkah-langkah berikut.

    1. Gunakan SSH untuk mengakses workstation admin sebagai root:

      gcloud compute ssh root@abm-ws --zone ${ZONE}
      

      Anda dapat mengabaikan pesan apa pun tentang memperbarui VM dan menyelesaikan tutorial ini. Jika Anda berencana mempertahankan VM sebagai lingkungan pengujian, Anda mungkin ingin memperbarui OS atau mengupgrade ke rilis berikutnya seperti yang dijelaskan dalam dokumentasi Ubuntu.

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

      export clusterid=CLUSTER_NAME
      export KUBECONFIG=$HOME/bmctl-workspace/$clusterid/$clusterid-kubeconfig
      kubectl get nodes
      
    3. Tetapkan konteks saat ini dalam variabel lingkungan:

      export CONTEXT="$(kubectl config current-context)"
      
    4. Jalankan perintah gcloud CLI berikut. Perintah ini:

      • Memberikan peran clusterrole/cluster-admin Kubernetes di cluster kepada akun pengguna Anda.
      • Mengonfigurasi cluster sehingga Anda dapat menjalankan perintah kubectl di komputer lokal tanpa harus melakukan SSH ke workstation admin.

      Ganti GOOGLE_ACCOUNT_EMAIL dengan alamat email yang terkait dengan akun Google Cloud Anda. Misalnya: --users=alex@example.com.

      gcloud container fleet memberships generate-gateway-rbac  \
          --membership=CLUSTER_NAME \
          --role=clusterrole/cluster-admin \
          --users=GOOGLE_ACCOUNT_EMAIL \
          --project=PROJECT_ID \
          --kubeconfig=$KUBECONFIG \
          --context=$CONTEXT\
          --apply
      

      Output perintah ini akan mirip dengan berikut ini, yang dipangkas agar mudah dibaca:

      Validating input arguments.
      Specified Cluster Role is: clusterrole/cluster-admin
      Generated RBAC policy is:
      --------------------------------------------
      ...
      
      Applying the generate RBAC policy to cluster with kubeconfig: /root/bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig, context: CLUSTER_NAME-admin@CLUSTER_NAME
      Writing RBAC policy for user: GOOGLE_ACCOUNT_EMAIL to cluster.
      Successfully applied the RBAC policy to cluster.
      
    5. Setelah selesai menjelajah, masukkan exit untuk logout dari workstation admin.

    6. Dapatkan entri kubeconfig yang dapat mengakses cluster melalui Connect gateway.

      gcloud container fleet memberships get-credentials CLUSTER_NAME
      

      Outputnya mirip dengan hal berikut ini:

      Starting to build Gateway kubeconfig...
      Current project_id: PROJECT_ID
      A new kubeconfig entry "connectgateway_PROJECT_ID_global_CLUSTER_NAME" has been generated and set as the current context.
      
    7. Anda kini dapat menjalankan perintah kubectl melalui gateway koneksi:

      kubectl get nodes
      kubectl get namespaces
      

    Login ke cluster dari Google Cloud konsol

    Untuk mengamati workload di cluster di konsol Google Cloud , Anda harus login ke cluster. Sebelum login ke konsol untuk pertama kalinya, Anda harus mengonfigurasi metode autentikasi. Metode autentikasi termudah untuk dikonfigurasi adalah identitas Google. Metode autentikasi ini memungkinkan Anda login menggunakan alamat email yang terkait dengan akunGoogle Cloud Anda.

    Perintah gcloud container fleet memberships generate-gateway-rbac yang Anda jalankan di bagian sebelumnya mengonfigurasi cluster sehingga Anda dapat login dengan identitas Google Anda.

    1. Di konsol Google Cloud , buka halaman GKE Clusters.

      Buka cluster GKE

    2. Klik Tindakan di samping cluster terdaftar, lalu klik Login.

    3. Pilih Gunakan identitas Google Anda untuk login.

    4. Klik Login.

    Pembersihan

    1. Hubungkan ke workstation admin untuk mereset VM cluster ke statusnya sebelum penginstalan dan batalkan pendaftaran cluster dari project Google Cloud Anda:

      gcloud compute ssh root@abm-ws --zone ${ZONE} << EOF
      set -x
      export clusterid=CLUSTER_NAME
      bmctl reset -c \$clusterid
      EOF
      
    2. Mencantumkan semua VM yang memiliki abm dalam namanya:

      gcloud compute instances list | grep 'abm'
      
    3. Pastikan Anda tidak keberatan menghapus semua VM yang berisi abm dalam namanya.

      Setelah memverifikasi, Anda dapat menghapus VM abm dengan menjalankan perintah berikut:

      gcloud compute instances list --format="value(name)" | grep 'abm'  | xargs gcloud \
          --quiet compute instances delete