游乐游手机版
首页/AI教程/文章详情

在K8s集群主节点上通过YAML安装Jenkins的完整操作指南

时间:2026-06-06 17:31
在 Kubernetes 集群中,将 Pod 调度到指定节点有多种实现方案,其中使用 Label 标签配合 NodeSelector 节点选择器是最直观且广泛应用的方法。操作前,需要先为节点添加标签,这相当于为服务器设置一个“身份标识”,调度器会根据该标识精准分配 Pod 到目标节点。 执行以下命令

在 Kubernetes 集群中,将 Pod 调度到指定节点有多种实现方案,其中使用 Label 标签配合 NodeSelector 节点选择器是最直观且广泛应用的方法。操作前,需要先为节点添加标签,这相当于为服务器设置一个“身份标识”,调度器会根据该标识精准分配 Pod 到目标节点。

执行以下命令即可为节点添加标签:

$ kubectl label node master nodename=master

该命令为 master 节点赋予一个 nodename=master 的标签。其他节点可参照此方式,按照自定义命名规范打上类似 nodename=worker1nodename=worker2 等标签,后续在 Pod 配置中直接引用即可实现精准调度。

YAML 配置文件示例

节点标签设置完成后,即可编写 YAML 配置文件。以下提供一套完整的资源定义,包含 RBAC 权限、通过 DaemonSet 部署 Traefik 作为 Ingress Controller、Service 端口暴露、Deployment 部署 Jenkins 并指定调度至 master 节点,以及 Ingress 路由规则。用户可直接复制使用,仅需根据实际环境调整 host 域名和访问路径即可。

---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: traefik-ingress-controller
rules:
  - apiGroups:
      - ""
    resources:
      - services
      - endpoints
      - secrets
    verbs:
      - get
      - list
      - watch
  - apiGroups:
      - extensions
    resources:
      - ingresses
    verbs:
      - get
      - list
      - watch
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: traefik-ingress-controller
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: traefik-ingress-controller
subjects:
  - kind: ServiceAccount
    name: traefik-ingress-controller
    namespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: traefik-ingress-controller
  namespace: kube-system
---
kind: DaemonSet
apiVersion: extensions/v1beta1
metadata:
  name: traefik-ingress-controller
  namespace: kube-system
  labels:
    k8s-app: traefik-ingress-lb
spec:
  template:
    metadata:
      labels:
        k8s-app: traefik-ingress-lb
        name: traefik-ingress-lb
    spec:
      serviceAccountName: traefik-ingress-controller
      terminationGracePeriodSeconds: 60
      hostNetwork: true
      containers:
      - image: traefik
        name: traefik-ingress-lb
        ports:
        - name: http
          containerPort: 80
          hostPort: 80
        - name: admin
          containerPort: 8080
        securityContext:
          capabilities:
            drop:
              - ALL
            add:
              - NET_BIND_SERVICE
        args:
        - --api
        - --kubernetes
        - --logLevel=INFO
---
apiVersion: v1
kind: Service
metadata:
  name: traefik-web-ui
  namespace: kube-system
spec:
  selector:
    k8s-app: traefik-ingress-lb
  ports:
  - name: web
    port: 80
    targetPort: 8080
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: jenkins-deployment
  namespace: kube-system
  labels:
    app: jenkins
spec:
  replicas: 1
  selector:
    matchLabels:
      app: jenkins
  template:
    metadata:
      labels:
        app: jenkins
    spec:
      terminationGracePeriodSeconds: 60
      containers:
      - name: jenkins
        image: jenkins/jenkins:lts
        imagePullPolicy: IfNotPresent
        env:
        - name: JENKINS_OPTS
          value: "--prefix=/jenkins"
        ports:
        - name: web
          containerPort: 8080
          protocol: TCP
        - name: agent
          containerPort: 50000
          protocol: TCP
        volumeMounts:
        - name: jenkins-home
          mountPath: /var/jenkins_home
      volumes:
      - name: jenkins-home
        hostPath:
          path: /root/jenkins-home
      nodeSelector:
        nodename: master
---
apiVersion: v1
kind: Service
metadata:
  name: jenkins-service
  namespace: kube-system
  labels:
    app: jenkins
spec:
  ports:
  - port: 8888
    targetPort: 8080
    name: web
  - port: 50000
    targetPort: 50000
    name: agent
  selector:
    app: jenkins
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: traefik-web-ui
  namespace: kube-system
  annotations:
    kubernetes.io/ingress.class: traefik
    traefik.frontend.rule.type: PathPrefixStrip
