Membuat cluster hybrid Cloud Terdistribusi Google di VM Compute Engine

Halaman ini menunjukkan cara menyiapkan cluster hybrid Google Distributed Cloud di Mode Ketersediaan Tinggi (HA) menggunakan Virtual Machine (VM) yang berjalan di Compute Engine.

Anda dapat mencoba Google Distributed Cloud dengan cepat dan tanpa harus menyiapkan perangkat keras. Menyelesaikan langkah-langkah di halaman ini akan memberi Anda Lingkungan pengujian Google Distributed Cloud yang berjalan di Compute Engine.

Untuk mencoba Google Distributed Cloud pada VM Compute Engine, selesaikan langkah-langkah berikut:

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

  5. Memverifikasi cluster Anda

Sebelum memulai

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  4. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  5. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

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

    Tergantung cara gcloud CLI diinstal, Anda mungkin melihat pesan berikut: "Anda tidak dapat melakukan tindakan ini karena Google Pengelola komponen Cloud CLI dinonaktifkan untuk penginstalan ini. Anda dapat menjalankan perintah berikut guna mendapat hasil yang sama untuk penginstalan ini: Ikuti petunjuk untuk menyalin dan menempelkan perintah untuk mengupdate komponen-komponennya.

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

Membuat enam VM di Compute Engine

Selesaikan langkah-langkah berikut untuk membuat VM berikut:

  • Satu VM untuk workstation admin. Host workstation admin alat antarmuka command line (CLI) dan file konfigurasi untuk disediakan ke cluster selama penginstalan, dan alat CLI untuk berinteraksi dengan ke cluster pasca-penginstalan. Workstation admin akan memiliki akses ke semua ke node lain dalam cluster melalui SSH.
  • Tiga VM untuk tiga node bidang kontrol diperlukan untuk menjalankan Bidang kontrol Google Distributed Cloud.
  • Dua VM untuk dua worker node diperlukan untuk menjalankan workload pada Google Distributed Cloud.
  1. Menyiapkan variabel lingkungan:

    export PROJECT_ID=PROJECT_ID
    export ZONE=ZONE
    export CLUSTER_NAME=CLUSTER_NAME
    export BMCTL_VERSION=1.30.0-gke.1930
    

    Untuk ZONE, Anda dapat menggunakan us-central1-a atau Zona Compute Engine .

  2. Jalankan perintah berikut untuk masuk dengan akun Google Anda dan mengatur project sebagai 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. Mengaktifkan 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
  5. Berikan izin tambahan ke akun layanan baremetal-gcr agar tidak memerlukan beberapa akun layanan untuk API dan layanan yang berbeda:

    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
  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 membuat instance VM dengan nama berikut:

    • abm-ws: VM untuk workstation admin.
    • abm-cp1, abm-cp2, abm-cp3: VM untuk bidang kontrol node.
    • 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. menerapkan SSH ke setiap VM.
  2. Perbarui 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

Anda sekarang 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 worker node:
    • 10.200.0.6
    • 10.200.0.7

Instal prasyarat untuk Google Distributed Cloud

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

  • bmctl
  • kubectl
  • Docker

Untuk menginstal alat dan mempersiapkan penginstalan Google Distributed Cloud:

  1. Jalankan perintah berikut untuk mendownload kunci akun layanan ke admin dan memasang 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. Tujuan perintah tersebut akan melakukan tugas berikut:

    1. Membuat 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 Google Distributed Cloud

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

  1. Buat file konfigurasi untuk cluster hybrid yang diperlukan.
  2. Menjalankan pemeriksaan preflight.
  3. Men-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

Memverifikasi cluster Anda

Anda dapat menemukan file kubeconfig cluster Anda pada workstation admin di Direktori bmctl-workspace akun root. Untuk memverifikasi deployment Anda, menyelesaikan langkah-langkah berikut.

  1. Jalankan SSH ke workstation admin sebagai root:

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

    Anda dapat mengabaikan pesan apa pun tentang mengupdate VM dan menyelesaikan proses ini tutorial. Jika Anda berencana untuk menyimpan VM sebagai lingkungan tes, Anda mungkin ingin mengupdate OS atau meng-upgrade ke rilis berikutnya seperti dijelaskan dalam Dokumentasi Ubuntu.

  2. Tetapkan variabel lingkungan KUBECONFIG dengan jalur ke cluster file konfigurasi 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 berikut. Perintah ini:

    • Memberi akun pengguna Anda clusterrole/cluster-admin Kubernetes peran pada cluster.
    • Mengonfigurasi cluster agar Anda dapat menjalankan perintah kubectl di komputer lokal tanpa harus melakukan SSH ke {i>workstation<i} admin.

    Ganti GOOGLE_ACCOUNT_EMAIL dengan alamat email yang dikaitkan dengan akun Google Cloud Anda. Contoh: --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
    

    {i>Output<i} dari perintah ini mirip dengan berikut ini, yang terpotong 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 admin Infrastruktur Cloud.

  6. Dapatkan entri kubeconfig yang dapat mengakses cluster melalui Hubungkan 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. Kini Anda dapat menjalankan perintah kubectl melalui gateway Connect:

    kubectl get nodes
    kubectl get namespaces
    

Login ke cluster Anda dari konsol Google Cloud

Untuk mengamati workload Anda di Google Distributed Cloud di Konsol Google Cloud, Anda harus login ke cluster. Sebelum Anda masuk ke konsol untuk pertama kalinya, Anda perlu mengonfigurasi metode otentikasi. Metode autentikasi yang paling mudah dikonfigurasi adalah Google identitas Anda. Metode autentikasi ini memungkinkan Anda masuk menggunakan alamat email yang terkait dengan akun Google Cloud Anda.

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

  1. Di konsol Google Cloud, buka Cluster GKE kami.

    Buka cluster GKE

  2. Klik Tindakan di samping cluster yang 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 menginstal dan membatalkan pendaftaran cluster dari Google Cloud proyek:

    gcloud compute ssh root@abm-ws --zone ${ZONE} << EOF
    set -x
    export clusterid=CLUSTER_NAME
    bmctl reset -c \$clusterid
    EOF
    
  2. Cantumkan 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 abm VM dengan menjalankan perintah berikut berikut:

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