前言

最近有朋友基于之前的博客《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