swarm+Portainer安装部署

Swarm安装部署

1 swarm的特点

对外以Docker API接口呈现,这样带来的好处是,如果现有系统使用Docker Engine,则可以平滑将Docker Engine切到Swarm上,无需改动现有系统。

 ▲Swarm对用户来说,之前使用Docker的经验可以继承过来。非常容易上手,学习成本和二次开发成本都比较低。同时Swarm本身专注于Docker集群管理,非常轻量,占用资源也非常少。 *“Batteries included but swappable”,简单说,就是插件化机制,Swarm中的各个模块都抽象出了API,可以根据自己一些特点进行定制实现。

 ▲Swarm自身对Docker命令参数支持的比较完善,Swarm目前与Docker是同步发布的。Docker的新功能,都会第一时间在Swarm中体现。

2 swarm的概念

1)Swarm

集群的管理和编排是使用嵌入到 docker 引擎的 SwarmKit,可以在 docker 初始化时启动 swarm 模式或者加入已存在的 swarm

2)Node

一个节点(node)是已加入到 swarm 的 Docker 引擎的实例 当部署应用到集群,你将会提交服务定义到管理节点,接着 Manager

管理节点调度任务到 worker 节点,manager 节点还执行维护集群的状态的编排和群集管理功能,worker 节点接收并执行来自

manager 节点的任务。通常,manager 节点也可以是 worker 节点,worker 节点会报告当前状态给 manager 节点

3)服务(Service)

服务是要在 worker 节点上要执行任务的定义,它在工作者节点上执行,当你创建服务的时,你需要指定容器镜像

4)任务(Task)

任务是在 docekr 容器中执行的命令,Manager 节点根据指定数量的任务副本分配任务给 worker 节点

docker swarm:集群管理,子命令有 init, join, leave, update。(docker swarm –help 查看帮助)

docker service:服务创建,子命令有 create, inspect, update, remove, tasks。(docker service–help 查看帮助)

docker node:节点管理,子命令有 accept, promote, demote, inspect, update, tasks, ls, rm。(docker node –help 查看帮助)

node 是加入到 swarm 集群中的一个 docker 引擎实体,可以在一台物理机上运行多个 node,node 分为:

manager nodes,也就是管理节点

worker nodes,也就是工作节点

1)manager node 管理节点:执行集群的管理功能,维护集群的状态,选举一个 leader 节点去执行调度任务。

2)worker node 工作节点:接收和执行任务。参与容器集群负载调度,仅用于承载 task。

3)service 服务:一个服务是工作节点上执行任务的定义。创建一个服务,指定了容器所使用的镜像和容器运行的命令。

service 是运行在 worker nodes 上的 task 的描述,service 的描述包括使用哪个 docker 镜像,以及在使用该镜像的容器中执行什么命令。

4)task 任务:一个任务包含了一个容器及其运行的命令。task 是 service 的执行实体,task 启动 docker 容器并在容器中执行任务。

3 环境准备

1 部署搭建docker完成(可以参照之前的博客安装部署)

2 关闭selinux

vim /etc/selinux/config

将selinux=enforcing改为selinux=disabled,重启机器才能生效

3 关闭防火墙

systemctl stop firewalld

systemctl disable firewalld

4 如果是集群需要修改hosts配置文件

修改每个节点的hostname,例如假如两台机器,修改内容如下

Node1:

Vim /etc/hostname

docker1

vim /etc/hosts

192.168.248.172 docker1

192.168.248.173 docker2

Node2:

Vim /etc/hostname

Docker2

vim /etc/hosts

192.168.248.172 docker1

192.168.248.173 docker2

5 修改docker的监听端口

Swarm通过监听2375端口进行通信,所以在使用swarm集群管理之前,需要设置一下2375端口的监听,所有节点docker开启2375监听,修改如下配置文件

vim /usr/lib/system/system/docker.service

在ExecStart加入

-H tcp://0.0.0.0:2375 –H unix:///var/run/docker.sock

详细信息如下所示

[root@docker1 ~]# cat /usr/lib/systemd/system/docker.service

[Unit]

Description=Docker Application Container Engine

Documentation=https://docs.docker.com

BindsTo=containerd.service

After=network-online.target firewalld.service containerd.service

Wants=network-online.target

Requires=docker.socket

[Service]

Type=notify

# the default is not to use systemd for cgroups because the delegate issues still

# exists and systemd currently does not support the cgroup feature set required

# for containers run by docker

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

ExecReload=/bin/kill -s HUP $MAINPID

TimeoutSec=0

RestartSec=2

Restart=always

# Note that StartLimit* options were moved from "Service" to "Unit" in systemd 229.

# Both the old, and new location are accepted by systemd 229 and up, so using the old location

# to make them work for either version of systemd.

StartLimitBurst=3

# Note that StartLimitInterval was renamed to StartLimitIntervalSec in systemd 230.

# Both the old, and new name are accepted by systemd 230 and up, so using the old name to make

# this option work for either version of systemd.

StartLimitInterval=60s

# Having non-zero Limit*s causes performance problems due to accounting overhead

# in the kernel. We recommend using cgroups to do container-local accounting.

LimitNOFILE=infinity

LimitNPROC=infinity

LimitCORE=infinity

# Comment TasksMax if your systemd version does not supports it.

# Only systemd 226 and above support this option.

TasksMax=infinity

# set delegate yes so that systemd does not reset the cgroups of docker containers

Delegate=yes

# kill only the docker process, not all processes in the cgroup

KillMode=process

[Install]

WantedBy=multi-user.target

6 重启docker服务

systemctl daemon-reload

systemctl restart docker

4 swarm安装与集群部署

1 swarm镜像的下载

在集群节点上都安装swarm

docker pull swarm

2 初始化swarm

docker swarm init --advertise-addr 192.168.248.172

Swarm initialized: current node (iit9n9veuse9g4ctk525e661x) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-03iw8hbuv2jzrd9f7r5qvhzr1xrlsysa2kavjao36170u7mlia-f54aml7vt3i6r3cj7an8oaj2e 192.168.248.172:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

上面命令执行后,该机器自动加入到swarm集群。这个会创建一个集群token,获取全球唯一的 token,作为集群唯一标识。后续将其他节点加入集群都会用到这个token值。

其中,--advertise-addr参数表示其它swarm中的worker节点使用此ip地址与manager联系。命令的输出包含了其它节点如何加入集群的命令

如果其他节点加入到swarm集群,可以采取如下步骤

   docker swarm join --token SWMTKN-1-03iw8hbuv2jzrd9f7r5qvhzr1xrlsysa2kavjao36170u7mlia-f54aml7vt3i6r3cj7an8oaj2e 192.168.248.172:2377

3 查看swarm集群中的节点信息

docker node list

4 下载portainer镜像

docker search portainer 查询是否存在portainer镜像

docker pull portainer/portainer

5 运行portainer容器

1 单机版运行

docker run -d -p 9000:9000 \

    --restart=always \

    -v /var/run/docker.sock:/var/run/docker.sock \

    --name prtainer-test \

    portainer/portainer

该语句用宿主机9000端口关联容器中的9000端口,并给容器起名为portainer-test。启动成功后,使用该机器IP:PORT即可访问Portainer。

你可能感兴趣的:(swarm+Portainer安装部署)