Menggunakan skrip startup di VM Linux

Dokumen ini menjelaskan cara menggunakan skrip startup untuk memulai instance virtual machine (VM) dan program terkaitnya di Google Distributed Cloud (GDC) dengan air gap.

Skrip startup adalah alat otomatisasi yang menjalankan tugas selama proses startup VM. Gunakan skrip startup untuk mengotomatiskan tugas konfigurasi dan deployment VM pada instance baru atau yang sudah ada, sehingga menghemat waktu dan mengurangi upaya konfigurasi manual.

Dokumen ini ditujukan bagi developer dalam grup administrator platform atau operator aplikasi yang ingin menggunakan skrip startup untuk VM di lingkungan Distributed Cloud. Untuk mengetahui informasi selengkapnya, lihat Audiens untuk dokumentasi GDC dengan air gap.

Sebelum memulai

Untuk menggunakan perintah antarmuka command line (CLI) gdcloud, pastikan Anda telah mendownload, menginstal, dan mengonfigurasi gdcloud CLI. Semua perintah untuk Distributed Cloud menggunakan CLI gdcloud atau kubectl, dan memerlukan lingkungan sistem operasi (OS).

Mendapatkan jalur file kubeconfig

Untuk menjalankan perintah terhadap server Management API, pastikan Anda memiliki resource berikut:

  1. Login dan buat file kubeconfig untuk server Management API jika Anda belum memilikinya.

  2. Gunakan jalur ke file kubeconfig server Management API untuk mengganti MANAGEMENT_API_SERVER dalam petunjuk ini.

Meminta peran IAM

Untuk menggunakan skrip startup bagi VM, hubungi IAM Project Admin Anda untuk meminta peran berikut di project Anda:

  • Virtual Machine Project Admin (project-vm-admin): membuat, mengubah, mencantumkan, dan menghapus VM di namespace project.

  • Secret Admin (secret-admin): mendapatkan, mencantumkan, membuat, memperbarui, menghapus, mem-patch, dan memantau secret Kubernetes di namespace project. Gunakan peran ini untuk menentukan rahasia skrip startup. Anda tidak memerlukan peran ini untuk menentukan skrip startup teks biasa.

Semua peran VM harus terikat ke namespace project tempat VM berada. Ikuti langkah-langkah untuk memverifikasi akses Anda.

Meneruskan skrip startup

Anda dapat menggunakan skrip bash atau non-bash sebagai skrip startup. Untuk melakukannya, sertakan #!/bin/… di awal skrip untuk menunjukkan penafsir skrip. Misalnya, untuk menggunakan skrip startup Python 3, tambahkan #! /usr/bin/python3 ke awal skrip.

Google Distributed Cloud (GDC) dengan air gap menjalankan skrip startup sesuai urutan kemunculannya dalam array startupScripts.

Tabel berikut menunjukkan format skrip yang akan digunakan berdasarkan ukuran skrip Anda:

Ukuran skrip Format skrip
Skrip hingga 2.048 byte Hapus teks
Skrip lebih besar dari 2.048 byte Secret Kubernetes

Menentukan skrip startup

Untuk menggunakan skrip startup, Anda harus menambahkan kolom startupScripts ke kolom spec VM. Dalam kolom ini, Anda dapat menentukan beberapa skrip startup sebagai teks biasa atau sebagai secret Kubernetes.

Contoh berikut menentukan skrip startup sebagai teks biasa dan secret Kubernetes:

apiVersion: virtualmachine.gdc.goog/v1
kind: VirtualMachine
metadata:
  name: "my-vm"
spec:
  # …
  startupScripts:
  - name: hello-world
    script: |
      #!/bin/bash
      echo hello
  - name: add-user
    scriptSecretRef:
      name: add-user
---

apiVersion: v1
kind: Secret
type: Opaque
metadata:
  name: add-user
data:
  script:
    IyEvYmluL2Jhc2gKYWRkdXNlciB1c2VyCg==

Tinjau pertimbangan berikut:

  • Skrip startup berjalan pada setiap booting.
  • Skrip startup memiliki hak istimewa root default.
  • Dalam secret Kubernetes, nama scriptSecretRef di spec VM harus cocok dengan kolom metadata.name.
  • Di secret Kubernetes, tentukan konten skrip startup dengan menambahkan kunci script ke kolom data.

Membuat VM baru dengan skrip startup

