Mengupgrade workload container untuk runtime yang ditingkatkan

Jika sudah memiliki workload container yang dibuat menggunakan Migrate to Containers versi 1.7.x dan 1.8.x, Anda dapat mengonversinya untuk menggunakan pengelola layanan Linux yang disederhanakan. Konversi ini memungkinkan Anda menjalankan penampung ini di cluster GKE Autopilot.

Untuk melakukan konversi, edit Dockerfile dan file deployment_spec.yaml yang dibuat saat Anda melakukan migrasi asli. Setelah diedit, Anda dapat men-deploy workload container di cluster Autopilot.

Tentang mengonversi workload container

Prosedur untuk mengonversi workload yang ada bergantung pada apakah Anda mengonversi workload stateless atau workload stateful.

Workload stateful adalah workload yang mempertahankan atau menyimpan informasi status. Untuk workload stateful, Anda sering memasang volume tambahan menggunakan StatefulSet di spec.containers.volumeMounts. Pastikan untuk mempertahankan definisi volumeMounts sekaligus menghapusnya untuk /sys/fs/cgroup. Lihat Memasang Volume Eksternal untuk informasi selengkapnya.

Proses umum untuk mengonversi beban kerja yang ada mengharuskan Anda mengedit:

  • Dockerfile

    • Tetapkan versi Migrate to Containers ke 1.15.0.
    • Sisipkan dua perintah ADD untuk menyalin file logs.yaml ke image container.
    • Masukkan perintah RUN untuk utilitas servicemanager_generate_config.
  • File deployment_spec.yaml ke:

    • Hapus definisi hostPath dan volumeMounts untuk /sys/fs/cgroup.
    • Hapus definisi securityContext.
    • Hapus definisi readinessProbe.
    • Anda dapat membiarkan definisi mountPath dan configMap untuk logs-config, tetapi logging saat ini tidak berfungsi dengan pengelola layanan Linux yang disederhanakan.

Untuk proses konversi tertentu, lihat bagian di bawah:

Mengonversi workload stateless

Contoh berikut menunjukkan cara mengonversi workload penampung stateless:

  1. Temukan direktori yang berisi artefak migrasi yang ada, termasuk file deployment_spec.yaml.

  2. Edit Dockerfile untuk menetapkan versi produk, menyalin file logs.yaml, dan menjalankan utilitas servicemanager_generate_config:

    ...
    # Set the product version to 1.15.0:
    FROM anthos-migrate.gcr.io/v2k-run-embedded:v1.15.0 as migrate-for-anthos-runtime
    
    ...
    
    ADD blocklist.yaml /.m4a/blocklist.yaml
    # Insert the ADD commands to copy the `logs.yaml` file to the container image:
    ADD logs.yaml /code/config/logs/logsArtifact.yaml
    ADD logs.yaml /code/config/logs/logs.yaml
    
    # Insert the RUN command for servicemanager_generate_config:
    RUN /servicemanager_generate_config build-all -o /.m4a/
    
    # Migrate to Containers image includes entrypoint
    ENTRYPOINT [ "/.v2k.go" ]
  3. Buka file deployment_spec.yaml di editor. Contoh:

    vi  deployment_spec.yaml
  4. Temukan bagian berikut dalam file dan hapus baris yang ditunjukkan:

    apiVersion: apps/v1 
    kind: Deployment
    metadata: 
      creationTimestamp: null 
      name: IMAGE_NAME  
          
        spec:
          containers:
          - image: gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL
            name: IMAGE_NAME
    # Delete the following lines:
            readinessProbe:
              exec:
                command:
                - /code/ready.sh
            resources: {}
            securityContext:
              privileged: true
            volumeMounts:
            - mountPath: /sys/fs/cgroup
              name: cgroups
            - mountPath: /code/config/logs
              name: logs-config
          volumes:
          - hostPath:
              path: /sys/fs/cgroup
              type: Directory
            name: cgroups
          - configMap:
              name: suitecrm-crddefault-logs
            name: logs-config
    # Stop the delete here.
  5. Tambahkan baris di bawah untuk menetapkan variabel lingkungan HC_V2K_SERVICE_MANAGER.

    spec:
      containers:
      - image: gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL
        name: IMAGE_NAME
    # Add the following lines:
        env:
          - name: HC_V2K_SERVICE_MANAGER
            value: "true"
  6. Simpan file.

  7. Pastikan cluster target memiliki akses baca ke registry image Docker seperti yang dijelaskan dalam Memastikan cluster target memiliki akses baca ke registry image Docker.

  8. Build image yang telah diupdate dan kirim ke Container Registry dengan tag versi yang diupdate, pastikan Anda memberikan waktu yang cukup untuk menyelesaikan build. Dalam contoh berikut, gambar berada di direktori saat ini:

    gcloud builds submit --timeout 4h --tag gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL .
  9. Deploy container:

    kubectl apply -f deployment_spec.yaml

    Jika Anda menerapkan spesifikasi deployment ke cluster Autopilot tanpa perubahan yang diperlukan di deployment_spec.yaml, Anda akan melihat pesan error dalam bentuk:

    "Trying to run without root privileges is not possible. Did you try to use the new runtime? In that case please pass the environment variable HC_V2K_SERVICE_MANAGER=true to the pod"

  10. Lihat pod yang di-deploy ke cluster.

    kubectl get pods

