前言

最近有朋友基于之前的博客《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: #实例数量
revisionHistoryLimit: #保留的历史记录数,设置为0将清理部署的所有历史记录,无法回滚
strategy:
type: Recreate #更新策略为快速更新,即关闭所有实例重新创建
template: #pod模板
metadata:
labels:
app: teamcity
spec:
containers:
- image: jetbrains/teamcity-server #镜像
imagePullPolicy: Always #拉取策略
name: teamcity
ports: #端口列表
- containerPort: #端口
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: #删除需要时间
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:
nodePort:
selector:
app: teamcity
 

代理端YAML定义

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
app: tc-agent
name: tc-agent
spec:
replicas:
revisionHistoryLimit: #保留的历史记录数,设置为0将清理部署的所有历史记录,无法回滚
strategy:
rollingUpdate: #滚动更新配置
maxSurge:
maxUnavailable:
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:
memory: 10024Mi
requests: #代理构建时消耗比较大,尽量分配多点资源
cpu:
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:
volumes:
- name: vol
emptyDir: {} #临时目录
hostNetwork: true
---
apiVersion: v1
kind: Service
metadata:
labels:
app: tc-agent
name: tc-agent
spec:
ports:
- name: tcp--
nodePort:
port:
protocol: TCP
targetPort:
selector:
app: tc-agent
sessionAffinity: None
type: ClusterIP

如何基于k8s快速搭建TeamCity(YAML分享)的更多相关文章

  1. 基于 Jenkins 快速搭建持续集成环境--转

    源地址:http://www.ibm.com/developerworks/cn/java/j-lo-jenkins/ 持续集成是一种软件开发实践,对于提高软件开发效率并保障软件开发质量提供了理论基础 ...

  2. 2019基于Hexo快速搭建个人博客,打造一个炫酷博客(1)-奥怪的小栈

    本文转载于:奥怪的小栈 这篇文章告诉你如何在2019快速上手搭建一个像我一样的博客:基于HEXO+Github搭建.并完成SEO优化,打造一个炫酷博客. 本站基于HEXO+Github搭建.所以你需要 ...

  3. 基于Docker快速搭建多节点Hadoop集群--已验证

    Docker最核心的特性之一,就是能够将任何应用包括Hadoop打包到Docker镜像中.这篇教程介绍了利用Docker在单机上快速搭建多节点 Hadoop集群的详细步骤.作者在发现目前的Hadoop ...

  4. springboot+dubbo基于zookeeper快速搭建一个demo

    由于小编是在windows环境下搭建的,故该示例均为在windows下操作,这里只是提供一个快速搭建思路,linux操作也基本上差不多. 首先本示例的dubbo是基于zookeeper发布订阅消息的, ...

  5. 如何基于 Docker 快速搭建 Springboot + Mysql + Redis 项目

    目录 前言 项目目录 搭建项目 1. docker安装启动mysql以及redis 1.1 安装mysql 1.2 安装redis 2. 初始化数据库 3.创建项目 4.初始化代码 4.1 全局配置文 ...

  6. 基于 Jenkins 快速搭建持续集成环境

      什么是持续集成 随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题.尤其是近些年来,敏捷(Agile) 在软件工程领域越来越红火 ...

  7. 基于Vue-cli 快速搭建项目

    Vue-cli可以快速帮助我们创建一个项目,这是官方给我们提供的脚手架.下面我说一下vue-cli的使用方法. 一.准备工作 在使用vue-cli时,首先需要安装nodejs,npm,其次需全局安装v ...

  8. 基于Docker快速搭建ELK【华为云技术分享】

    [摘要] 本文基于自建的Docker平台速搭建一套完整的ELK系统,相关的镜像直接从Docker Hub上获取,可以快速实现日志的采集和分析检索. 准备镜像 l 获取ES镜像:docker pull ...

  9. 基于Docker快速搭建ELK

    [摘要] 本文基于自建的Docker平台速搭建一套完整的ELK系统,相关的镜像直接从Docker Hub上获取,可以快速实现日志的采集和分析检索. 准备镜像 l  获取ES镜像:docker pull ...

随机推荐

  1. swap()函数的几种写法及优劣

    试用几种方法实现swap函数,比较效率高低. 首先说结果,最快的是赋值交换. 原因分析 gcc开启O2优化后,三个函数的汇编代码一样.是的,除了第一行的文件名,一模一样. 附代码 void swap1 ...

  2. liunux中的标准输出。以及常用的 2>dev/null 命令的含义

    了解Linux怎样处理输入和输出是非常重要的.一旦我们了解其原理以后,我们就可以正确熟练地使用脚本把内容输出到正确的位置.同样我们也可以更好地理解输入重定向和输出重定向. 首先我们来了解一下linux ...

  3. 开源造轮子:一个简洁,高效,轻量级,酷炫的不要不要的canvas粒子运动插件库

    一:开篇 哈哈哈,感谢标题党的莅临~ 虽然标题有点夸张的感觉,但实际上,插件库确实是简洁,高效,轻量级,酷炫酷炫的咯.废话不多说,先来看个标配例子吧: (codepen在线演示编辑:http://co ...

  4. 百万年薪python之路 -- socket粘包问题解决

    socket粘包问题解决 1. 高大上版解决粘包方式(自定制包头) 整体的流程解释 整个流程的大致解释: 我们可以把报头做成字典,字典里包含将要发送的真实数据的描述信息(大小啊之类的),然后json序 ...

  5. 用FILE*指针对象读文件的方式。

      先直接上代码: ]; ]; char* ptr1; ]; FILE* fh; QString strpath = getenv("GCDIR"); QString str_in ...

  6. Java基础(三十二)JDBC(2)连接数据库

    一.连接数据库的过程 连接数据库的过程:加载数据库驱动程序,不过只需在第一次访问数据库时加载一次,然后在每次访问数据库时创建一个Connection实例,然后执行操作数据库的SQL语句,并返回执行结果 ...

  7. SpringBoot整合MybatisPlus3.X之SQL注入器(九)

    pom.xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId& ...

  8. 在k8s上安装Jenkins及常见问题

    持续集成和部署是DevOps的重要组成部分,Jenkins是一款非常流行的持续集成和部署工具,最近试验了一下Jenkins,发现它是我一段时间以来用过的工具中最复杂的.一个可能的原因是它需要与各种其它 ...

  9. null与undefined的区别?

    古之立大事者,不惟有超世之才,亦必有坚忍不拔之志. ——北宋· 苏 轼<晁错论> 1.首先看一个判断题:null和undefined 是否相等     console.log(null== ...

  10. 学习笔记之javascript编写简单计算器

      感觉自己的的实力真的是有待提高,在编写计算器的过程中,出现了各种各样的问题,暴露了自己的基础不扎实,逻辑思维能力不够,学得知识不能运用到自己的demo中区.先介绍一些这个这个计算器的整体思路.大致 ...