Petunjuk ini berlaku terlepas dari apa yang Anda gunakan sebagai image untuk membuat VM. Selesaikan langkah-langkah berikut:

  1. Untuk membuat skrip startup sebagai secret Kubernetes, jalankan:

    cat <<EOF >>FILE_NAME
    STARTUP_SCRIPT_CONTENT
    EOF
    
    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      -n PROJECT \
      create secret generic SECRET_NAME \
      --from-file=script=FILE_NAME
    
    rm FILE_NAME
    
  2. Lihat langkah-langkah untuk membuat VM seperti yang dijelaskan di halaman membuat VM. Pada langkah pertama, tambahkan skrip startup ke kolom spec sebelum Anda menjalankan perintah untuk membuat VM.

    Contoh ini menentukan skrip startup dengan teks yang jelas dan secret Kubernetes:

    apiVersion: virtualmachine.gdc.goog/v1
    kind: VirtualMachine
    metadata:
      name: VM_NAME
      namespace: PROJECT
    spec:
      # …
      startupScripts:
      - name: CLEAR_TEXT_SCRIPT_NAME
        script: |
          #!/bin/bash
          CLEAR_TEXT_SCRIPT
      - name: SECRET_SCRIPT_NAME
        scriptSecretRef:
          name: SECRET_NAME
    

    Variabel ini didefinisikan sebagai berikut:

    VariabelDefinisi
    MANAGEMENT_API_SERVER File kubeconfig server Management API.
    PROJECT Project Distributed Cloud tempat Anda ingin membuat VM.
    VM_NAME Nama VM.
    FILE_NAME Nama file untuk menyimpan skrip startup.
    STARTUP_SCRIPT_CONTENT Perintah yang akan dijalankan sebagai bagian dari skrip startup
    CLEAR_TEXT_SCRIPT_NAME Nama skrip startup teks biasa.
    CLEAR_TEXT_SCRIPT Skrip teks biasa yang Anda tentukan.
    SECRET_NAME Nama secret Kubernetes.
    SECRET_SCRIPT_NAME Nama skrip startup sebagai secret Kubernetes.
  3. Lanjutkan dengan langkah-langkah berikut untuk membuat VM.

    Berikut adalah contoh cara membuat VM dengan skrip startup yang menambahkan pengguna baru menggunakan secret Kubernetes dan teks biasa.

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      -n PROJECT \
      apply -f - <<EOF
    apiVersion: virtualmachine.gdc.goog/v1
    kind: VirtualMachineDisk
    metadata:
      name: VM_BOOT_DISK_NAME
    spec:
      source:
        image:
          name: BOOT_DISK_IMAGE_NAME
          namespace: vm-system
      size: BOOT_DISK_SIZE
    ---
    apiVersion: v1
    kind: Secret
    type: Opaque
    metadata:
      name: add-user
    data:
      script:
        IyEvYmluL2Jhc2gKYWRkdXNlciB1c2VyCg==
    ---
    apiVersion: virtualmachine.gdc.goog/v1
    kind: VirtualMachine
    metadata:
      name: VM_NAME
    spec:
      compute:
        virtualMachineType: MACHINE_TYPE
      disks:
      - virtualMachineDiskRef:
          name: VM_BOOT_DISK_NAME
        boot: true
        autoDelete: BOOT_DISK_AUTO_DELETE
      startupScripts:
      - name: add-user
        scriptSecretRef:
          name: add-user
      - name: add-to-sudoers
        script: |
          #!/bin/bash
          usermod -aG sudo user
    EOF
    

    Dalam contoh ini, variabel ditentukan sebagai berikut.

    VariabelDefinisi
    MANAGEMENT_API_SERVER File kubeconfig server Management API.
    PROJECT Project Distributed Cloud tempat Anda ingin membuat VM.
    VM_NAME Nama VM baru.
    VM_BOOT_DISK_NAME Nama boot disk VM baru.
    BOOT_DISK_IMAGE_NAME Nama image yang akan digunakan untuk boot disk VM baru.
    BOOT_DISK_SIZE Ukuran boot disk, seperti 20G.
    Nilai ini harus selalu lebih besar dari atau sama dengan minimumDiskSize image boot disk.
    BOOT_DISK_AUTO_DELETE true atau false, yang menunjukkan apakah boot disk otomatis dihapus saat instance VM dihapus.
    MACHINE_TYPE Jenis mesin yang telah ditetapkan untuk VM baru. Untuk memilih jenis mesin yang tersedia, jalankan perintah ini:
    kubectl --kubeconfig MANAGEMENT_API_SERVER get virtualmachinetype.virtualmachine.gdc.goog --namespace vm-system

Mengupdate VM yang ada dengan skrip startup

Anda juga dapat memperbarui VM yang ada dengan skrip startup. VM harus dimatikan sebelum Anda melakukan update.

Ikuti langkah-langkah untuk memperbarui properti VM dan perbarui kolom spec dengan skrip startup yang ingin Anda jalankan.

Melihat output skrip startup

  1. Ikuti langkah-langkah untuk terhubung ke VM.
  2. Jalankan perintah berikut di dalam VM tamu untuk mendapatkan log skrip startup yang Anda jalankan:

    sudo journalctl -u cloud-final
    

    Log skrip startup dimulai dengan hal berikut:

    Started to run the command: /var/lib/google/startup-scripts/<script-name> ...