You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins Kubernetes Pipeline报错:节点非Kubernetes节点,请求协助排查

问题:Jenkins Pipeline部署Nginx到Kubernetes失败,报错"Node is not a Kubernetes node"

问题描述

Nginx服务无法通过Jenkins Pipeline部署到Kubernetes,运行Pipeline时报错ERROR: Node is not a Kubernetes node:,不清楚阻碍启动的原因,想确认是否需要在Jenkins的Kubernetes配置中额外配置Pod,请求协助解决。

环境信息

  • Jenkins以Docker容器运行在本地宿主机
  • Kubernetes采用Minikube(同样以Docker容器运行在宿主机)
  • 宿主机已安装kubectl

已配置内容

已安装Jenkins插件

  • Kubernetes插件
  • Docker插件(当前未使用)

Kubernetes云配置

  • 在Jenkins中配置了名为my-k8s的Kubernetes云
  • 使用宿主机~/.kube/config中的密钥文件,并更新了证书的实际数据
  • 连接测试通过:在http://192.168.1.41:8080/manage/cloud/my-k8s/configure测试显示已连接到Kubernetes v1.28.3

原Pipeline代码

pipeline {
    agent any

    stages {
        stage('Deploy Nginx to Kubernetes') {
            steps {
                container('Kubernetes') {
                    // Configure Kubernetes server details
                    // credentialsId 'kubernetes-credentials' // Replace with your credential ID // I don't know what credentialsId
                    serverName 'https://192.168.49.2:8443' // Kubernetes API server URL(~$ cat .kube/conf )
                    namespace 'default' // Replace with your desired namespace

                    // Define Nginx deployment YAML
                    script {
                        def deploymentYaml = """
                        apiVersion: apps/v1
                        kind: Deployment
                        metadata:
                          name: nginx-deployment
                          labels:
                            app: nginx
                        spec:
                          replicas: 1
                          selector:
                            matchLabels:
                              app: nginx
                          template:
                            metadata:
                              labels:
                                app: nginx
                            spec:
                              containers:
                              - name: nginx
                                image: nginx:latest
                                ports:
                                - containerPort: 80
                        """
                        writeFile file: 'nginx-deployment.yaml', text: deploymentYaml
                    }

                    // Deploy Nginx using Kubernetes plugin
                    kubernetesApply file: 'nginx-deployment.yaml'
                }
            }
        }
    }
}

报错日志

Started by user admin
Replayed #1
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /var/jenkins_home/workspace/kube-nginx-project
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Deploy Nginx to Kubernetes)
[Pipeline] container
[Pipeline] // container
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: Node is not a Kubernetes node: 
Finished: FAILURE

问题分析与解决方法

问题原因

  1. agent any让Jenkins将任务分配到自身所在的Docker容器节点,该节点并非Kubernetes集群内的节点,而container('Kubernetes')指令仅能在Kubernetes Pod的容器中生效,因此触发报错。
  2. 原Pipeline中直接写入的serverName、namespace等并非Jenkins Pipeline有效语法,无法被识别执行。

解决步骤

1. 修改Pipeline的Agent配置

指定使用之前配置好的my-k8s云,让Jenkins在Kubernetes集群内创建代理Pod来执行任务,而非使用Jenkins自身节点。

2. 移除无效指令并调整部署逻辑

删除原Pipeline中无效的serverName等语句,利用Kubernetes插件的内置能力完成部署。

修改后的Pipeline代码

pipeline {
    // 指定使用已配置的Kubernetes云,自动在K8s中创建代理Pod
    agent {
        kubernetes {
            cloud 'my-k8s' // 对应Jenkins中配置的Kubernetes云名称
            // 可选:如果代理Pod需要kubectl工具,可自定义Pod模板
            podTemplate {
                container {
                    name 'kubectl'
                    image 'bitnami/kubectl:latest' // 包含kubectl的镜像
                }
            }
        }
    }

    stages {
        stage('Deploy Nginx to Kubernetes') {
            steps {
                // 如果使用了自定义kubectl容器,用container包裹步骤
                container('kubectl') {
                    script {
                        def deploymentYaml = """
                        apiVersion: apps/v1
                        kind: Deployment
                        metadata:
                          name: nginx-deployment
                          labels:
                            app: nginx
                        spec:
                          replicas: 1
                          selector:
                            matchLabels:
                              app: nginx
                          template:
                            metadata:
                              labels:
                                app: nginx
                            spec:
                              containers:
                              - name: nginx
                                image: nginx:latest
                                ports:
                                - containerPort: 80
                        """
                        writeFile file: 'nginx-deployment.yaml', text: deploymentYaml
                    }

                    // 使用插件自带的kubernetesApply部署,自动关联云配置的集群信息
                    kubernetesApply file: 'nginx-deployment.yaml', namespace: 'default'
                }
            }
        }
    }
}

额外说明

  • 无需手动配置Pod,Jenkins Kubernetes插件会根据agent配置自动在Kubernetes集群中创建代理Pod,只要云连接配置正确即可。
  • 如果代理Pod缺少kubectl工具,必须在podTemplate中指定包含kubectl的镜像,否则无法执行Kubernetes相关操作。

内容的提问来源于stack exchange,提问作者Vasanth Vel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 18:58:13