前言

最近有朋友基于之前的博客《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. 从实践角度重新理解BIO和NIO

    前言 这段时间自己在看一些Java中BIO和NIO之类的东西,看了很多博客,发现各种关于NIO的概念说的天花乱坠头头是道,可以说是非常的完整,但是整个看下来之后,自己对NIO还是一知半解的状态,所以这 ...

  2. Qt5教程: (2) 信号与槽

    1. 新建工程 新建一个"Qt Widgets Application"工程 2. 添加按钮 一个Qt工程会有很多个控件, 如果把逻辑代码都写在main函数里, main函数会非常 ...

  3. 代码审计之create_function()函数

    0x00 create_function()简介 适用范围:PHP 4> = 4.0.1,PHP 5,PHP 7 功能:根据传递的参数创建匿名函数,并为其返回唯一名称. 语法: create_f ...

  4. webapck 按需加载及版本控制问题

    在启用webpack的懒加载(按需加载)后,我们会遇到要解决缓存的问题. 解决缓存问题有几种方法: 第一种就是加个hash值.便每次修改后所编译后的文件名都不一样.这样能达到预期解决缓存的效果.具体设 ...

  5. VSCode 安装 code 命令

    VSCode 提供 code 命令直接从命令行中打开文件目录,此时需要先安装 code 命令. 1.首先打开 VSCode 2.使用 command + shift + p (注意window 下使用 ...

  6. 百万年薪python之路 -- 生成器

    1.生成器 #本质就是迭代器 1.1 生成器的构建方式 在python中有三种方式来创建生成器: ​ 1.通过生成器函数 ​ 2.通过生成器推导式 ​ 3.python内置函数或者模块提供 1.2 生 ...

  7. 在非洲运营互联网系统-PAYGo方案

    ​ 尼日利亚当地经济.支付.网络.供电.交通等基建都比较落后,虽然各方面都在缓慢增长,但当地人对高额的刚需产品仍望而却步. 其他非洲国家也有同样的问题. 同理国内,一些低收入人群都想买房,但房价动辄几 ...

  8. 史上最详细的IDEA优雅整合Maven+SSM框架(详细思路+附带源码)

    目录 前言: 1. 搭建整合环境 2.Spring框架代码的编写 3.SpringMVC框架代码的编写 4. Spring整合SpringMVC的框架 5.MyBatis框架代码的编写 6. Spri ...

  9. LeetCode刷题笔记(1)常用知识点

    1.Integer.parseInt(String s, int radix)方法的作用是:将radix进制的字符串s转化成10进制的int型数字并返回. Integer.valueof(String ...

  10. vue-route动态路由

    配置子路由: 路由的视图都需要使用view-router 子路由也可以嵌套路由使用: children来做嵌套如上图 使用location.页面name就可以做页面跳转 mounted:挂载,延迟跳转 ...