容器化技术笔记
文章平均质量分 82
此专题用来记录和分享自己在工作中对Docker相关技术的学习和使用的一点一滴。其中也包括Mesos, Marathon, Jenkins, Gitlab等周边配套技术的使用。
felix_yujing
Better in Time
展开
-
K8S Pod该如何监控
背景由于业务容器化的推进,对K8S上运行的业务,也必须做到向之前物理机/虚拟机上一样,要有完备的监控保障。但是,毕竟K8S不是物理机/虚拟机,由于技术实现方式不同,监控方面也是有一定差别的。Pod是K8S上调度的最小单元,本文就K8S Pod该如何监控进行说明。CPU在使用物理机/虚拟机时,对于CPU的监控通常关注的是CPU使用率、CPU负载等。在K8S场景下,关注的指标有所不同:CPU使用率、CPU受限(CPU Throttled)时间或占比等。CPU使用率K8S场景下,CPU使用率是相对CP原创 2020-06-17 00:37:32 · 8754 阅读 · 5 评论 -
Prometheus中label名不一致的常用解决方案
在Prometheus的时候,有时候出于某种目的,经常会有要重命名label的需要。比如,老K8S集群上标识pod名的label叫pod_name,新K8S集群上的pod名label叫pod, 这种不一致会造成一些不必要的麻烦。为了保障label取值的统一,这里介绍两种常用的方法。采集时处理使用metric_relabel_configs来实现。下面这段配置会添加一个名为pod_name的label,其值为pod的值:metric_relabel_configs:- source_labels: [原创 2020-06-16 23:52:04 · 3874 阅读 · 0 评论 -
ingress nginx传递用户真实ip问题
业务应用经常有需要用到用户真实ip的场景,比如:异地登录的风险预警、访问用户分布统计等功能等。当有这种需求的时候,在业务上容器过程中,如果用到ingress就要注意配置了。通常,用户ip的传递依靠的是X-Forwarded-*参数。但是默认情况下,ingress是没有开启的。ingress的文档还比较详细,这里介绍一下可能用到的这3个参数:注:在文档顶栏的搜索框搜索forward字样就可以找到这3个参数1. use-forwarded-headers如果Nginx在其他7层代理或负载均衡后面原创 2020-06-08 13:41:34 · 7311 阅读 · 2 评论 -
K8S的10个常见失败问题的原因
1. Wrong Container Image / Invalid Registry Permissions当pod状态为ErrImagePull或ImagePullBackOff时,通常是由于以下3个原因(在排查网络故障的前提下):镜像tag写错镜像不存在,或拉取的镜像仓库地址写错没有拉取镜像的权限(漏配了imagePullSecrets)2. Application Crash...翻译 2020-04-30 23:53:34 · 13028 阅读 · 0 评论 -
Jenkins On Kubernetes---Jenkins上Kubernetes Plugin的使用
之前写过一篇《Jenkins On Mesos—Jenkins上Mesos Plugin的使用》的博客,说的是Jenkins通过Mesos Plugin来实现slave节点的动态扩展和收缩。如果使用docker的人,不知道kubernetes的话,总是显得有些尴尬,所以最近自己也开始在测试环境使用目前火热的Kubernetes 1.8版(之前是在用Marathon+Mesos那一套)。Maratho原创 2017-12-06 15:46:52 · 16442 阅读 · 11 评论 -
关于docker中执行docker命令的实践
最近在制作给kubernetes jenkins plugin调用的jenkins slave(默认情况下,kubernetes jenkins插件使用的是jenkinsci/jnlp-slave)容器镜像,以供自动创建的pod使用。对这个镜像的需求是:希望在pod运行的容器内,执行docker命令,完成docker build, push等一些操作,即docker in docker。首先,需要在原创 2017-12-05 02:14:01 · 2530 阅读 · 0 评论 -
修改K8S中NodePort方式暴露服务的端口的默认范围(30000-32767)的方法
比如像把端口范围改成0-65535,则在apiserver的启动命令里面添加如下参数: –service-node-port-range=0-65535原创 2017-12-03 14:52:50 · 27287 阅读 · 2 评论 -
关于Harbor上镜像删除
参考:https://github.com/vmware/harbor/blob/master/docs/user_guide.md 关于Harbor上容器镜像的删除,有如下的介绍: 可以简单概括为:Harbor的UI界面上先删除镜像,但这个操作并没有删除磁盘上存放的镜像文件,只是镜像文件manifest的映射关系,还需要通过GC来删除。先停止Harbor:docker-compose stop通原创 2017-11-24 17:48:48 · 5991 阅读 · 3 评论 -
pmm-server服务部署解读
pmm-server官方提供了容器的部署方式,通过一个docker镜像就可以运行了,然而这个容器里面包含了很多个服务:prometheus,grafana,consul,nginx等。如果不搞清里面到底有哪些东西,后期的使用和维护总感觉没有底。所以,根据pmm-server在github上的Dockerfile及脚本来解读一下它里面都包含了什么。所在github地址: https://github原创 2017-07-20 20:12:24 · 4288 阅读 · 0 评论 -
使用cAdvisor监控容器
有一篇关于docker容器监控工具的比较:http://dockone.io/article/397 里面一共介绍了5种工具,但是除了收费的几款,cadvisor是带监控界面的、最易入门的docker容器监控工具了。cadvisor在github上的地址为:https://github.com/google/cadvisor运行方法 使用docker容器运行cadvisor的方法如下:docke原创 2017-05-11 19:29:26 · 6792 阅读 · 0 评论 -
关于docker容器的监控
1 docker inspect [容器ID | 镜像ID] 查看容器创建时间、容器的IP、映射的端口、挂载的目录等信息。 此命令同样也能用来查看镜像的详细信息。2 docker stats 容器ID 用来查看容器的资源使用情况,如:CPU、内存、网络、I/O另外,在docker的配置文件中添加如下的参数之后,可以采用curl来调用stats API接口DOCKER_OPTS="-H tcp:原创 2017-03-20 16:14:17 · 4230 阅读 · 0 评论 -
docker容器安装配置redis集群
最近想用docker容器制作一个redis集群的镜像,以免每次都要重新配置搭建。正好在github上发现一个已有的制作docker-redis-cluster的项目,感觉挺好用的,这里推荐给大家:https://github.com/eloycoto/docker-redis-cluster制作生成的docker-redis-cluster容器里面有8个redis实例,其中6个实例构成3主3从的re原创 2017-02-20 15:37:37 · 9349 阅读 · 5 评论 -
docker配置overlay存储模式
之前看到网上的一些资料,采用下面的方法配置使用overlay的存储模式:cat > /etc/systemd/system/docker.service.d/override.conf <<EOF[Service]...ExecStart=ExecStart=/usr/bin/docker daemon --storage-driver=overlayEOF但是,重启docker之后发现,原创 2017-02-19 14:53:21 · 7906 阅读 · 0 评论 -
使用Calico配置Docker网络
试验环境 IP地址 服务器 10.200.0.101 node1 10.200.0.102 node2 10.200.0.103 etcd 软件名 版本 centos 7.2 calicoctl 1.0.2 docker 1.10.3 etcd 2.3配置与搭建1) 状态协同工具etcd搭建 calico需要是通过etcd来实现各原创 2017-02-16 16:46:03 · 13120 阅读 · 3 评论 -
Centos7上Docker仓库Harbor的搭建
之前一直使用开源的registry作为Docker的镜像仓库。Docker registry使用比较简单,但是没有用户管理机制、没有操作的记录功能、也没有展示界面等。对于企业级的Docker镜像仓库,网上都推荐VMware的开源项目Harbor。这两天在测试环境搭建了一下,发现配置安装非常的简单;Web界面也非常漂亮直观。下面简单记录下自己的搭建过程。0 环境准备 软件名 版本号 linu原创 2017-01-23 18:17:32 · 8092 阅读 · 2 评论 -
关于Mesos Agents出现Deactivated状态问题的排查
最近新初始化了几台mesos agent节点,将其接入之前的mesos master。mesos master的界面能看到agents已经连接上的信息,但是节点的连接状态分分钟就在变化: Registered时间始终是a minute age,生成的agent id也是不断的在变化。在Mesos界面的Agents状态栏里看到: Deactivated的表示是无效的,说明这4台agent是原创 2017-01-20 14:52:03 · 2364 阅读 · 0 评论 -
docker的devicemapper存储驱动
最近在官网上看了下devicemapper的说明文档,这里简要总结一下。1 诞生的背景期初docker是运行在Debian和Ubuntu系统上的,使用的是AUFS方式的存储。后来很多企业希望在Redhat系linux上运行docker,并决定基于现有的Device Mapper技术开发一个新的存储方案,这就是devicemapper。2 镜像的分层和共享Device Mapper技术不是按照文件级别原创 2017-01-11 16:04:01 · 6784 阅读 · 0 评论 -
Jenkins升级:1.x到2.x
Jenkins推出2.0的版本已经有一段时间了,相比1.x来讲,从界面到功能都有很大的改良,其中最吸引人的就是pipeline特性了。Jenkins的pipeline是基于Groovy DSL,可以通过简单脚本将原本独立运行于单个或多个节点的任务灵活的连接起来,实现复杂的发布流程,并且还能提供直观的展示界面。公司之前搭建的时候,使用的是Jenkins 1.625.3的版本,由于有很多任务在上面,不好原创 2017-01-08 21:17:53 · 5038 阅读 · 0 评论 -
关于gitlab备份
在之前的文章里讲到了如何使用docker运行gitlab服务,这里来说一下关于gitlab的备份。方法一因为是使用的docker容器运行的gitlab,考虑备份的时候,第一反应可能就是想直接拷贝容器的挂载目录。但是直接拷贝的目录,能不能直接在另外一台服务器上正常运行的起来呢? gitlab容器运行用的数据确实都在挂载目录里面,理论上来讲是可以直接拿来用的。但是,我尝试了一下,直接拷还是存在一些问题原创 2016-10-25 13:32:10 · 6638 阅读 · 0 评论 -
marathon升级:1.1.1到1.3.6
思路:将三台marathon节点停掉其中的两台,这样剩下的一台marathon即为leader节点。将那两台进行升级之后运行起来,再将未升级的那台marathon服务停掉,升级后的其中一台节点会成为leader,再将剩余的那台marathon也进行升级即可。marathon升级操作比较简单,不用先卸载,使用官方的repo直接通过yum命令会自动升级:yum install marathon原创 2017-01-03 20:22:51 · 1194 阅读 · 0 评论 -
mesos升级:0.28.2到1.1.0
最近在测试环境将mesos做一下升级,从0.28.2升级到了1.1.0版本。升级过程比较平滑,这里简单的做一下说明。思路:三个mesos master节点,先停掉两台mesos-master服务,剩下的一台会自动成为leader节点。然后对停掉的两台进行版本升级,最后再停掉剩余的一台,新版本的两台中的一台会成为leader,这时再对剩余的一台老版本进行升级。具体步骤如下: 1) 停止老版本meso原创 2017-01-03 19:50:54 · 1523 阅读 · 0 评论 -
数人云开源的容器管理面板Crane的试用
相比Marathon、K8S等其他的容器编排工具,Swarm是Docker官方力推的产品,作为后起之秀,其功能特性已经不弱于Mesos/K8s。因为,Docker仍在快速的迭代,非官方的产品在新特性方面可能跟不上发展的速度,不少企业都开始关注和转向Swarm,使用Swarm比较有代表性的有DaoCloud和数人云等做容器云服务的企业。最近在github上发现了一个数人云开源的基于Swarm的容器管理原创 2016-09-27 22:54:49 · 3537 阅读 · 0 评论 -
Marathon上应用重启策略的设置
Marathon为运行中的应用提供了灵活的重启策略。当应用只有一个实例在运行,这时候重启的话,默认情况下Marathon会新起一个实例,在新实例重启完成之后,才会停掉原有实例,从而实现平滑的重启。当然,可以通过Marathon提供的参数来设置自己想要的重启策略:"upgradeStrategy":{ "minimumHealthCapacity": N1, "maximumOverC原创 2016-08-16 23:16:18 · 3615 阅读 · 0 评论 -
Jenkins On Mesos---Jenkins上Mesos Plugin的使用
目前测试环境开始尝试使用Mesos+Marathon+Docker,将服务的搭建部署容器化。在搭建部署服务的过程中,也少不了对持续化继承工具Jenkins的使用。老的一套Jenkins使用的是固定Jenkins slave节点来构建任务,当构建任务多的时候,总是会出现排队等待的现象。为了改善这种情况,在网上找到了Jenkins On Mesos的解决方案。Jenkins Master可以在构建时根据原创 2016-08-13 20:47:15 · 5059 阅读 · 1 评论 -
制作mesos的docker镜像(centos7.2)
使用的基础镜像是centos7.2,安装的mesos版本为0.28.2。关于mesos的安装,可以参考之前的安装博客。docker容器里不能直接用systemctl命令来启动mesos,所以使用mesos-slave的脚本命令来启动。但是在启动时,出现systemd的报错: Failed to initialize systemd: Failed to locate systemd runtim原创 2016-08-12 05:46:47 · 2699 阅读 · 0 评论 -
使用docker运行gitlab服务
之前,在服务器上直接安装配置过gitlab,感觉需要配置安装的东西还是挺多的:git,redis,postgresql,nginx等。这么多服务一起,备份和迁移都不方便。为了避免这个问题,决定将gitlab进行docker化部署。所有服务组件都在一个docker容器里面,只需将重要的配置、repo数据等挂载在宿主机上保存。平时只要备份挂载的数据目录即可,另外,如果需要迁移,也只需把数据目录拷贝到其它原创 2016-08-09 22:47:13 · 16011 阅读 · 1 评论 -
关于Marathon-lb
Marathon-lb是个基于HAProxy的快速代理和负载均衡。他能为基于TCP和HTTP协议的应用提供代理和负载均衡,此外还支持SSL、健康检查、HTTP压缩、Lua脚本等特性。Marathon-lb通过Marathon的EventBus可以自动获取Marathon上每个应用的信息,并且能够为每组应用生成HAProxy配置。不同于通过域名机制来发现服务的Mesos-DNS,Marathon-lb原创 2016-07-31 23:51:20 · 5569 阅读 · 0 评论 -
关于Mesos-DNS
Mesos-DNS用来支持Mesos集群上的服务发现,使运行在Mesos上的应用和服务可以通过域名服务器来发现彼此。你只要知道一个Mesos数据中心上运行的应用的名字,就可以通过Mesos-DNS查询到该应用的IP和端口号。工作原理了解一个东西的原理,对实际运用是有帮助的。这里简单的看看Mesos-DNS的工作原理。下图是官网上的Mesos-DNS架构图。 Mesos-DNS定期去查询Meso原创 2016-07-12 22:29:19 · 2886 阅读 · 0 评论 -
Centos7上Mesos和Marathon的安装
对Mesos和Marathon的安装官方文档有较详细的安装说明,但是英文的。我参照官方安装文档(https://open.mesosphere.com/getting-started/install/),在测试环境试装了一下,这里整理下安装配置的步骤。测试环境 服务器IP 说明 192.168.0.101 Master节点 192.168.0.102 Master节点 19原创 2016-07-02 23:17:45 · 11153 阅读 · 0 评论 -
Kubernetes学习笔记---常用命令
1 查看类命令---# 查看集群信息kubectl cluster-info# 查看各组件信息kubectl -s http://localhost:8080 get componentstatuses# 查看pods所在的运行节点kubectl get pods -o wide# 查看pods定义的详细信息kubectl get pods -o原创 2016-06-09 17:14:06 · 12665 阅读 · 0 评论 -
Kubernetes学习笔记---安装
安装环境Centos7.1系统的机器3台Master:192.168.0.120Nodes:192.168.0.106, 192.168.0.107 =====Master=====1 在Master上安装kubernetes etcd flannelyum install kubernetes etcd flannel -y2 修改配置文件/e原创 2016-06-09 16:08:08 · 8028 阅读 · 2 评论 -
关于Docker Registry v2的搭建
新版 registry v2对镜像存储格式进行了重新设计,并且和旧版还不兼容。registry v2是由go语言开发,docker从1.6版本开始支持registry v2,之前python开发的老版registry在网上已被标为废弃了(没有维护更新,但也可以用)。之前在测试环境搭建了一个老版的registry,用了也比较久了。为了跟上技术的脚步,也准备今后使用新版registry v2。原创 2016-06-02 14:25:04 · 19533 阅读 · 7 评论 -
制作基于centos7的mysql的docker镜像
redhat从7开始,系统默认自带的数据库不在是mysql,而是mysql另外的一个分支叫mariadb。由于mariadb刚刚受到推崇,大家都还不太习惯,都还是倾向于使用mysql。公司的开发环境使用docker来部署服务,docker镜像是centos7的系统(可以说跟rhel7一样),于是试着做一个centos7的mysql镜像。cenos7的docker镜像只有操作系统原创 2016-03-19 18:19:59 · 7848 阅读 · 1 评论