spec:
  rules:
  - host: c4.k8s.com
    https:
      paths:
      - path: /
        backend:
          serviceName: traefik-web-ui
          servicePort: web
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: jenkins-ingress
  namespace: kube-system
  annotations:
    kubernetes.io/ingress.class: traefik
    traefik.ingress.kubernetes.io/app-root: /jenkins
    traefik.ingress.kubernetes.io/rule-type: PathPrefix
    traefik.frontend.passHostHeader: "true"
spec:
  rules:
  - host: c4.k8s.com
    https:
      paths:
      - path: /jenkins
        backend:
          serviceName: jenkins-service
          servicePort: web

k8s中将Jenkins安装到master节点上的yaml

该整套配置的核心逻辑为:首先利用 DaemonSet 在每个节点上运行一个 Traefik 实例(采用 hostNetwork: true 模式直接占用宿主机端口),随后通过 Deployment 部署 Jenkins 服务,并在 Pod 的 spec 中设置 nodeSelector: nodename: master,确保 Jenkins 仅被调度到含有 nodename=master 标签的节点。最后,通过两个 Ingress 资源分别暴露 Traefik 管理界面与 Jenkins 服务,统一使用域名 c4.k8s.com 进行访问。

需要注意:hostNetwork: true 表示容器将直接复用宿主机网络栈,因此需确保宿主机端口不与其它服务冲突。此外,Jenkins 的数据卷使用 hostPath 类型,在生产环境中建议替换为 PV/PVC 以保障数据持久化与可迁移性。本示例仅作演示用途,旨在帮助快速验证功能。

来源:https://developer.aliyun.com/article/704371
上一篇Spring Boot 3.x新特性详解:虚拟线程、AOT与GraalVM原生镜像 下一篇阿里云OpenClaw六大核心场景详解及官方镜像一键安装教程
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
Windows Docker Desktop RabbitMQ生产级部署完整指南
AI教程 · 2026-06-29

Windows Docker Desktop RabbitMQ生产级部署完整指南

前言 在 Windows 本地开发环境中,直接安装 RabbitMQ 确实颇为周折:需要单独配置 Erlang 运行环境、手动管理环境变量、服务启停全凭手工操作。更令人困扰的是,版本兼容冲突、端口占用、环境不一致等问题层出不穷。笔者见过不少开发者为搭建环境就得耗费整整半天时间。 相比之下,借助 Do

AI搜索重构制造业采购逻辑的阿里云企业级GEOCMS优化实践
AI教程 · 2026-06-29

AI搜索重构制造业采购逻辑的阿里云企业级GEOCMS优化实践

先分享一个切实感受。过去两年,我们与福建制造企业合作较为频繁,发现一个非常突出的现象:超过80%的企业官网,产品参数仍然存放在PDF或图片中。AI爬虫?根本无法抓取。这些企业技术实力不弱、资质证照齐全、应用案例也丰富,但在AI搜索这一全新战场上,它们几乎处于隐身状态。 一、一个正在发生的行业变化 A

阿里云Token Plan团队版功能价格与省钱购买指南
AI教程 · 2026-06-29

阿里云Token Plan团队版功能价格与省钱购买指南

阿里云百炼近期推出了名为“Token Plan 团队版”的全新服务,这一服务专为企业与开发者量身打造,定位为AI大模型订阅平台。通过引入Credits作为统一计量单位,将文本生成、图像生成等多模态AI能力纳入单一计费体系,同时无缝兼容主流AI编程工具及智能体(Agent)生态系统。其核心亮点包括:全

阿里云物联网.NET Core客户端位置信息上报
AI教程 · 2026-06-29

阿里云物联网.NET Core客户端位置信息上报

阿里云物联网平台的位置服务并非一个完全独立的功能模块。位置信息可包含二维坐标与三维坐标,而位置数据的来源本质上是借助设备属性进行上传。换言之,若要让设备上报位置,您需先将其视为一个普通属性进行处理。 1)添加二维位置数据 操作过程十分简洁。进入数据分析 → 空间数据可视化 → 二维数据,点击添加,将

年阿里云服务器选型配置与网站部署全攻略
AI教程 · 2026-06-29

年阿里云服务器选型配置与网站部署全攻略

2026年,阿里云服务器生态已高度成熟,形成了清晰的轻量应用服务器与ECS云服务器两大产品阵营。无论你是计划搭建个人博客、企业官网,还是运营电商平台、进行应用开发,基本都能找到理想的解决方案。本指南将从服务器选型、配置选择、部署流程到安全运维,系统梳理2026年最实用的操作要点,帮助你少走弯路,让网