Я хочу развернуть образ из облака в кластере kubernetes. Я успешно создал образ докера в файле cloudbuild.yaml
. Теперь задача состоит в том, как использовать изображение в deploy.yaml
Задача завершается с ошибкой, указывающей на то, что переменные не были заменены должным образом.
Вот выдержки из конфига:
облачная сборка.yaml
//push image to container registry
....
.......
- id: "deploy container image to GKE"
name: "gcr.io/cloud-builders/gke-deploy"
args: [
"--cluster", "${_CLUSTER_NAME}",
"run",
"--filename", "deployment.yaml",
"--image", "us-west1-docker.pkg.dev/$PROJECT_ID/abc/abc-server-${_DEPLOYMENT_TYPE}:$COMMIT_SHA",
"--location", "${_COMPUTE_ZONE}"
]
развертывание.yaml
....
........
spec:
containers:
- name: idr-server-k8ts-test
image: us-west1-docker.pkg.dev/$PROJECT_ID/abc/abc-server-${_DEPLOYMENT_TYPE}:$COMMIT_SHA
ports:
- containerPort: 8080
Переменные, определенные в триггере сборки
_CLUSTER_NAME
_DEPLOYMENT_TYPE
_COMPUTE_ZONE
Я получаю сообщение об ошибке:
Error: failed to prepare deployment: failed to update container of objects: failed to parse reference from image "us-west1-docker.pkg.dev/$PROJECT_ID/abc/abc-server-${_DEPLOYMENT_TYPE}:$COMMIT_SHA": could not parse reference: us-west1-docker.pkg.dev/$PROJECT_ID/abc/abc-server-${_DEPLOYMENT_TYPE}:$COMMIT_SHA
Kubernetes не понимает никаких переменных, записанных в файлах манифеста. Имя вашего изображения (us-west1-docker.pkg.dev/$PROJECT_ID/abc/abc-server-${_DEPLOYMENT_TYPE}:$COMMIT_SHA
) содержит переменные среды. Простые манифесты требуют постоянных/жестко закодированных значений.
Если вы хотите динамически заполнять свои манифесты с помощью переменных среды, создайте рулевую диаграмму и примените ее в кластере.
Попробуйте один раз, как с помощью ""
- name: "gcr.io/cloud-builders/gke-deploy"
args:
- run
- --filename=deployment.yaml
- --image=harshmanvar/gdg-rajkot:$SHORT_SHA
- --expose=80
- --app=nodejs-hello-demo
- --location=asia-east1-a
- --cluster=cluster-1
Дополнительный вариант:
облачная сборка.yaml
substitutions:
_CLOUDSDK_COMPUTE_ZONE: us-central1-c # default value
_CLOUDSDK_CONTAINER_CLUSTER: standard-cluster-1 # default value
steps:
- id: 'set test core image in yamls'
name: 'ubuntu'
args: ['bash','-c','sed -i "s,TEST_IMAGE_NAME,gcr.io/$PROJECT_ID/$REPO_NAME/$BRANCH_NAME:$SHORT_SHA," deployment.yaml']
- name: 'gcr.io/cloud-builders/kubectl'
args: ['apply', '-f', 'deployment.yaml']
env:
- 'CLOUDSDK_COMPUTE_ZONE=${_CLOUDSDK_COMPUTE_ZONE}'
- 'CLOUDSDK_CONTAINER_CLUSTER=${_CLOUDSDK_CONTAINER_CLUSTER}'
развертывание.yaml
containers:
- image: TEST_IMAGE_NAME
name: test-image
ports:
Таким образом, облачная сборка заменит TEST_IMAGE_NAME
в файле deployment.yaml, и обновленный файл будет развернут в GKE.
Вы можете найти пример: https://github.com/harsh4870/basic-ci-cd-cloudbuild
какие-либо обновления по этому поводу? не стесняйтесь, пожалуйста, обновите статус вопроса, если какой-либо из приведенных ниже ответов решит вашу проблему.