#kubernetes #kubernetes-helm #skaffold
#kubernetes #kubernetes-helm #skaffold
Вопрос:
Мы пытаемся настроить локальную среду разработки с несколькими приложениями микросервисов под управлением Skaffold. Нам удалось сделать это с помощью base Skaffold, используя (немного устаревший) учебник на https://github.com/ahmetb/skaffold-from-laptop-to-cloud. И чтобы заставить Skaffold отправлять изображения в локальное хранилище без Helm, все, что мне нужно было сделать, это настроить imageName на использование чего-то вроде localhost:5000/image_name.
Но с Helm, ну…. Я настроил очень грубую установку Helm (ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: я еще не очень хорошо знаком с Helm), просто изменив skaffold YAML на использование Helm и сбросив все .Файлы развертывания YAML и сервиса были помещены в каталог Helm chart / templates, и это привело к сбою.
Затем Skaffold успешно создает любые модули, которые полагаются на исходное внешнее изображение (например, redis), но затем всякий раз, когда что-либо использует изображение, сгенерированное из локального файла Dockerfile, оно застревает и выдает эту ошибку:
Не удалось извлечь изображение «localhost: 5000 / k8s-skaffold / php-test»: ошибка rpc: code = Неизвестно desc = Ответ с ошибкой от daemon: Gethttp://localhost:5000/v2 /: набрать tcp [::1]:5000: подключиться: отказано в подключении
Насколько я могу судить, это ошибка, которая возникает, когда мы не инициализировали локальное хранилище изображений Docker — но с версией, отличной от Helm, нам не нужно запускать локальное хранилище изображений, Skaffold просто выполняет это волшебство. Что является частью привлекательности Skaffold.
Итак, как мы можем автоматически заставить Skaffold создавать диаграммы Helm, которые создаются и извлекаются из локального хранилища? (Как уже отмечалось, это может быть связано с моим незнанием Helm. Если да, я приношу извинения.)
Skaffold YAML — это:
apiVersion: skaffold/v1beta7
kind: Config
build:
tagPolicy:
sha256: {}
artifacts:
- image: localhost:5000/k8s-skaffold/php-test
context: voting-app/php-test
deploy:
helm:
releases:
- name: php-help-test
chartPath: helm
#wait: true
#valuesFiles:
#- helm-skaffold-values.yaml
values:
image: localhost:5000/k8s-skaffold/php-test
#recreatePods will pass --recreate-pods to helm upgrade
#recreatePods: true
#overrides builds an override values.yaml file to run with the helm deploy
#overrides:
# some:
# key: someValue
#setValues get appended to the helm deploy with --set.
#setValues:
#some.key: someValue
И значения диаграммы Helm.yaml по умолчанию предоставляется сгенерированной диаграммой. Я также могу предоставить файл Dockerfile, если это необходимо, но он просто извлекается из этого изображения.
Ответ №1:
Вы не можете использовать localhost
в своем определении изображения. Ради тестирования вы можете попробовать использовать ip хоста, на котором запущен ваш частный реестр, скажем, если хост имеет адрес 222.0.0.2, тогда используйте image: 222.0.0.2:5000/k8s-skaffold/php-test
.
Конечно, нежелательно жестко кодировать адрес, поэтому лучший способ — полностью исключить часть «хост»;
image: k8s-skaffold/php-test:v0.1
В этом случае ваш плагин CRI (Container Runtime Interface), например, попробует последовательность серверов docker.io
. Серверы настраиваются, но, к сожалению, я не знаю, как настроить это для «docker», поскольку я использую cri-o
сам.
Комментарии:
1. Что ж… Мы можем использовать localhost в Skaffold без Helm и делать. Это работает отлично, и, похоже, в этом суть Skaffold. С Skaffold БЕЗ Helm нам не нужно запускать частный реестр, он автоматически создает его и загружает изображения без дополнительной предварительной настройки. Итак, я не уверен, относится ли этот ответ к Skaffold или просто обсуждает, как вы будете работать с базовым Kubernetes / Docker и обычным локальным репозиторием.