С помощью skaffold вам не нужен ни один реестр, если вы хотите выполнить развертывание в minikube.По умолчанию плавно помещает изображение в мини-куб без какого-либо внешнего реестра.
Рассмотрим следующий файл deployment.yaml
:
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: petstore-frontend
labels:
app: petstore
tier: frontend
spec:
replicas: 1
selector:
matchLabels:
app: petstore
tier: frontend
template:
metadata:
labels:
app: foo
tier: frontend
spec:
containers:
- name: frontend
image: petstore/frontend
imagePullPolicy: Always
ports:
- containerPort: 80
Обратите внимание, что image
поле не содержит никакого тега, потому что skaffold вставит его для вас.
Минимальный файл skaffold.yaml
будет выглядеть следующим образом:
apiVersion: skaffold/v1alpha2
kind: Config
profiles:
- name: minikube
build:
artifacts:
- imageName: petstore/frontend
deploy:
manifests:
- deployment.yaml
Здесь imageName
должен соответствовать image
значение поля из deployment.yaml
файла.
Теперь вы можете просто запустить skaffold run -p minikube
, и он создаст ваш образ, перенести его в мини-куб и применить развертывание.
Однако, при развертывании с помощью диаграмм Helm есть небольшие, но важные вещи, которые вы также должны указать.
Рассмотрите следующий шаблон deployment.yaml
(я опущил некоторые поля для краткости):
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: {{ template "petstore-frontend.fullname" . }}
labels:
# <labels>
spec:
replicas: 1
selector:
matchLabels:
# <labels>
template:
metadata:
labels:
# <labels>
spec:
containers:
- name: {{ template "petstore-frontend.name" . }}
image: {{ .Values.image.repository }}{{ if .Values.image.tag }}:{{ .Values.image.tag }}{{ end }}
imagePullPolicy: Always
ports:
- containerPort: 80
Важно иметь возможность указать изображение без какого-либо тега, поэтому skaffold может внедрить его для вас.
Тогда файл skaffold.yaml
будет выглядеть так:
apiVersion: skaffold/v1alpha2
kind: Config
profiles:
- name: minikube
build:
artifacts:
- imageName: petstore/frontend
deploy:
helm:
releases:
- name: petstore-frontend
chartPath: charts/petstore-frontend
values:
"image.repository": petstore/frontend
setValues:
"image.tag": ""
Здесь image.repository
должно быть точно таким же, как imageName
в artifacts
section, а также image.tag
задается пустая строка, чтобы, как было сказано выше, разрешить скаффолду вводить ее.
В заключение стоит отметить, что скаффолд все еще находится в альфа-режиме, поэтомуAPI может измениться, и, возможно, эти «трюки» больше не понадобятся.Тем не менее, skaffold уже обеспечивает большое удобство для быстрой разработки и развертывания приложений.
Надеюсь, это поможет.