Docker EFK 搭建
Docker Swarm 集群安装
准备
- CentOS7
192.168.174.150 swarm-m
192.168.174.151 swarm-n
- Docker
Client:
Version: 18.09.8
API version: 1.39
Go version: go1.10.8
Git commit: 0dd43dd87f
Built: Wed Jul 17 17:40:31 2019
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 18.09.8
API version: 1.39 (minimum version 1.12)
Go version: go1.10.8
Git commit: 0dd43dd
Built: Wed Jul 17 17:10:42 2019
OS/Arch: linux/amd64
Experimental: false
安装
本文档主要介绍 Swarm 集群环境安装,以及可视化管理界面 Portainer 安装。
【集群】基础环境配置
第一步:Docker 安装
// 省略
第二步:修改主机名
# 192.168.174.150 主机
hostnamectl --static set-hostname swarm-m
# 192.168.174.151 主机
hostnamectl --static set-hostname swarm-n1
第三步:关闭SELinux
# 查看 SELinux 状态
getenforce
/usr/sbin/sestatus -v
# 临时关闭
setenforce 0
# 永久关闭
# 修改 /etc/selinux/config 配置文件,将SELINUX=enforcing改为SELINUX=disabled
#SELINUX=enforcing
SELINUX=disabled
# 重启
reboot
第四步:关闭防火墙
#停止firewall
systemctl stop firewalld.service
#禁止firewall开机启动
systemctl disable firewalld.service
第五步:修改docker监听端口
# 修改 /lib/systemd/system/docker.service 配置文件,在ExecStart加入:-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
#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
第六步:重启docker服务
#使配置文件生效
systemctl daemon-reload
#重启docker服务
systemctl restart docker
【集群】Swarm安装和集群创建
第一步:Swarm镜像下载
# 在两台主机上分别安装 Swarm
docker pull swarm
[root@swarm-m ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
swarm latest ff454b4a0e84 13 months ago 12.7MB
第二步:初始化 Swarm(192.168.174.150)
[root@swarm-m ~]# docker swarm init --advertise-addr 192.168.174.150
Swarm initialized: current node (xvzoctxprixgk4r9qfrafzcr6) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-1rd4qulqvyfrmpz5z8qbh9jw1obgpde5fhl2crvigxvz0p737o-b02c8cqcq1sb7d9q3l8xuo12m 192.168.174.150:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
第三步:添加集群node节点(192.168.174.151)
docker swarm join --token SWMTKN-1-1rd4qulqvyfrmpz5z8qbh9jw1obgpde5fhl2crvigxvz0p737o-b02c8cqcq1sb7d9q3l8xuo12m 192.168.174.150:2377
第四步:查看集群节点(192.168.174.150)
[root@swarm-m ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
xvzoctxprixgk4r9qfrafzcr6 * swarm-m Ready Active Leader 18.09.8
pcajl37kieq1g70d08ypr23v6 swarm-n1 Ready Active 18.09.8
Portainer 可视化管理界面(192.168.174.150)
下载官方镜像
docker pull portainer/portainer
单机运行
如果仅有一个docker宿主机,则可使用单机版运行,Portainer单机版运行十分简单,只需要一条语句即可启动容器,来管理该机器上的docker镜像、容器等数据。
创建数据卷:
docker volume create portainer_data
运行容器:
docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
参数说明:
-d:容器在后台运行;
-p 9000:9000 :宿主机9000端口映射容器中的9000端口
-v /var/run/docker.sock:/var/run/docker.sock :把宿主机的Docker守护进程(Docker daemon)默认监听的Unix域套接字挂载到容器中;
-v portainer_data:/data :把宿主机portainer_data数据卷挂载到容器/data目录;
集群运行
更多的情况下,我们会有一个docker集群,可能有几台机器,也可能有几十台机器,因此,进行集群管理就十分重要了,Portainer也支持集群管理,Portainer可以和Swarm一起来进行集群管理操作。首先要搭建了一个Swarm,本文不着重介绍swarm集群的安装。
portainer集群启动:
# 方式一
$ docker service create \
--name portainer \
--publish 9000:9000 \
--replicas=1 \
--constraint 'node.role == manager' \
--mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock \
--mount type=bind,src=//opt/portainer,dst=/data \
portainer/portainer \
-H unix:///var/run/docker.sock
# 方式二
docker run -d -p 9000:9000 --restart=always --name prtainer-test portainer/portainer
使用
使用 http://ip:9000 (admin / admin2019)访问,首次进入界面需要创建一个管理员账号,进入之后添加对应集群endpoint节点就行。
Swarmprom - Swarm的Prometheus监控
准备
- Docker CE 17.09.0-ce或Docker EE 17.06.2-ee-3(或更高版本)
- Swarm 具有一个管理器和一个工作器节点的集群
- 启用了Docker引擎实验功能并将指标地址设置为 0.0.0.0:9323
安装
- 设置Docker 9323端口
# 修改 /lib/systemd/system/docker.service 配置文件,在ExecStart加入:--experimental=true --metrics-addr 0.0.0.0:9323
#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 --experimental=true --metrics-addr 0.0.0.0:9323
- clone swarmprom 项目(根据所需就行配置)
mkdir -p /opt/beyondsoft/warm #命名随意
git clone https://github.com/stefanprodan/swarmprom.git
cd swarmprom
- 通过docker stack 启动swarmprom监控
ADMIN_USER=admin \
ADMIN_PASSWORD=admin \
SLACK_URL=https://hooks.slack.com/services/TOKEN \
SLACK_CHANNEL=devops-alerts \
SLACK_USER=alertmanager \
docker stack deploy -c docker-compose.yml mon
【注】具体配置请参考官方文档
Weave
准备
- Swarm 集群(master:10.8.7.71 slave1:10.8.7.72)
安装
Weave介绍
Weave是Github上一个比较热门的Docker容器网络方案,具有非常良好的易用性且功能强大。Weave 的框架它包含了两大主要组件:
- Weave:用户态的shell脚本,用于安装Weave,将container连接到Weave虚拟网络。并为它们分配IP。
- Weaver:运行于container内,每个Weave网络内的主机都要运行,是一个Go语言实现的虚拟网络路由器。不同主机之间的网络通信依赖于Weaver路由。
Weave通过创建虚拟网络使Docker容器能够跨主机通信并能够自动相互发现。
通过weave网络,由多个容器构成的基于微服务架构的应用可以运行在任何地方:主机,多主机,云上或者数据中心。
应用程序使用网络就好像容器是插在同一个网络交换机上一样,不需要配置端口映射,连接等。
在weave网络中,使用应用容器提供的服务可以暴露给外部,而不用管它们运行在何处。类似地,现存的内部系统也可以接受来自于应用容器的请求,而不管容器运行于何处。
一个Weave网络由一系列的'peers'构成----这些weave路由器存在于不同的主机上。每个peer都由一个名字,这个名字在重启之后保持不变.这个名字便于用户理解和区分日志信息。
每个peer在每次运行时都会有一个不同的唯一标识符(UID).对于路由器而言,这些标识符不是透明的,尽管名字默认是路由器的MAC地址。
Weave路由器之间建立起TCP连接,通过这个连接进行心跳握手和拓扑信息交换,这些连接可以通过配置进行加密。
peers之间还会建立UDP连接,也可以进行加密,这些UDP连接用于网络包的封装,这些连接是双工的而且可以穿越防火墙。
Weave网络在主机上创建一个网桥,每个容器通过veth pari连接到网桥上,容器由用户或者weave网络的IPADM分配IP地址。
- weave
# 下载
curl -L git.io/weave -o /usr/local/bin/weave
# 赋予执行权限
chmod a+x /usr/local/bin/weave
# 查看weave版本
weave version
# 查看weave状态
weave status
weave status connections
yum -y install bridge-utils
# 启动weave 10.8.7.71
weave launch
# 节点启动的时候连接到master (创建weave网络的主机叫master) 10.8.7.72
weave launch 10.8.7.72
docker ps # 如果有一个weaveworks/weave容器在运行就表示启动成功,后边两个检查并非必须!
brctl show # 检查网桥, weave启动还会生成一个名叫weave的网桥, (docker0网桥是docker默认生成的)
docker network ls # 检查docker中的网络配置, 发现其中也生成了一个Name为weave的网络
- scope
sudo curl -L git.io/scope -o /usr/local/bin/scope
sudo chmod a+x /usr/local/bin/scope
# 10.8.7.71 执行
scope launch
# 10.8.7.72 执行
scope launch 10.8.7.71
- 访问地址 http://10.8.7.71:4040 进行验证
【注】详细可参考官方文档