Mengupgrade workload container untuk runtime yang lebih baik
Jika sudah memiliki beban kerja 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. Dengan konversi ini, Anda dapat menjalankan container ini di cluster GKE Autopilot.
Untuk melakukan konversi, edit Dockerfile dan file deployment_spec.yaml
yang dibuat saat Anda melakukan migrasi awal. Setelah diedit, Anda kemudian dapat
men-deploy beban kerja container di cluster Autopilot.
Tentang mengonversi beban kerja container
Prosedur untuk mengonversi beban kerja yang ada bergantung pada apakah Anda mengonversi beban kerja stateless atau beban kerja stateful.
Beban kerja stateful adalah beban kerja 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 mengetahui informasi selengkapnya.
Proses umum untuk mengonversi beban kerja yang ada mengharuskan Anda mengedit:
Dockerfile
- Tetapkan versi Migrate to Containers ke 1.15.0.
- Masukkan dua perintah
ADD
untuk menyalin filelogs.yaml
ke image container. - Masukkan perintah
RUN
untuk utilitasservicemanager_generate_config
.
deployment_spec.yaml
file ke:- Hapus definisi
hostPath
danvolumeMounts
untuk/sys/fs/cgroup
. - Hapus definisi
securityContext
. - Hapus definisi
readinessProbe
. - Anda dapat membiarkan definisi
mountPath
danconfigMap
untuklogs-config
, tetapi logging saat ini tidak berfungsi dengan pengelola layanan Linux yang disederhanakan.
- Hapus definisi
Untuk proses konversi spesifik, lihat bagian di bawah:
Mengonversi workload stateless
Contoh berikut menunjukkan cara mengonversi beban kerja container stateless:
Temukan direktori yang berisi artefak migrasi Anda yang sudah ada, termasuk file
deployment_spec.yaml
.Edit Dockerfile untuk menetapkan versi produk, menyalin file
logs.yaml
, dan menjalankan utilitasservicemanager_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" ]
Buka file
deployment_spec.yaml
di editor. Contoh:vi deployment_spec.yaml
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.
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"
Simpan file.
Pastikan cluster target memiliki akses baca ke registry image Docker seperti yang dijelaskan dalam Memastikan cluster target memiliki akses baca ke registry image Docker.
Build image yang telah diupdate dan kirim ke Container Registry dengan tag versi yang telah diupdate, sehingga Anda memiliki cukup waktu hingga proses selesai. Dalam contoh berikut, gambar berada di direktori saat ini:
gcloud builds submit --timeout 4h --tag gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL .
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"
Melihat pod yang sedang di-deploy ke cluster.
kubectl get pods
Mengonversi workload stateful
Contoh berikut menunjukkan cara mengonversi beban kerja container stateful:
Temukan direktori yang berisi artefak migrasi Anda yang sudah ada, termasuk file
deployment_spec.yaml
.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" ]
Buka file
deployment_spec.yaml
di editor. Contoh:vi deployment_spec.yaml
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
danvolumes
untukcgroups
dan membiarkan definisi yang tersisa.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
Simpan file.
Pastikan cluster target memiliki akses baca ke registry image Docker seperti yang dijelaskan dalam artikel Memastikan cluster target memiliki akses baca ke registry image Docker.
Build image yang telah diupdate dan kirim ke Container Registry dengan tag versi yang telah diupdate, sehingga Anda memiliki cukup waktu hingga proses selesai. Dalam contoh berikut, gambar berada di direktori saat ini:
gcloud builds submit --timeout 4h --tag gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL .
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 formulir:"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"
Melihat pod yang sedang di-deploy ke cluster.
kubectl get pods
Tugas pasca-konversi
Setelah mengonversi migrasi yang ada untuk menggunakan pengelola layanan Linux yang disederhanakan, Anda dapat mengubahnya menjadi:
- Perbarui layanan yang digunakan oleh beban kerja yang dimigrasikan.
- Tambahkan 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 memperbarui file services-config.yaml
di container berdasarkan perubahan yang dibuat di /etc/systemd
pada beban kerja yang dimigrasikan.
Untuk memperbarui image container bagi perubahan pada layanan yang ada:
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" ]
Build image yang telah diupdate dan kirim ke Container Registry dengan tag versi yang telah diupdate, sehingga Anda memiliki cukup waktu hingga proses selesai. Dalam contoh berikut, gambar berada di direktori saat ini:
gcloud builds submit --timeout 4h --tag gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL .
Deploy image yang baru di-build:
kubectl set image deployment/myWorkload my-app=gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL --record
Tambahkan layanan
Untuk menambahkan layanan ke image container:
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" ]
Build image yang telah diupdate dan kirim ke Container Registry dengan tag versi yang telah diupdate, sehingga Anda memiliki cukup waktu hingga proses selesai. Dalam contoh berikut, gambar berada di direktori saat ini:
gcloud builds submit --timeout 4h --tag gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL .
Deploy image yang baru di-build:
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 direktorim4a
. Jangan mengubah nama direktori.Gunakan bentuk perintah ini saat Anda pertama kali mengonversi migrasi untuk menggunakan pengelola layanan Linux yang disederhanakan.
update -u /.m4a/
: Memperbarui daftar layanan yang ada di direktorim4a
. Jangan mengubah nama direktori.add SERVICE_NAME -u /.m4a/
: Menambahkan nama layanan ke migrasi dan menulis konfigurasi ke direktorim4a
. Jangan mengubah nama direktori.Untuk menambahkan beberapa layanan, tambahkan beberapa perintah
RUN /servicemanager_generate_config
, satu per layanan.
Langkah selanjutnya
- Pelajari runtime baru yang ditingkatkan.