обновить развертывание kubernetes с помощью jenkins - PullRequest
0 голосов
/ 23 ноября 2018

Я использую Плагин непрерывного развертывания Kubernetes для развертывания и обновления Развертывания на моем кластере Kubernetes.Я использую конвейер, и это Jenkinsfile:

pipeline {
    environment {
        JOB_NAME = "${JOB_NAME}".replace("-deploy", "")
        REGISTRY = "my-docker-registry"
    }
    agent any
    stages {
        stage('Fetching kubernetes config files') {
            steps {
                git 'git_url_of_k8s_configurations'
            }
        }
        stage('Deploy on kubernetes') {
            steps {
                kubernetesDeploy(
                    kubeconfigId: 'k8s-default-namespace-config-id',
                    configs: 'deployment.yml',
                    enableConfigSubstitution: true
                )
            }
        }
    }
}

Deployment.yml вместо этого:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: ${JOB_NAME}
spec:
  replicas: 1
  template:
    metadata:
      labels:
        build_number: ${BUILD_NUMBER}
        app: ${JOB_NAME}
        role: rolling-update
    spec:
      containers:
      - name: ${JOB_NAME}-container        
        image: ${REGISTRY}/${JOB_NAME}:latest
        ports:
        - containerPort: 8080
        envFrom:
            - configMapRef:
                name: postgres
      imagePullSecrets:
      - name: regcred
  strategy:
    type: RollingUpdate

Для того, чтобы Kubernetes понял, что Deployment изменился (так что, чтобы обновить его)и pods) Я использовал номер сборки Jenkins в качестве аннотации:

...
metadata:
  labels:
    build_number: ${BUILD_NUMBER}
...

Проблема или мое недоразумение:

Если в Kubernetes не существует развертывания, все работает хорошо, создав один Deployment и один ReplicaSet.

Если Deployment все еще существует и применяется обновление, Kubernetes создает новый ReplicaSet:

Перед первым развертыванием

before first deploy

Первое развертывание

first deploy

Второе развертывание

second deploy

Третье развертывание

enter image description here

Как вы можете видеть, каждое новое развертывание Jenkins будет корректно обновлять развертывание, но создаст новый ReplicaSet без удаления старого.

Что может бытьы п?

1 Ответ

0 голосов
/ 23 ноября 2018

Это ожидаемое поведение.Каждый раз, когда вы обновляете развертывание, будет создан новый ReplicaSet.Но старый ReplicaSet будет сохранен, так что вы сможете вернуться к предыдущему состоянию в случае возникновения проблем в обновленном развертывании.

Ref: Обновление развертывания

Тем не менее, вы можете ограничить количество ReplicaSet, хранящихся в поле spec.revisionHistoryLimit.Значение по умолчанию - 10. Ссылка: RevisionHistoryLimit

...