解散Docker Image为Dockerfile

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

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

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(Nginx+php)+haproxy+mysql+Discuz论坛搭建

实验环境

ip 服务 备注
192.168.1.11 Docker swarm service(nginx+php) swarm-manager
192.168.1.12 Docker swarm service(nginx+php) node1
192.168.1.13 Docker swarm service(nginx+php) node2
192.168.1.14 mysql+haproxy mysql-haproxy

swarm集群-secret实例

部署环境仍然是swarm集群环境

部署一个 WordPress 应用,WordPress 是流行的开源博客系统。

将创建一个 MySQL service,将密码保存到 secret 中。我们还会创建一个 WordPress service,它将使用 secret 连接 MySQL。这个例子将展示如何用 secret 避免在 image 中存放敏感信息,或者在命令行中直接传递敏感数据。

建议主机使用内存4G以上

swarm集群-service操作(二)

继续使用上个文档中的环境

滚动更新service镜像版本

滚动更新降低了应用更新的风险,如果某个副本更新失败,整个更新将暂停,其他副本则可以继续提供服务。同时,在更新的过程中,总是有副本在运行的,因此也保证了业务的连续性。

下面我们将部署3个副本的httpd,镜像使用 httpd:2.4.37,然后将其更新到 httpd:2.4.38。

创建service

swarm集群-service操作(一)

要在Docker Engine处于群集模式时部署应用程序镜像,创建服务。通常,服务是某个大型应用程序上下文中微服务的镜像。service示例可能包括HTTP服务器,数据库或希望在分布式环境中运行的任何其他类型的可执行程序。

Swarm概念及功能

从主机层面来看,Docker Swarm 管理的是 Docker Host 集群。有一个重要的概念 - 集群化(Clustring) 集群化的概念服务器集群有一组网络上互相连接的服务器组成,他们一起协同工作。一个集群和一堆服务器最显著的区别在于: 集群能够将单个系统那样工作,同时提供高可用、负载均衡 和 并行处理。 如果在部署应用和服务时选择的是多个独立的服务器而非集群,资源的整体利用...

部署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(调试) 问题时有些容器可能已经不存在了。因此,一套集中式的日志管理系统是生产环境中不可或缺的组成部分。





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