Mengonversi workload stateful

Contoh berikut menunjukkan cara mengonversi workload penampung stateful:

  1. Temukan direktori yang berisi artefak migrasi yang ada, termasuk file deployment_spec.yaml.

  2. Edit Dockerfile untuk menetapkan versi produk dan menjalankan utilitas servicemanager_generate_config:

    ...
    # Set the product version to 1.15.0:
    FROM anthos-migrate.gcr.io/v2k-run-embedded:v1.15.0 as migrate-for-anthos-runtime
    
    ...
    
    ADD blocklist.yaml /.m4a/blocklist.yaml
    # Insert the ADD commands to copy the `logs.yaml` file to the container image:
    ADD logs.yaml /code/config/logs/logsArtifact.yaml
    ADD logs.yaml /code/config/logs/logs.yaml
    
    # Insert the RUN command for servicemanager_generate_config:
    RUN /servicemanager_generate_config build-all -o /.m4a/
    
    # Migrate to Containers image includes entrypoint
    ENTRYPOINT [ "/.v2k.go" ]
  3. Buka file deployment_spec.yaml di editor. Contoh:

    vi  deployment_spec.yaml
  4. Temukan tiga bagian berikut dalam file dan hapus baris yang ditunjukkan:

    apiVersion: apps/v1 
    kind: StatefulSet  
    ... 
    spec: 
      containers: 
      - image: gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL 
        name: IMAGE_NAME 
    # Delete the following lines:
        readinessProbe: 
          exec: 
            command: 
            - /code/ready.sh 
        resources: {} 
        securityContext: 
          privileged: true 
    # Stop the delete here.
        volumeMounts: 
    # Delete the following lines:
        - mountPath: /sys/fs/cgroup 
          name: cgroups 
    # Stop the delete here.
        - mountPath: /opt/suitecrm-7.10.5-0/mysql/data 
          name: data-pvc-0-1b12-d0af-48b3-9f5e-6c25fa5 
          subPath: opt/suitecrm-7.10.5-0/mysql/data 
      volumes:
    # Delete the following lines:
      - hostPath:
          path: /sys/fs/cgroup 
          type: Directory 
        name: cgroups 
    # Stop the delete here.
      - name: data-pvc-2-d0af-48b3-9f5e09c25fa5 
        persistentVolumeClaim: 
          claimName: data-pvc-0-1a2-d0af-48b3-9f5e-605fa5

    Perhatikan bahwa Anda hanya menghapus definisi volumeMounts dan volumes untuk cgroups dan membiarkan definisi lainnya.

  5. Tambahkan baris berikut untuk menetapkan variabel lingkungan HC_V2K_SERVICE_MANAGER:

    spec: 
      containers: 
      - image: gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL
        name: IMAGE_NAME 
    # Add the following lines:
        env:
        - name: HC_V2K_SERVICE_MANAGER 
          value: "true" 
    # Stop the add here.
        volumeMounts: 
        - mountPath: /opt/suitecrm-7.10.5-0/mysql/data 
          name: data-pvc-0-1b12-d0af-48b3-9f5e-6c25fa5 
          subPath: opt/suitecrm-7.10.5-0/mysql/data 
      volumes:
      - name: data-pvc-2-d0af-48b3-9f5e09c25fa5 
        persistentVolumeClaim: 
          claimName: data-pvc-0-1a2-d0af-48b3-9f5e-605fa5
  6. Simpan file.

  7. Pastikan cluster target memiliki akses baca ke registry image Docker seperti yang dijelaskan dalam Memastikan cluster target memiliki akses baca ke registry image Docker.

  8. Build image yang diperbarui dan kirim ke Container Registry dengan tag versi yang diperbarui, pastikan Anda memberikan cukup waktu untuk menyelesaikan build. Dalam contoh berikut, gambar berada di direktori saat ini:

    gcloud builds submit --timeout 4h --tag gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL .
  9. Deploy container:

    kubectl apply -f deployment_spec.yaml

    Jika Anda menerapkan spesifikasi deployment ke cluster Autopilot tanpa perubahan yang diperlukan di deployment_spec.yaml, Anda akan melihat pesan error dalam bentuk:

    "Trying to run without root privileges is not possible. Did you try to use the new runtime? In that case please pass the environment variable HC_V2K_SERVICE_MANAGER=true to the pod"

  10. Lihat pod yang di-deploy ke cluster.

    kubectl get pods

