Docker容器编排

1了解Docker容器主流的编排技术。

2掌握Docker Swarm的部署和基本使用。

3掌握Docker Compose的部署和基本使用。

所有节点已配置好主机名和网卡,并安装好docker-ce。

1.部署Swarm集群

1)配置主机映射

所有节点修改/etc/hosts文件配置主机映射。

[root@master ~]# cat /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

172.16.51.35master

172.16.51.36 node

2)配置时间同步

所有节点安装chrony服务。

# yum install -y chrony

Master节点修改/etc/chrony.conf文件,注释默认NTP服务器,指定上游公共NTP服务器,并允许其他节点同步时间。

[root@master ~]# sed -i 's/^server/#&/' /etc/chrony.conf

[root@master ~]# cat >> /etc/chrony.conf << EOF

local stratum 10

server master iburst

allow all

EOF

Master节点重启chronyd服务并设为开机启动,开启网络时间同步功能。

[root@master ~]# systemctl enable chronyd && systemctl restart chronyd

[root@master ~]# timedatectl set-ntp true

Node节点修改/etc/chrony.conf文件,指定内网 Master节点为上游NTP服务器,重启服务并设为开机启动。

[root@node ~]# sed -i 's/^server/#&/' /etc/chrony.conf

[root@node ~]# echo server 172.16.51.35 iburst >> /etc/chrony.conf  

//IPmaster节点地址

[root@node ~]# systemctl enable chronyd && systemctl restart chronyd

 

所有节点执行chronyc sources命令,查询结果中如果存在以“^*”开头的行,即说明已经同步成功

# chronyc sources

 

3)配置Docker API

所有节点开启Docker API

# vi /lib/systemd/system/docker.service

   ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

修改为

   ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

 

4)初始化集群

Master节点创建Swarm集群

 

初始化命令中--advertise-addr”选项表示管理节点公布它的IP是多少。其它节点必须能通过这个IP找到管理节点。

输出结果中包含3个步骤:

Swarm创建成功,swarm-manager成为manager node

②添加worker node需要执行的命令。

③添加manager node需要执行的命令。

5Node节点加入集群

复制前面的docker swarm join命令,在Node节点执行以加入Swarm集群

如果初始化时没有记录下docker swarm init提示的添加worker的完整命令,可以通过docker swarm join-token worker命令查看。

[root@master ~]# docker swarm join-token worker

 

如果初始化时没有记录下docker swarm init提示的添加worker的完整命令,可以通过docker swarm join-token worker命令查看

 

6)验证集群

登录Master节点,查看各节点状态

 

7)安装Portainer

PortainerDocker的图形化管理工具,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传和下载镜像、创建容器等操作)、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录用户管理和控制等功能。功能十分全面,基本能满足中小型企业对容器管理的全部需求。

登录Master节点,安装Portainer

 

遇到问题以及解决办法

 

docker service rm portainer将之前运行的service删除

重新运行service

8)登录Portainer

打开浏览器,输入地址http://172.16.51.35:9000访问Portainer主页

 

首次登录时需设置用户名和密码,然后输入设置的用户名和密码进行登录,进入Swarm控制台

 

2.运行Service

1)运行Service

部署一个运行httpd镜像的Service

 

部署Service的命令形式与运行容器的docker run很相似,--nameService命名,httpd为镜像的名字。

docker service ls命令可以查看当前Swarm中的Service

REPLICAS显示当前副本信息,1/1意思是web_server这个Service期望的容器副本数量为1,目前已经启动的副本数量为1,即当前Service已经部署完成。命令docker service ps可以查看Service每个副本的状态

 

可以查看到Service唯一的副本被分派到node,当前的状态是Running

2Service伸缩

刚刚部署了只有一个副本的Service,不过对于Web服务,通常会运行多个实例。这样可以负载均衡,同时也能提供高可用。

Swarm要实现这个目标非常简单,增加Service的副本数

 

副本数增加到5,通过docker service lsdocker service ps命令查看副本的详细信息

 

 

5个副本已经分布在Swarm的所有节点上。

可以通过scale up扩容服务,也可以通过scale down减少副本数

 

(3)访问Service

要访问http服务,首先得保证网络通畅,其次需要知道服务的IP。查看容器的网络配置。

Master上运行了一个容器,是web_server的一个副本,容器监听了80端口,但并没有映射到Docker Host,所以只能通过容器的IP访问。但是服务并没有暴露给外部网络,只能在Docker主机上访问,外部无法访问。要将Service暴露到外部

 

 

--publish-add 8080:80将容器的80映射到主机的8080端口,这样外部网络就能访问到Service了。通过http://172.16.51.35P:8080即可访问Service

 

4Service存储数据

Service的容器副本可能会伸缩,甚至失败,会在不同的主机上创建和销毁,这就引出一个问题,如果Service有需要管理的数据,那么这些数据应该如何存放呢?如果把数据打包在容器里,这显然不行,除非数据不会发生变化,否则,如何在多个副本之间保持同步呢?volume是将宿主级的目录映射到容器中,以实现数据持久化。可以用两种方式来实现:

l volume默认模式:工作节点宿主机数据同步到容器内。

l volume NFS共享存储模式:管理节点宿主同步到工作节点宿主,工作节点宿主同步到容器。

生产环境中一般推荐使用volume NFS共享存储模式。

登录Master节点,安装NFS服务端、配置NFS主配置文件、添加权限并启动

[root@master ~]# yum install nfs-utils -y

添加目录让相应网段可以访问并添加读写权限。

[root@master ~]# vi /etc/exports

/root/share 172.16.51.35/24(rw,async,insecure,anonuid=1000,anongid=1000,no_root_squash)

创建共享目录,添加权限。

/root/share为共享目录,生效配置

开启RPC服务并设置开机自启。

启动NFS服务并设置开机自启

 

查看NFS是否挂载成功。

 

登录Node节点,安装NFS客户端并启动服务。

[root@node ~]# yum install nfs-utils -y

[root@node ~]# systemctl start rpcbind

[root@node ~]# systemctl enable rpcbind

[root@node ~]# systemctl start nfs

[root@node ~]# systemctl enable nfs

部署的服务可能分不到各个节点上,在所有节点创建docker volume

[root@master ~]#docker volume create --driver local --opt type=nfs --opt o=addr=172.16.51.35

,rw --opt device=:/root/share foo33

--opt device=:/root/share用于指向共享目录,也可以是共享目录下的子目录。

查看volume

 

可以查看到docker volume列表中有foo33,查看volume详细信息

可以看出NFS/root/share被挂载到了/var/lib/docker/volumes/foo33/_data目录。

创建并发布服务

 查看服务分布的节点

 

Master节点/root/share目录中生成一个index.html文件

 

查看宿主机目录挂载情况。

 

查看容器目录。

 

5)调度节点

默认配置下Master也是worker node,所以Master上也运行了副本。如果不希望在Master上运行Service,可以执行如下命令

 

通过 docker node ls 命令查看各节点现在的状态

 

使docker service ps命令来查看

 

原文地址:https://www.cnblogs.com/lzp123/p/13769776.html