Что такое простой процесс сборки и развертывания с использованием kubectl? - PullRequest
0 голосов
/ 10 февраля 2020

Я пытаюсь понять, что является хорошей практикой для того, что, как я предполагаю, является довольно распространенным сценарием построения и развертывания развертывания kubernetes с использованием kubectl.

Сценарий:

  • Я хочу построить проект и развернуть его в своем кластере.
  • У меня есть файл yaml с моим развертыванием (и связанными с ним вещами) и некоторый код sr c с Dockerfile.
  • Я хочу не использовать : последний в теге изображения в соответствии с Рекомендация передовой практики и вместо этого использовать уникальный тег для этого изображения.
  • У меня легко доступ к уникальному идентификатору, поступающему из CI или git sha, который доступен как переменная среды во время сборки.

Так что это выглядит довольно просто:

docker build -t my-registry/my-app:${BUILD_NUMBER} .
docker push my-registry/my-app:${BUILD_NUMBER}
kubectl apply -f kube.yaml

За исключением того, что нет никакого собственного способа сообщить kubectl, какое имя изображения использовать.

Я понимаю, что kubectl не поддерживает подстановку шаблонов переменных среды , но я никогда не видел только сценарий использования из них теги age упоминаются в явном виде.

Я могу использовать замену sed , но это кажется go вопреки духу «без поддержки переменных шаблонов», и я едва понимаю, что делает sed, когда я напишите это, чтобы я пожалел следующего разработчика, который должен читать мои команды.

Я чувствую, что для такого базового сценария c «Я хочу создать и развернуть в своем кластере» может быть более простое решение это не похоже на борьбу с kubectl.

Skaffold отлично справляется с назначением тега и дайджеста для каждого встроенного изображения, но было бы неплохо начать с простого процесса, прежде чем вводить более высокий уровень. инструменты уровня.

  • Кроме "Использовать Skaffold" или "Использовать Helm", что мне нужно сделать, чтобы иметь простой процесс build + deploy?
  • Хорошо ли создавать шаблоны yaml, либо с помощью sed , mo или другие инструменты для замены?
  • Есть ли примеры проектов, в которых есть простой конвейер сборки и развертывания, использующий только kubectl и, возможно, kustomize?

kube.yaml (обратите внимание на отсутствие версии на названии изображения)

apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: example
  name: my-app
spec:
  minReadySeconds: 2
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      name: my-app
      labels:
        app: my-app
    spec:
      containers:
        - name: my-app
          image: "my-registry/my-app"
          ports:
            - containerPort: 3000
          resources:
            limits:
              cpu: 300m
              memory: 600m
            requests:
              cpu: 50m
              memory: 100m

Ответы [ 2 ]

1 голос
/ 10 февраля 2020

Является ли kubectl set image <deployment> <image> опцией? Он делает то, что вы ищете, но не будет отражен в вашей локальной копии kube.yaml, поэтому вам нужно указать фиктивный образ для «my-registry / my-app» в kube.yaml, чтобы не перепутать другие разработчики должны менять это значение каждый раз, когда они хотят выполнить повторное развертывание.

0 голосов
/ 10 февраля 2020

для простых случаев вы можете использовать kubectl run . например:

kubectl run my-app --image=my-registry/my-app:${BUILD_NUMBER} --port=3000 --replicas=1 --env VAR=value --expose --limits 'cpu=300m,memory=600Mi'

в теории это устаревшая команда, но она устарела в течение 2 лет и все еще там;] в любом случае, если вы чувствуете себя в этом небезопасно, сообщение дает подсказку, как вы можете потратить день или два, чтобы сделать это без устали;]

...