Лучшие практики для развертывания / обновления контейнеров с Kubernetes? - PullRequest
2 голосов
/ 31 марта 2020

Я пытаюсь понять, как я должен развертывать контейнеры с Kubernetes. Я новичок в этом топи c, поэтому в данный момент я тестирую все эти идеи на виртуальной машине.

Я использую Git, Jenkins, Docker, Docker Hub и Kubernetes .

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

Я создал файл развертывания YAML, чтобы запустить модуль и создать новый контейнер.

kubectl apply -f deployment.yaml

Затем я раскрываю развертывание.

kubectl expose deployment my-app --type=LoadBalancer --name=my-app

Файл YAML для развертывания:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
  labels:
    app: app
spec:
  selector:
    matchLabels:
      app: app
      role: master
      tier: backend
  replicas: 1
  template:
    metadata:
      labels:
        app: app
        role: master
        tier: backend
    spec:
      containers:
      - name: appcontainer
        image: repository:1.0
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
        ports:
        - containerPort: 8085
      imagePullSecrets:
      - name: regcred

Теперь, когда у меня все работает, например, я даю новое обновление образа и я необходимо обновить этот новый образ, например, с 1.0 до 1.1, после завершения развертывания. Мне нужно знать правильный способ сделать это действие.

Потому что я думаю, что я делаю это неправильно, как будто я пытаюсь sma sh изображение на контейнере, созданном с новым изображением, и я не надеваю Не знаю, правильно ли выполняется развертывание с новым файлом YAML, и если Kubernetes создает новый контейнер с этим образом и, следовательно, уничтожает старое развертывание, но я не знаю, как мне это сделать, если это правильно.

Ответы [ 2 ]

1 голос
/ 31 марта 2020

Самый простой способ обновить развертывание с новым образом - запустить:

kubectl set image deployment/my-app appcontainer=repository:1.1 --record

Таким образом, сначала будут созданы новые модули с более новой версией образа. и после успешного развертывания он прекратит работу старых модулей или модулей в зависимости от количества реплик, указанных в поле replicas.

Чтобы проверить состояние обновления, выполните команду

kubectl rollout status deployment.v1.apps/my-app
0 голосов
/ 31 марта 2020

Решение, которое вы ищете, называется Rolling update. Вы можете обновить deployment.yaml следующим образом:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
  labels:
    app: app
spec:
  selector:
    matchLabels:
      app: app
      role: master
      tier: backend
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
    type: RollingUpdate
  replicas: 1
  template:
    metadata:
      labels:
        app: app
        role: master
        tier: backend
    spec:
      containers:
      - name: appcontainer
        image: repository:1.0
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
        ports:
        - containerPort: 8085
      imagePullSecrets:
      - name: regcred

Обратите внимание на текущую конфигурацию обновления:

strategy:
  rollingUpdate:
    maxSurge: 1
    maxUnavailable: 0
  type: RollingUpdate

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

Затем вы можете изменить тег изображения в yaml и выполнить kubectl apply, чтобы обновить изображение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...