【问题标题】:Jenkins pipeline stage for k8 rolling update strategy用于 k8 滚动更新策略的 Jenkins 流水线阶段
【发布时间】:2021-11-15 18:12:36
【问题描述】:

我正在 jenkins 阶段使用滚动滚动更新方法部署 kubernetes 清单文件,并且我使用 4 个 pod 副本配置了 maxSurgeand 和 maxUnavailable 值。在运行 jenkins 时,我的 kubernetes yaml 文件正在应用,但在部署后没有反映新的更改。

在这种情况下,我需要登录到我的 pod 正在运行的工作节点,然后我需要停止部署,然后我需要使用 docker rmi 命令来删除容器,最后我需要拉取最新的图像以反映新的变化.

詹金斯文件

stage('Deploy') {
        container('kubectl') {
            withCredentials([kubeconfigFile(credentialsId: 'KUBERNETES_CLUSTER_CONFIG', variable: 'KUBECONFIG')]) {
                def kubectl
                echo 'deploy to deployment!!'
                if(gitBranch == "devops") {
                    kubectl = "kubectl --kubeconfig=${KUBECONFIG} --context=arn:aws:eks:eu-central-1:123456789101:cluster/my-modulus-cluster"
                    echo 'deploy to my-modulus-cluster!'
                    sh "kubectl apply -f ./infrastructure/dev/my.yaml -n default --record"
                    sh "kubectl rollout history deployment myapp"
                    }
            }
        }
    }

这里是 k8 清单文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 2
  selector:
    matchLabels:
      app: myapp
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
  minReadySeconds: 5
  template:
    metadata:
      labels:
        app: myapp
    spec:
      backend
      containers:
      - name: myapp
        image: myimage:latest
        imagePullPolicy: Always
        ports:
            - containerPort: 3030
        readinessProbe:
          initialDelaySeconds: 1
          periodSeconds: 2
          timeoutSeconds: 1
          successThreshold: 1
          failureThreshold: 1
          httpGet:
            host:
            scheme: HTTPS
            path: /
            httpHeaders:
            - name: Host
              value: myhost
            port: 3030

【问题讨论】:

  • 您使用的是哪个版本的 Kubernetes,您是如何设置集群的?您是使用裸机安装还是某些云提供商?
  • 我正在使用 1.20 版的 AWS EKS 集群
  • 什么意思:“部署后新的变化没有反映。”?究竟发生了什么?
  • 部署后,新的应用代码变化没有体现
  • 请列出您的 pod。他们活跃了多久?更新后有什么新东西吗?

标签: kubernetes


【解决方案1】:

在部署阶段我添加了 if 条件来设置图像

sh 'echo "Starting ams Deployment"'
                    sh '''
                        if kubectl get deployments | grep ams
                        then
                            kubectl set image deployment ams ams=myimage:latest
                            kubectl rollout restart deployment ams
                        else
                            kubectl apply -f my.yaml -n default
                        fi
                    '''

【讨论】:

    猜你喜欢
    • 2020-11-07
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 2019-02-19
    • 1970-01-01
    • 2022-10-25
    • 2018-11-08
    相关资源
    最近更新 更多