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 filelogs.yaml
ke image container. - Masukkan perintah
RUN
untuk utilitasservicemanager_generate_config
.
File
deployment_spec.yaml
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 tertentu, lihat bagian di bawah:
Mengonversi workload stateless
Contoh berikut menunjukkan cara mengonversi workload penampung stateless:
Temukan direktori yang berisi artefak migrasi yang 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 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 .
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"
Lihat pod yang di-deploy ke cluster.
kubectl get pods
Mengonversi workload stateful
Contoh berikut menunjukkan cara mengonversi workload penampung stateful:
Temukan direktori yang berisi artefak migrasi yang 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 lainnya.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 Memastikan cluster target memiliki akses baca ke registry image Docker.
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 .
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"
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:
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 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 .
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:
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 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 .
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 direktorim4a
. 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 direktorim4a
. Jangan ubah nama direktori.add SERVICE_NAME -u /.m4a/
: Menambahkan nama layanan ke migrasi dan menulis konfigurasi ke direktorim4a
. Jangan ubah nama direktori.Untuk menambahkan beberapa layanan, tambahkan beberapa perintah
RUN /servicemanager_generate_config
, satu per layanan.
Langkah selanjutnya
- Pelajari runtime yang disempurnakan baru.