天天看点

1.07 容器编排docker Swarm

1.编排swarm简介

学习怎么将docker用于生产环境,前面学的是用于本地测试环境

之前学的是通过docker客户端连接安装好docker的linux机器,如下图

1.07 容器编排docker Swarm

生产环境下机器和容器都非常多,怎么去管理容器?怎么横向扩展?如果容器down了怎么恢复?如何更新容器不影响业务?如何监控容器?如何调度容器的创建?如何保护隐私数据?

swarm是内置于docker的容器编排工具

1.07 容器编排docker Swarm

swarm集群架构图,有manager和worker两种角色

manager至少有两个,内置分布式存储数据库实现数据同步,这里是通过Raft进行数据同步的,不会出现脑裂的情况,最终实现HA

worker之间通过gossip的网络做数据同步

1.07 容器编排docker Swarm

service和replicas,部署nginx的service,实际部署产生三个容器,三个容器通过调度系统,调度到不同的节点

也就是部署时,最初是不知道扩展节点会部署到哪里的,由swarm通过调度算法去算的,看哪个机器目前空闲

1.07 容器编排docker Swarm

服务创建和调度

在swarm manage做决策,决定将worker部署到哪里

1.07 容器编排docker Swarm

2.三节点swarm集群的搭建

准备三台装好docker的机器,这里做一个manager,两个worker

在主节点node01初始化swarm

运行完生成一行命令,子节点加入时,复制这一行代码执行就可以

1.07 容器编排docker Swarm

node02和node03分别作为worker加入

1.07 容器编排docker Swarm
1.07 容器编排docker Swarm

查看当前swarm节点

1.07 容器编排docker Swarm

节点退出swarm集群

1.07 容器编排docker Swarm

快速部署:

地址:https://labs.play-with-docker.com/

1.07 容器编排docker Swarm

执行上面的步骤

3.创建维护Service并扩展

创建service

1.07 容器编排docker Swarm

查看service状态

1.07 容器编排docker Swarm

查看service创建的container的情况

1.07 容器编排docker Swarm

然后在对应节点可以查看进程

1.07 容器编排docker Swarm

将service横向扩展

1.07 容器编排docker Swarm

查看一共有5个demo实例

1.07 容器编排docker Swarm

不同节点查看进程,5个service平均分配到manager和workder

1.07 容器编排docker Swarm

node02中,删除一个容器

1.07 容器编排docker Swarm

删完立刻去主节点查看,少了一个demo实例

1.07 容器编排docker Swarm

主节点查看,会自动恢复

1.07 容器编排docker Swarm

主节点删除service

1.07 容器编排docker Swarm

4.使用DockerStack部署VotingApp

进入之前的/home/voting-example目录,将之前的docker-compose.yml内容删掉

1.07 容器编排docker Swarm

swarm模式编译运行

1.07 容器编排docker Swarm

查看运行状态

1.07 容器编排docker Swarm

查看运行详细情况,多次执行,直到部署好

1.07 容器编排docker Swarm

访问IP:5000是投票的页面

1.07 容器编排docker Swarm

访问IP:5001是查看结果的页面

1.07 容器编排docker Swarm

集群运行状态下,将vote扩展为3个

1.07 容器编排docker Swarm

查看到多了一个实例

1.07 容器编排docker Swarm

停止并删除所有service

1.07 容器编排docker Swarm

5.使用DockerStack部署可视化应用

创建目录

1.07 容器编排docker Swarm

部署服务

1.07 容器编排docker Swarm

查看stack部署情况

1.07 容器编排docker Swarm

浏览器访问任意节点的9001端口

1.07 容器编排docker Swarm

查看stack实例

1.07 容器编排docker Swarm

集群运行状态下,将stack-demo_portainer扩展为3个

1.07 容器编排docker Swarm

浏览器访问任意节点的9001端口,此时stack-demo_portainer变为了3个实例

1.07 容器编排docker Swarm

删除stack实例

1.07 容器编排docker Swarm

6.使用并管理DockerSecret

secret可以是用户名和密码,也可以是SSH key,可以是任何不想让别人看到的数据

docker swarm的架构如下,manager节点有基于raft的内置的分布式存储,是加密后存储的,worker信息也是加密是,也是分布式存储的

1.07 容器编排docker Swarm

随意创建一个文件

1.07 容器编排docker Swarm

创建secret

1.07 容器编排docker Swarm

此时密码已经存储到manager的分布式存储中了

1.07 容器编排docker Swarm

查看secret

1.07 容器编排docker Swarm

也可以从标准输入创建

1.07 容器编排docker Swarm

再次查看secret

1.07 容器编排docker Swarm

删除secret

1.07 容器编排docker Swarm

创建mysql的service

1.07 容器编排docker Swarm

查看进程运行的节点,这里看到是node03运行的

1.07 容器编排docker Swarm

node03中查看进程

1.07 容器编排docker Swarm

node03中交互运行mysql

1.07 容器编排docker Swarm

交互运行时可以查看密码,然后用这个密码登录mysql

1.07 容器编排docker Swarm
1.07 容器编排docker Swarm
1.07 容器编排docker Swarm

7.更新service版本

创建demo网络

1.07 容器编排docker Swarm

查看网络

1.07 容器编排docker Swarm

创建service,可以去dockerHub查看nginx版本

1.07 容器编排docker Swarm

访问80端口,会返回一个欢迎页

1.07 容器编排docker Swarm

在node01写一个脚本,不停访问

1.07 容器编排docker Swarm

在另一个会话,更新service的版本到1.13

1.07 容器编排docker Swarm

node02访问业务,自动切换到新版本

1.07 容器编排docker Swarm

在另一个会话,更新访问端口

1.07 容器编排docker Swarm

node02访问,查看效果

1.07 容器编排docker Swarm