Использование Skaffold с использованием Minikube без реестра - PullRequest
0 голосов
/ 16 мая 2018

Я наткнулся на Скаффолда, пытаясь упростить локальную разработку образов Docker. По сути, мы хотим иметь возможность быстро выполнять итерации образа и развертывать его, используя существующую стабильную версию рулевой диаграммы.

В документации сказано:

https://github.com/GoogleContainerTools/skaffold#installation

  1. Реестр образов Docker. Ваш докер-клиент должен быть настроен для отправки на внешний докер хранилище изображений. Если вы используете мини-куб или Docker для рабочего стола кластер, вы можете пропустить это требование.

Однако, когда я пытаюсь запустить пример examples/helm-deployment, он на самом деле пытается подключиться к реестру:

$ skaffold dev
...
The push refers to repository [docker.io/library/skaffold-helm]
b3fb485368bf: Preparing
6f67560e4591: Preparing
d626a8ad97a1: Preparing
WARN[0012] run: build: build step: running push: denied: requested access to the resource is denied

Всегда ли мне нужен реестр, даже используя Minikube и Skaffold?

Ответы [ 2 ]

0 голосов
/ 19 июня 2018

С помощью 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 уже обеспечивает большое удобство для быстрой разработки и развертывания приложений.

Надеюсь, это поможет.

0 голосов
/ 16 мая 2018

Нет, вам не нужен внешний реестр.

С помощью следующей команды вы сможете использовать docker на вашем компьютере mac / linux, общаясь с демоном docker внутри виртуальной машины minikube:

eval $(minikube docker-env)

И изображение создается в мини-кубе напрямую, когда docker build.

ОТ Локальный запуск Kubernetes через мини-куб

...