Tugas pasca-konversi

Setelah mengonversi migrasi yang ada untuk menggunakan pengelola layanan Linux yang disederhanakan, Anda mungkin ingin mengubahnya menjadi:

  • Perbarui layanan yang digunakan oleh beban kerja yang dimigrasikan.
  • Menambahkan layanan baru.

Untuk kedua skenario tersebut, Anda harus mengedit Dockerfile, lalu mem-build ulang image container.

Memperbarui layanan

Di bagian ini, Anda akan mengedit Dockerfile untuk mengupdate file services-config.yaml di penampung berdasarkan perubahan yang dilakukan di /etc/systemd pada beban kerja yang dimigrasikan.

Untuk memperbarui image container untuk perubahan pada layanan yang ada:

  1. Tambahkan perintah servicemanager_generate_config di Dockerfile:

    ...
    FROM anthos-migrate.gcr.io/v2k-run-embedded:v1.15.0 as migrate-for-anthos-runtime
    
    ...
    
    ADD blocklist.yaml /.m4a/blocklist.yaml
    
    # Use the update command for servicemanager_generate_config to update the configuration:
    RUN /servicemanager_generate_config update -u /.m4a/
    
    # Migrate to Containers image includes entrypoint
    ENTRYPOINT [ "/.v2k.go" ]
  2. Build image yang telah diupdate dan kirim ke Container Registry dengan tag versi yang diupdate, pastikan Anda memberikan waktu yang cukup untuk menyelesaikan build. Dalam contoh berikut, gambar berada di direktori saat ini:

    gcloud builds submit --timeout 4h --tag gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL .
  3. Deploy image yang baru dibuat:

    kubectl set image deployment/myWorkload my-app=gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL --record

Tambahkan layanan

Untuk menambahkan layanan ke image container:

  1. Tambahkan perintah servicemanager_generate_config di Dockerfile:

    ...
    FROM anthos-migrate.gcr.io/v2k-run-embedded:v1.15.0 as migrate-for-anthos-runtime
    
    ...
    
    ADD blocklist.yaml /.m4a/blocklist.yaml
    
    # This example adds the redis-server service.
    # Add the following lines to install redis-server.
    RUN apt-get update && apt-get -y install redis-server
    
    # Use the servicemanager_generate_config add command to add
    # redis-server to the configuration:
    RUN /servicemanager_generate_config add redis-server -u /.m4a/
    
    # Migrate to Containers image includes entrypoint
    ENTRYPOINT [ "/.v2k.go" ]
  2. Build image yang telah diupdate dan kirim ke Container Registry dengan tag versi yang diupdate, pastikan Anda memberikan waktu yang cukup untuk menyelesaikan build. Dalam contoh berikut, gambar berada di direktori saat ini:

    gcloud builds submit --timeout 4h --tag gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL .
  3. Deploy image yang baru dibuat:

    kubectl set image deployment/myWorkload my-app=gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL --record

Sintaksis servicemanager_generate_config

Utilitas servicemanager_generate_config menggunakan opsi berikut:

  • build-all -o /.m4a/: Mem-build ulang migrasi dan menulis konfigurasi ke direktori m4a. Jangan ubah nama direktori.

    Gunakan bentuk perintah ini saat pertama kali mengonversi migrasi untuk menggunakan pengelola layanan Linux yang disederhanakan.

  • update -u /.m4a/: Memperbarui daftar layanan yang ada di direktori m4a. Jangan ubah nama direktori.

  • add SERVICE_NAME -u /.m4a/: Menambahkan nama layanan ke migrasi dan menulis konfigurasi ke direktori m4a. Jangan ubah nama direktori.

    Untuk menambahkan beberapa layanan, tambahkan beberapa perintah RUN /servicemanager_generate_config, satu per layanan.

Langkah selanjutnya