[问题已处理]-helm更新job类型报错field is immutable

导语:今天用jenkins发布更新helm的时候报错field is immutable

报错如图

除了其他job 更新都没问题,只有更新k8s的job类型的服务的时候helm会报错。发现是由于指定-f values.yaml 引起的。

# 修改前
 helm --kubeconfig="/srv/kubeconfig/k8s_cluster.yaml" upgrade -f /data/cluster-deploy/${NameSpace}/values.yaml  ${NameSpace}  /data/cluster-deploy/${NameSpace} -n ${NameSpace}
 # 修改后
  helm --kubeconfig="/srv/kubeconfig/k8s_cluster.yaml" upgrade   ${NameSpace}  /data/cluster-deploy/${NameSpace} -n ${NameSpace}
 

虽然流水线执行helm upgrade之前会删除对应的job名称,但是job类型的特性就是只执行一次 不能被更改。因此不能指定-f values.yaml 去upgrade,虽然这个values其实就是他自己当前使用的values文件,这里helm是应该判断为一个新文件,认为job类型在原有的values上又-f指定了一个values,有更新。 把对应的-f /data/cluster-deploy/${NameSpace}/values.yaml 去掉就可以执行,不会报错了。

修改对应流水线如下

        stage('deploy') {
            agent {
                label "10.10.3.245"
            }
            steps {
                script {
                    def code = sh (
                        script: "kubectl --kubeconfig /srv/kubeconfig/k8s_cluster.yaml  delete job/pacsserver-migration -n ${NameSpace}",
                        returnStatus: true  // 注意得加上这个, 不然 sh 执行 不返回 状态 ,jenkins 执行到这里 如果 grep 还是 找不到 东西的话 又会报 Error : script returned exit code 1 的错
                    )
                    // code 为0 代表 grep 找到 了 react-app 相关 的 container
                    if (code==0){
                        echo  "镜像名称包含job名称"
                    }else{
                        echo  "镜像名称未包含job名称 请检查镜像"
                        
                        
                    }
                    sh """
                        ###echo "{images: {migration_pacsserver: harbor.deepwise.com/dev/${JOB_NAME}:${Tag}}}"  > ${WORKSPACE}/values.yaml 
                        sed -i "s# migration_pacsserver: h.*# migration_pacsserver: harbor.deepwise.com/dev/${JOB_NAME}:${Tag}#g" /data/cluster-deploy/${NameSpace}/values.yaml 
                        cat /data/cluster-deploy/${NameSpace}/values.yaml 
                        kubectl --kubeconfig=/srv/kubeconfig/k8s_cluster.yaml get job -n ${NameSpace}
                        helm --kubeconfig="/srv/kubeconfig/k8s_cluster.yaml" upgrade   ${NameSpace}  /data/cluster-deploy/${NameSpace} -n ${NameSpace}

                    """
                       }

                  }

 }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,您的问题是关于 Kubernetes 的部署。我可以回答您的问题并提供一些指导。 首先,您需要创建一个 `nfs-client-provisioner` 的 deployment 对象。您可以使用以下的 `nfs-deploy.yaml` 文件: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: nfs-provisioner spec: selector: matchLabels: app: nfs-provisioner replicas: 1 template: metadata: labels: app: nfs-provisioner spec: containers: - name: nfs-client-provisioner image: quay.io/external_storage/nfs-client-provisioner:v3.1.0-k8s1.11 env: - name: NFS_SERVER value: <nfs-server-ip> # 您需要替换为实际的 NFS 服务端 IP 地址 - name: NFS_PATH value: /exports # 您需要替换为实际的 NFS 共享目录 - name: PROVISIONER_NAME value: example.com/nfs # 您可以替换为自己的 provisioner 名称 ``` 接下来,您需要创建一个 `storageclass.yaml` 文件,用于动态绑定 `nfs-provisioner`。您可以使用以下的 `storageclass.yaml` 文件: ```yaml apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: nfs provisioner: example.com/nfs # 这里需要和上面的 PROVISIONER_NAME 保持一致 parameters: archiveOnDelete: "false" ``` 最后,您可以使用以下命令来应用这两个文件: ```bash $ kubectl apply -f nfs-deploy.yaml $ kubectl apply -f storageclass.yaml ``` 完成后,您可以使用以下命令来查看 `nfs-provisioner` 的 pod 和 storageclasses 对象: ```bash $ kubectl get pods -l app=nfs-provisioner $ kubectl get storageclasses ``` 希望我的回答能够帮助您解决问题,如果您还有任何问题,请随时问我!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爷来辣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值