使用Jenkins必须要用Tomcat吗,只用nginx不可以吗?
Jenkins可以不用安装tomcat,只要有Java环境就可以,他可以自己启动,但还是建议通过tomcat来启动但不能只用nginx,nginx只能处理静态文件,也就是说,他只负责文件的传输、数据的传输等(代理),他本身并没有处理动态脚本的功能所有动态脚本都是通过nginx向后端服务器转发请求实现的,如tomcat处理Java、php-fpm处理php、iis处理.net等,nginx只负责将后端服务器处理后的结果返回给用户而已
微服务在Docker+k8s下如何部署?
正好最近在项目中用到了这些技术,我来抛砖引玉吧。
首先说结论:
1. k8s 是非常好的一项技术,很稳定。如果发现正在运行的 pod 的数量不等于用户设定的期望值, k8s 则会自动创建或者删除 pod,直到两者相等。这样既保障了服务的不间断运行,同时还可以动态缩放服务的规格。用户只要调整 pod 的 replicate 的数量即可,其他的都交给 k8s 就好,非常省心。
2. 要用 jenkins 来集成命令行操作,虽然我个人非常偏爱使用命令行,但是我不得不承认用 jenkins 集成命令行操作会极大的提升工作效率。
下面说实现步骤:(本文以 azure 平台为例)
1. 编写 Dockerfile
2. 在 jenkins 创建任务,并执行包含如下命令的脚本
2.1 git pull 源代码到本地
2.2 docker build 命令生成镜像文件
2.3 docker 定义镜像文件版本号并上传到 azure 平台
2.4 kubectl 命令来创建 k8s 的 deployment & service.
2.5 每次版本更新可以调用 update image 来编译新的镜像版本并提供给 k8s 使用
注意在创建 k8s 的 deployment 和 service 的时候需要编写 yaml 格式的配置文件, deployment 配置包括 名称,镜像文件地址, cpu 最大最小分配值,内存最大最小分配值等。service 配置文件包括 名称,引用的 deployment 名称,以及是否使用 load balancer等。
更多详细信息可以参考我的 wiki.
我从以下几个方面解释一下,希望对你所有帮助:
- 什么是微服务
- kubernetes介绍
- 如何基于kubernetes实现微服务框架
一、微服务
微服务是一种分布式架构设计理念,为了推动细粒度服务的使用,这些服务要能协同工作,每个服务都有自己的生命周期。微服务一般配合更细粒度的容器使用,并和云原生有很强的关联性。它具有3个关键点:
- 每一个微服务是一个独立的自治系统,不依赖外部组件能够独立运行
- 对外只能通过API提供服务或者获取服务
- 粒度足够小
微服务十二要素原则:
微服务12要素
根据以上十二要素原则,如果要满足微服务设计理念,需要满足下列10个部件或者特性:
微服务框架需要实现的10个特性
二、kubernetes
kubernetes是一个开源的容器云平台,运行在其上的最小单元为pod。pod是kubernetes中最小的可部署和管理单元。pod是对容器(可以是docker容器,也可以是rkt容器)的进一步抽象。在抽象的过程中,不仅保留了容器本身的特性和含义,还扩展了更多的特性,比如:容器重启策略以及健康检查等。这些特性天然的对十二要素中某些要素提供了支持。
此外,kubernetes作为一个容器云平台,本身提供了微服务框架所需要的(2)服务注册和发现功能、(10)自动伸缩和自恢复功能、(9)调度和部署功能。
综上所述,kubernetes天然的契合微服务的设计原则并默认支持了微服务的某些特性。但是kubernetes对微服务的其余特性也是支持的,只要安装相应的helm包即可。
三、kubernetes上实现微服务框架
以下是kubernetes上整合微服务框架的架构图:
k8s实现微服务框架
需要整合或者实现的组件和功能:
- 配置中心:通过etcd可支持
- 服务注册和服务发现:通过 kubernetes coreDNS支持
- 弹性和容错:通过istio可支持
- api管理:通过kong/traefik可支持
- 服务安全:通过istio可支持
- 集中日志管理:通过fluentbit+fluentd+elasticsearch+kibana可支持
- 集中监控管理:通过Prometheus可支持
- 分布式追踪:通过zipkin或者jaeger可支持
- 调度和部署:kubernetes本身可支持
- 自动伸缩和自恢复:kubernetes本身可支持
更多内容大家可以关注我、查阅kubernetes和微服务系列文章。