使用jenkins更新kubernetes部署

时间:2018-11-23 08:59:22

标签: jenkins deployment kubernetes replicaset

我正在使用Kubernetes Continuous Deploy Plugin在我的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,则一切正常,创建一个Deployment和一个ReplicaSet。

如果部署仍然存在并且已应用升级,则Kubernetes将创建一个新的ReplicaSet:

在首次部署之前

before first deploy

首次部署

first deploy

第二次部署

second deploy

第三次部署

enter image description here

如您所见,每个新的Jenkins部署将正确更新该部署,但会创建一个新的ReplicaSet而不会删除旧的。

可能是什么问题?

1 个答案:

答案 0 :(得分:2)

这是预期的行为。每次更新部署时,都会创建一个新的ReplicaSet。但是,将保留旧的ReplicaSet,以便在更新的Deployment中出现任何问题时可以回滚到以前的状态。

参考:Updating a Deployment

但是,您可以通过spec.revisionHistoryLimit字段来限制应保留的ReplicaSet数量。默认值为10。参考:RevisionHistoryLimit