解散Docker Image为Dockerfile

生产环境中,对于运维来说,可能不需要亲自去编写Dockerfile来构建镜像,大多数是研发部门来做这个事情,但我认为运维岗位有必要清楚Dockerfile的构建过程,再不济也应该知道运行这个image时,最后的进程是怎么样的,这会更有利于测试维护。

在我的公司来说,底层运维和研发是搭不上话的,更别说了解Dockerfile了,这就需要自己来研究。

Docker Image莫名消失

今天客户让检查Kubernetes环境,说是环境起不来了,我通过远程ssh,结果发现ssh无法连接,客户方检查结果为内存oom溢出(环境已运行半年),因为是测试环境故而将服务器重启,内存被释放。然后我检查Kubernetes环境,发现大多数pod无法启动,状态为ImagePullBackOffEvicted,还有NodeAffinity

ImagePullBackOff:镜像下载失败,意味着本地没有镜像

Evicted:一般可以查看到describe信息,我见过的此状态都是磁盘容量问题

NodeAffinity:调度节点亲和性失败

Dockerfile语法及构建---分层构建

偶然的一次机会,解决项目故障的分析过程中,看到项目中有研发团队写好的Dockerfile,居然出现了两个FORM,吸引了我的眼球。和我自己之前写过的文章 Dockerfile构建简单镜像 有所不同,决定一探究竟。

docker加载配置文件重启服务导致pod重启

相信使用过Docker+Kubernetes环境的小伙伴们都知道,当重启docker服务时,Kubernetes集群中的pod也会随之重启。如果是生产环境可怎么办?尽管k8s有高可用,但是会影响调度平衡,以及服务器性能不均衡等不可控因素。最近我一直在想有没有一种方法,可以在不重启docker服务的情况下,加载配置文件。 docker官方是提供了这样的参数的。 https://docs.doc...

关于docker pull使用网络代理的配置

涉及到docker的几个配置文件

/etc/docker/daemon.json # 启动配置文件

/root/.docker/config.json # 启动配置文件

/etc/systemd/system/docker.service # 启动文件

使用PV&PVC为MySQL数据库提供持久化存储

这里使用nfs为PV&PVC做后端存储

准备NFS

[root@node1 ~]# yum -y install nfs-utils rpcbind
[root@node1 ~]# mkdir /nfsdata/mysql_pv
[root@node1 ~]# vim /etc/exports
/nfsdata *(rw,no_root_squash,sync)
[root@node1 ~]# exportfs -r
[root@node1 ~]# systemctl start rpcbind nfs-server
[root@node1 ~]# systemctl enable rpcbind nfs-server

在Rolling Update中使用Health Check

试想一个场景

现在有一个正常运行的多副本应用,要对应用进行更新(比如更新image),Kubernetes会启动新副本来代理旧副本,然后发生了以下事件:

1、正常情况下新副本需要10s左右来完成准备工作,在此之前无法响应更新后的业务请求。

2、但由于人为配置错误,副本始终无法完成准备工作(比如无法连接后端数据库)

Docker+k8s+GitLab+Jenkins(生产环境可CI/CD模拟)

这个环境是生产环境中的真实项目,仅做参考 通过Docker+k8s来部署web集群,GitLab+Jenkins实现代码自动化部署,在Jenkins中通过构建脚本,实现k8s对容器web集群代码自动更新

部署swarm集群

搭建swarm集群

实验环境

ip 服务 备注
192.168.1.11 Docker(已安装) swarm-manage
192.168.1.12 Docker(已安装) swarm node1
192.168.1.13 Docker(已安装) swarm node2

实验步骤

主机名更改

为了方便实验的进行,对每台主机进行更改主机名和hosts文件的编写

日志采集

日志采集

先使用一个例子来介绍日志的采集

如:

在一个成熟的公司中,如果用户想要去访问公司的web页面,需要经过缓存层、中间件、代理层、消息队列、数据库等等,然而每一个服务每一个用户去访问都会生成一个日志,当一个用户访问到页面,加上web后端,就会有6个日志生成,如果是一百万个访问量,就会生成六百万个日志,时间越长越多。

此时就会出现一个问题,如此多的日志怎么去管理。

以上的例子中,每个服务中日志必定是在自己服务运行本地的。如果把他们各自的日志都集中起来放在一台,也就是日志服务器来管理所有日志。

Docker容器日志管理---ELK

Docker日志处理—ELK

Docker_ELK

高效的监控和日志管理对保持生产系统持续稳定地运行以及排查问题至关重要。

在微服务架构中,由于容器的数量众多以及快速变化的特性使得记录日志和监控变得越来越重要。考虑到容器短暂和不固定的生命周期,当我们需要 debug(调试) 问题时有些容器可能已经不存在了。因此,一套集中式的日志管理系统是生产环境中不可或缺的组成部分。

Docker---Prometheus监控

Docker—Prometheus监控

Prometheus_logo

Prometheus需要多种第三方工具来收集数据,如接下来要使用的**cAdvisornode-exporter**,最终Prometheus使用Grafana进行监控数据的展示

Docker跨主机web集群的weave网络

跨主机web集群的weave网络

实验环境

ip 服务 备注
192.168.1.11 nginx host1
192.168.1.12 Docker已安装 host2
192.168.1.13 Docker已安装 host3
192.168.1.14 Docker已安装 host4

Docker监控方案

Docker监控方案

docker中有几个自带的监控方案:sysdiguifdscope

sysdig是命令行界面的监控,而后两者是web页面的图形化监控

日后,作者将会去研究普鲁米修斯的容器监控

sysdig容器监控的下载使用

下载

[root@localhost ~]# docker pull sysdig/sysdig

weave网络跨主机容器通信

weave网络跨主机容器间通信

实验环境

ip 服务 备注
192.168.1.12 docker(已安装)、weave已安装 host1
192.168.1.13 docker(已安装) host2

实验目的

将host2加入host1的weave网络中,在各个主机创建一个容器,并进行通信

实验步骤

参考上两篇文档可以安装完weave





正在载入...
PoweredHexo
HostedAliyun
DNSAliyun
ThemeVolantis
UV
PV
BY-NC-SA 4.0