Работа Kubernetes и развертывание - PullRequest
1 голос
/ 18 марта 2020

можно ли выполнить задание и развертывание в одном файле / действии конфигурации. Где развертывание будет ждать завершения задания до 1002 * и проверит, успешно ли оно выполнено, чтобы продолжить развертывание?

1 Ответ

0 голосов
/ 18 марта 2020

Исходя из предоставленной вами информации, я полагаю, что вы можете достичь своей цели с помощью функции Kubernetes, которая называется InitContainer :

Контейнеры Init точно такие же, как обычные контейнеры, за исключением:

  • Контейнеры инициализации всегда выполняются до завершения.
  • Каждый контейнер инициализации должен успешно завершиться до запуска следующего.

Если контейнер инициализации модуля Pod завершается неудачно, Kubernetes повторно перезапускает Pod, пока контейнер init не будет успешным. Однако, если Pod имеет restartPolicy Never, Kubernetes не перезапускает Pod.

  • Я создам initContainer с busybox для запуска команды linux для ожидания запуска службы mydb перед продолжением развертывания.

Шаги для воспроизведения: - Создайте развертывание с initContainer, которое будет запущено задание, которое необходимо выполнить перед развертыванием:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    run: my-app
  name: my-app
spec:
  replicas: 2
  selector:
    matchLabels:
      run: my-app
  template:
    metadata:
      labels:
        run: my-app
    spec:
      restartPolicy: Always
      containers:
      - name: myapp-container
        image: busybox:1.28
        command: ['sh', '-c', 'echo The app is running! && sleep 3600']
      initContainers:
      - name: init-mydb
        image: busybox:1.28
        command: ['sh', '-c', "until nslookup mydb.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for mydb; sleep 2; done"]

В этом поле можно использовать многие виды команд, вам просто нужно выбрать docker образ, содержащий необходимый вам двоичный файл (включая ваше sequelize задание)

  • Теперь давайте применим его, чтобы увидеть состояние развертывания:
$ kubectl apply -f my-app.yaml 
deployment.apps/my-app created

$ kubectl get pods
NAME                      READY   STATUS     RESTARTS   AGE
my-app-6b4fb4958f-44ds7   0/1     Init:0/1   0          4s
my-app-6b4fb4958f-s7wmr   0/1     Init:0/1   0          4s

Блоки находятся в состоянии Init:0/1 в ожидании завершение инициализации контейнера. - Теперь давайте создадим сервис, который initcontainer ожидает запуска, прежде чем завершить свою задачу:

apiVersion: v1
kind: Service
metadata:
  name: mydb
spec:
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9377
  • Мы применим его и будем следить за изменениями в модулях:
$ kubectl apply -f mydb-svc.yaml 
service/mydb created

$ kubectl get pods -w
NAME                      READY   STATUS     RESTARTS   AGE
my-app-6b4fb4958f-44ds7   0/1     Init:0/1   0          91s
my-app-6b4fb4958f-s7wmr   0/1     Init:0/1   0          91s
my-app-6b4fb4958f-s7wmr   0/1     PodInitializing   0          93s
my-app-6b4fb4958f-44ds7   0/1     PodInitializing   0          94s
my-app-6b4fb4958f-s7wmr   1/1     Running           0          94s
my-app-6b4fb4958f-44ds7   1/1     Running           0          95s
^C
$ kubectl get all
NAME                          READY   STATUS    RESTARTS   AGE
pod/my-app-6b4fb4958f-44ds7   1/1     Running   0          99s
pod/my-app-6b4fb4958f-s7wmr   1/1     Running   0          99s

NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
service/mydb         ClusterIP   10.100.106.67   <none>        80/TCP    14s

NAME                     READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/my-app   2/2     2            2           99s

NAME                                DESIRED   CURRENT   READY   AGE
replicaset.apps/my-app-6b4fb4958f   2         2         2       99s

Если вам нужна помощь, чтобы применить это в вашей среде, дайте мне знать.

...