향상된 런타임을 위해 컨테이너 워크로드 업그레이드
Migrate to Containers 버전 1.7.x 및 1.8.x를 사용하여 생성된 기존 컨테이너 워크로드가 있는 경우 간소화된 Linux 서비스 관리자를 사용하도록 변환할 수 있습니다. 이 변환을 통해 GKE Autopilot 클러스터에서 이러한 컨테이너를 실행할 수 있습니다.
변환을 수행하려면 원래 마이그레이션을 수행할 때 만든 Dockerfile과 deployment_spec.yaml
파일을 수정합니다. 수정한 후에 컨테이너 워크로드를 Autopilot 클러스터에 배포하면 됩니다.
컨테이너 워크로드 변환 정보
기존 워크로드를 변환하는 절차는 스테이트리스(Stateless) 워크로드를 변환하는지 아니면 스테이트풀(Stateful) 워크로드를 변환하는지 여부에 따라 달라집니다.
스테이트풀(Stateful) 워크로드는 상태 정보를 유지관리하거나 저장합니다. 스테이트풀(Stateful) 워크로드의 경우 spec.containers.volumeMounts
의 StatefulSet
을 사용하여 추가 볼륨을 마운트하는 경우가 많습니다.
/sys/fs/cgroup
의 볼륨 마운트 정의를 삭제하는 동안에도 volumeMounts
정의를 유지해야 합니다.
자세한 내용은 외부 볼륨 마운트를 참조하세요.
기존 워크로드를 변환하려면 일반적으로 다음을 수정해야 합니다.
Dockerfile
- Migrate to Containers 버전을 1.15.0으로 설정합니다.
ADD
명령어 두 개를 삽입하여logs.yaml
파일을 컨테이너 이미지로 복사합니다.servicemanager_generate_config
유틸리티에 대해RUN
명령어를 삽입합니다.
deployment_spec.yaml
파일/sys/fs/cgroup
에 대한hostPath
및volumeMounts
정의를 삭제합니다.securityContext
정의를 삭제합니다.readinessProbe
정의를 삭제합니다.logs-config
에 대한mountPath
및configMap
정의를 그대로 둘 수 있지만 현재 간소화된 Linux 서비스 관리자에서는 로깅이 작동하지 않습니다.
구체적인 변환 프로세스는 아래 섹션을 참조하세요.
스테이트리스(Stateless) 워크로드 변환
다음 예시에서는 스테이트리스(Stateless) 컨테이너 워크로드를 변환하는 방법을 보여줍니다.
deployment_spec.yaml
파일 등 기존 마이그레이션 아티팩트가 포함된 디렉터리를 찾습니다.Dockerfile을 수정하여 제품 버전을 설정하고,
logs.yaml
파일을 복사하고,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" ]
편집기에서
deployment_spec.yaml
파일을 엽니다. 예를 들면 다음과 같습니다.vi deployment_spec.yaml
파일에서 다음 섹션을 찾아 표시된 줄을 삭제합니다.
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.
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"
파일을 저장합니다.
대상 클러스터에 Docker 이미지 레지스트리에 대한 읽기 액세스 권한이 있는지 확인에 설명된 대로 대상 클러스터에 Docker 이미지 레지스트리에 대한 읽기 액세스 권한이 있는지 확인합니다.
업데이트된 이미지를 빌드하고 업데이트된 버전 태그와 함께 Container Registry에 푸시하여 빌드가 완료될 때까지 기다립니다. 다음 예시에서는 이미지가 현재 디렉터리에 있습니다.
gcloud builds submit --timeout 4h --tag gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL .
컨테이너를 배포합니다.
kubectl apply -f deployment_spec.yaml
deployment_spec.yaml
에 필요한 변경사항을 적용하지 않고 배포 사양을 Autopilot 클러스터에 적용하면 다음과 같은 형식의 오류 메시지가 표시됩니다."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"
클러스터에 배포 중인 포드를 확인합니다.
kubectl get pods
스테이트풀(Stateful) 워크로드 변환
다음 예시에서는 스테이트풀(Stateful) 컨테이너 워크로드를 변환하는 방법을 보여줍니다.
deployment_spec.yaml
파일 등 기존 마이그레이션 아티팩트가 포함된 디렉터리를 찾습니다.Dockerfile을 수정하여 제품 버전을 설정하고
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" ]
편집기에서
deployment_spec.yaml
파일을 엽니다. 예를 들면 다음과 같습니다.vi deployment_spec.yaml
파일에서 다음 3개의 섹션을 찾아 표시된 줄을 삭제합니다.
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
cgroups
에 대한volumeMounts
및volumes
정의만 삭제하고 나머지 정의는 그대로 둡니다.다음 줄을 추가하여
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
파일을 저장합니다.
대상 클러스터에 Docker 이미지 레지스트리에 대한 읽기 액세스 권한이 있는지 확인에 설명된 대로 대상 클러스터에 Docker 이미지 레지스트리에 대한 읽기 액세스 권한이 있는지 확인합니다.
업데이트된 이미지를 빌드하고 업데이트된 버전 태그와 함께 Container Registry에 푸시하여 빌드가 완료될 때까지 기다립니다. 다음 예시에서는 이미지가 현재 디렉터리에 있습니다.
gcloud builds submit --timeout 4h --tag gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL .
컨테이너를 배포합니다.
kubectl apply -f deployment_spec.yaml
deployment_spec.yaml
에 필요한 변경사항을 적용하지 않고 배포 사양을 Autopilot 클러스터에 적용하면 다음과 같은 형식의 오류 메시지가 표시됩니다."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"
클러스터에 배포 중인 포드를 확인합니다.
kubectl get pods
변환 후 작업
간소화된 Linux 서비스 관리자를 사용하도록 기존 마이그레이션을 변환한 후에는 다음 작업을 하도록 수정할 수 있습니다.
- 마이그레이션된 워크로드에서 사용하는 서비스를 업데이트합니다.
- 새로운 서비스를 추가합니다.
두 시나리오 모두 Dockerfile을 수정한 후 컨테이너 이미지를 다시 빌드해야 합니다.
서비스 업데이트
이 섹션에서는 마이그레이션된 워크로드의 /etc/systemd
에 적용된 변경사항에 따라 Dockerfile을 수정하여 컨테이너의 services-config.yaml
파일을 업데이트합니다.
기존 서비스 변경사항의 컨테이너 이미지를 업데이트하려면 다음 안내를 따르세요.
Dockerfile에
servicemanager_generate_config
명령어를 추가합니다.... 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" ]
업데이트된 이미지를 빌드하고 업데이트된 버전 태그와 함께 Container Registry에 푸시하여 빌드가 완료될 때까지 기다립니다. 다음 예시에서는 이미지가 현재 디렉터리에 있습니다.
gcloud builds submit --timeout 4h --tag gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL .
새로 빌드된 이미지를 배포합니다.
kubectl set image deployment/myWorkload my-app=gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL --record
서비스 추가
컨테이너 이미지에 서비스를 추가하려면 다음 안내를 따르세요.
Dockerfile에
servicemanager_generate_config
명령어를 추가합니다.... 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" ]
업데이트된 이미지를 빌드하고 업데이트된 버전 태그와 함께 Container Registry에 푸시하여 빌드가 완료될 때까지 기다립니다. 다음 예시에서는 이미지가 현재 디렉터리에 있습니다.
gcloud builds submit --timeout 4h --tag gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL .
새로 빌드된 이미지를 배포합니다.
kubectl set image deployment/myWorkload my-app=gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL --record
servicemanager_generate_config 구문
servicemanager_generate_config
유틸리티에는 다음 옵션이 있습니다.
build-all -o /.m4a/
: 마이그레이션을 다시 빌드하고m4a
디렉터리에 구성을 씁니다. 디렉터리의 이름을 변경하지 마세요.간소화된 Linux 서비스 관리자를 사용하도록 마이그레이션을 처음 변환할 때 이 명령어 형식을 사용합니다.
update -u /.m4a/
:m4a
디렉터리에서 기존 서비스 목록을 업데이트합니다. 디렉터리의 이름을 변경하지 마세요.add SERVICE_NAME -u /.m4a/
: 마이그레이션에 서비스 이름을 추가하고 구성을m4a
디렉터리에 씁니다. 디렉터리의 이름을 변경하지 마세요.여러 서비스를 추가하려면 여러
RUN /servicemanager_generate_config
명령어를 서비스당 하나씩 추가합니다.
다음 단계
- 새 향상된 런타임 알아보기