如何基于k8s快速搭建TeamCity(YAML分享)

前言

最近有朋友基于之前的博客《Docker最全教程之使用TeamCity来完成内部CI、CD流程(十七)》搭建TeamCity时出现了一些问题,由于平常比较忙,没有及时答复,非常抱歉。

这里分享下基于本地k8s集群(云端k8s服务注意使用云盘或者其他存储)搭建TeamCity的相关Yaml的配置文件,注意使用“kubectl apply -f <路径>”命令执行。

 

服务端YAML定义

复制代码
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  labels:
    app: teamcity
  name: teamcity
spec:
  replicas: 1 #实例数量
  revisionHistoryLimit: 2 #保留的历史记录数,设置为0将清理部署的所有历史记录,无法回滚
  strategy:
    type: Recreate   #更新策略为快速更新,即关闭所有实例重新创建
  template: #pod模板
    metadata:
      labels:
        app: teamcity
    spec:
      containers:
      - image: jetbrains/teamcity-server  #镜像
        imagePullPolicy: Always  #拉取策略
        name: teamcity
        ports:  #端口列表
          - containerPort: 8111  #端口
        resources:
          limits:
            cpu: 1000m #最大CPU,这里为1核
            memory: 4184Mi  #最大内存
          requests:
            cpu: 97m  #预分配CPU,这里为0.097核
            memory: 2092Mi #预分配内存
        volumeMounts:
        - mountPath: /data/teamcity_server/datadir
          name: data-vol
        - mountPath: /opt/teamcity/logs
          name: log-vol
      nodeName: k8s-node1 #强制约束将Pod调度到指定的Node节点上
      restartPolicy: Always #重启策略
      terminationGracePeriodSeconds: 30 #删除需要时间
      volumes:
      - name: data-vol
        hostPath:   #使用主机目录
          path: /var/teamcity
      - name: log-vol
        emptyDir: {} #临时目录
      hostNetwork: true
---
kind: Service
apiVersion: v1
metadata:
  name: teamcity-service
spec:
  type: NodePort #通过节点端口提供对外访问
  ports:
    - port: 8111
      nodePort: 30001
  selector:
    app: teamcity
复制代码
 

代理端YAML定义

复制代码
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    app: tc-agent
  name: tc-agent
spec:
  replicas: 3
  revisionHistoryLimit: 2 #保留的历史记录数,设置为0将清理部署的所有历史记录,无法回滚
  strategy:
    rollingUpdate: #滚动更新配置
      maxSurge: 1
      maxUnavailable: 0
    type: RollingUpdate #使用滚动更新策略
  template:
    metadata:
      labels:
        app: tc-agent
    spec:
      containers:
      - env:
        - name: AGENT_NAME #代理名称
          value: Agent1
        - name: SERVER_URL #服务端访问地址
          value: http://172.16.2.202:30001
        - name: DOCKER_IN_DOCKER
          value: start
        image: jetbrains/teamcity-agent
        imagePullPolicy: Always
        name: tc-agent
        resources: #资源限制
          limits:
            cpu: 4
            memory: 10024Mi
          requests: #代理构建时消耗比较大,尽量分配多点资源
            cpu: 1
            memory: 4096Mi
        securityContext:
          privileged: true #特级权限
        volumeMounts:
        - mountPath: /data/teamcity_agent/conf
          name: vol
        - mountPath: /var/lib/docker
          name: vol
      dnsPolicy: ClusterFirst
      nodeName: k8s-node3 #强制约束将Pod调度到指定的Node节点上
      restartPolicy: Always
      terminationGracePeriodSeconds: 30
      volumes:
      - name: vol
        emptyDir: {} #临时目录
      hostNetwork: true
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: tc-agent
  name: tc-agent
spec:
  ports:
  - name: tcp-9090-9090
    nodePort: 0
    port: 9090
    protocol: TCP
    targetPort: 9090
  selector:
    app: tc-agent
  sessionAffinity: None
  type: ClusterIP
复制代码







posted @   雪雁  阅读(877)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
历史上的今天:
2018-11-20 究竟是什么?让程序员们怒了
2017-11-20 .NET Core工程编译事件$(TargetDir)变量为空引发的思考
2015-11-20 VS 2015 GIT操作使用说明
点击右上角即可分享
微信分享提示