Jenkins 2 Pipleline的简单教程(一)
📅 2018-03-02
Jenkins 2.0开始推行Pipeline as Code,实现从CI到CD的转变。 Pipeline实际上是一套Groovy DSL,用Groovy脚本描述CI/CD的流程,Jenkins可以从代码库中获取脚本,实现了Pipeline as Code。Pipeline将原来独立运行的多个任务连接起来,可以实现更加复杂的CI/CD流程。
...Jenkins 2.0开始推行Pipeline as Code,实现从CI到CD的转变。 Pipeline实际上是一套Groovy DSL,用Groovy脚本描述CI/CD的流程,Jenkins可以从代码库中获取脚本,实现了Pipeline as Code。Pipeline将原来独立运行的多个任务连接起来,可以实现更加复杂的CI/CD流程。
...Prometheus提供了一个blackbox_exporter可以实现网络监控,支持http、dns、tcp、icmp等监控。
blackbox_exporter
以下面的命令运行:
1blackbox_exporter --web.listen-address=:9115 --config.file=blackbox.yml
其中9115是这个exporter的http端点的监听端口,blackbox.yml是它的配置文件,需要在其中使用blackbox_exporter
的http、dns、tcp、icmp等prober定制配置出各种监测模块(module)。关于blackbox_exporter
的配置具体参考Blackbox exporter configuration和Blackbox exporter configuration Exmaple。下面的例子是一个最基本的配置:
最近测试环境Kubernetes集群的两台主机重启后,发现这两台主机上(CentOS 7.3)的Pod无法删除。 发现这个问题的经过如下:
某个服务的自动发布触发后,监控系统告警有Pod处于Terminated状态,具体去查看发现前面重启过的两台主机上因为服务发布需要被删掉的Pod一直处于Terminated: ExitCode
状态。因为是测试环境,开始没有特别关注,而是直接使用kubectl delete pod <podname> --namespace=<namspacer> --grace-period=0 --force
尝试将有问题Pod强制删除,结果强制删除不起作用。马上觉得问题可能没有那么简单,于是分别登录到这两台主机上通过docker ps -a
查看对应docker容器的状态,发现这两个Pod的docker容器处于Dead状态。使用docker rm <container id>
,提示Device is Busy
,无法删除。
HDFS被设计成支持非常大的文件,与HDFS兼容的应用是那些处理大数据集的应用。这些应用程序处理非常大的文件在具有只被创建和写入一次,被读取一次或多次的特性,即HDFS中存储的大文件是一次写入多次读取不支持修改的,同时要求HDFS满足应用程序以流读取速度的要求。
...Curator是一个用来管理Elasticsearch索引的工具,使用它可以管理需要删除或保留的索引数据。 当Elasticsearch作为ELK、EFK等日志收集方案的日志存储时,删除过期数据以释放存储空间显的格外重要,使用Curator可以删除旧的索引并优化系统。
使用Curator可以完成以下功能:
安装Curator十分简单,可以通过python pip工具来完成。
...Istio中的官方文档中对Istio的架构做了介绍。下图是文档中的Istio架构示意图:
Istio在逻辑上分为数据平面(data plane)和控制平面(control plane)两块。
控制平面对Service Mesh具有强大的控制力。Istio的控制平面由包括以下组件:
Pilot(领航员)
:为envoy sidecar提供服务发现,为流量管理功能实现了灵活的路由(如A/B测试,金丝雀发布)和弹性(如:超时,重试,熔断等)。它将高级别的路由规则转换为envoy特定的配置并在运行时将配置传播到sidecar中。Mixer(混合器)
:Mixer是一个平台独立的组件,它的职责是在ServiceMesh上实施访问控制和使用策略(usage policies),并从envoy代理和其它服务中收集自动测量数据。Istio-Auth
:使用强大的健服务之间以及服务和终端用户间的认证。可以将ServiceMesh中未加密的流量升级,并为运维人员提供基于服务标识而非网络控制的策略管理能力。Envoy是Istio的数据平面。Envoy早已经是CNCF的ServiceMesh项目之一,功能强大和稳定。Envoy适合使用sidecar模式部署为服务的Proxy。Envoy使用C++开发在性能和资源消耗上优于CNCF的另一个ServiceMesh项目linkerd。Envoy接管服务网格中所有服务的进出流量。Istio实际上利用了很多Envoy已有的特性,例如:服务的动态发现、负载均衡、TSL终止、HTTP/2和gRPC代理、断路器、健康检查、流量拆分、故障注入以及丰富的度量指标。
...使用Prometheus监控Redis,推荐使用https://github.com/oliver006/redis_exporter这个exporter。 目前我们主要使用的是redis的主从复制搭配Sentinel实现的高可用方案。部署形式上有两种:一种形式是使用ansible部署在物理机器上,同样使用ansible在相同的机器上部署redis_exporter;另外一种形式是redis和sentinel以StatefulSet的形式跑在Kubernetes上,redis_exporter以sidecar容器的形式和redis容器在相同的Pod里。
...之前在《Prometheus监控实践:Kubernetes集群监控》一本中总结了我们目前基于Prometheus对Kubernetes集群的监控,除了监控Kubernetes集群本身的关键指标之外,也对部署在Kubernetes集群上应用的状态做了监控。 对于Kubernetes集群上Pod, DaemonSet, Deployment, Job, CronJob等各种资源对象,我们通过kube-state-metrics作为Prometheus的exporter完成了对这些Kubernetes资源对象的监控。而为了使监控深入到应用的内部,就需要应用自身暴露作为Exporter暴露监控指标,这就和应用的开发语言和技术框架紧密相关了。
我们目前部署在Kubernetes上的微服务主要是由Go和Java两种语言开发的,本篇将总结一下目前我们使用Prometheus对Java应用的监控实践。
...2017年已经过去了,网上都在写年度总结,这里也流水一篇。
2017年技术上主要实践以Kubernetes和Docker为基础的云原生(CloudNative)技术。 根据CNCF的CloudNativeLandscape并结合我们在线上的选型和应用,画了我们线上已经使用的CloudNative技术。
...本文将总结一下我们目前使用Prometheus对Kubernetes集群监控的实践。 我们选择Prometheus作为监控系统主要在以下各层面实现监控:
其中基础设施层监控指标的拉取肯定是来在Prometheus的node_exporter
,因为我们要监控的服务器节点既包含Kubernetes节点又包含其他部署独立中间件的节点,
所以我们并没有将node_exporter
以daemonset的形式部署到k8s上,而是使用ansible将node_exporter
以二进制的形式部署到所有要监控的服务器上。
而负责从node_exporter
拉取指标的Prometheus也是用ansible独立部署在Kubernetes集群外部的。Prometheus的配置文件prometheus.yml使用ansible的j2模板生成。