Portainer是一款开源的容器管理平台,支持多种容器技术,如Docker、Kubernetes和Swarm等。它提供了一个易于使用的Web UI界面,可用于管理和监控容器和集群。Portainer旨在使容器管理更加简单和可视化,并且它适用于各种规模的容器环境,从个人计算机到企业级部署,而且能够一次性管理多种类型的多个集群。
Portainer主张让容器管理变得更加简单,所以它的界面更加人性化,操作不复杂,即便非专业性非常强的人员,也能够很快掌握基本的管理能力。
Portainer分为企业版Portainer Business Edition和社区版Portainer Community Edition。Portainer Business Edition建立在开源版本的基础上,包括一系列专门针对业务用户需求的高级特性和功能(如 RBAC等)。
社区版本的功能已经非常强大了,满足一般的集群管理完全没有问题,本文的安装和演示都基于社区版本来。
Portainer提供了丰富的功能,包括但不限于:
Portainer集群由两个部分组成:Portainer Server 和 Portainer Agent。两者都可以在现有的容器化基础设施上作为轻量级容器运行。
Portainer Agent部署在集群中的每个节点,并配置为向 Portainer Server报告数据,单个 Portainer Server将接受来自任意数量的 Portainer Agent的连接,从而提供从一个集中式界面管理多个集群的能力。为此,Portainer Server 容器需要数据持久性,其默认使用sqllite数据,也支持自定义其他类型的数据库。
Portainer Agent是一个非常重要的组件,它负责与Docker引擎、kubelet通信,并收集和传递容器和镜像等信息,从而实现了Portainer对Docker和kubernetes的管理和监控。
Portainer Server内置了Portainer API和Portainer UI。Portainer API作为核心的业务逻辑处理单元,为用户提供了RESTful API接口,实现了用户权限管理、容器编排、镜像管理、网络管理等功能。Portainer UI则提供了Web界面,方便用户通过浏览器访问和管理Portainer服务。
通过部署多个Portainer Server可以实现Portainer Server集群的高可用。Portainer Agent可以配置连接多个Portainer Server,通过--host
指定多个Portainer Server,在这种情况下,Portainer Agent会将数据同时同步到多个Portainer Server,数据发送之前会进行去重,Server端也会根据数据ID进行去重处理。
version: '3'
services:
agent:
image: portainer/agent
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command: --host=hostname_or_ip --port=9000 --no-tls
多个Portainer Server可以配置使用同一个数据库,在配置文件中指定数据库的类型、地址、端口、数据库名称、用户名和密码等参数即可,以下是Docker Compose配置文件示例:
version: '3'
services:
portainer:
image: portainer/portainer-ce
environment:
- "DB_TYPE=mysql"
- "DB_HOST=your_database_host"
- "DB_PORT=3306"
- "DB_NAME=your_database_name"
- "DB_USERNAME=your_database_username"
- "DB_PASSWORD=your_database_password"
总的来说,portainer的核心设计使得集群的架构和部署都比较简单。
portainer的安装非常简单,可以直接通过docker容器快速部署,支持在Linux或Windows服务器上本地安装,如下:
在Docker容器中安装Portainer:
$ docker volume create portainer_data
$ docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
本地安装Portainer:
在Linux或Windows服务器上下载适用于您的系统的二进制文件,并运行以下命令:
$ ./portainer
portainer还支持docker stack的形式安装,笔者的安装就采用了这种方式:
下载portainer-agent-stack.yml配置文件
[docker@node1 ~]$ curl -L https://downloads.portainer.io/ce2-17/portainer-agent-stack.yml -o portainer-agent-stack.yml
使用docker stack安装portainer
[docker@node1 ~]$ docker stack deploy -c portainer-agent-stack.yml portainer
Creating network portainer_agent_network
Creating service portainer_agent
Creating service portainer_portainer
查询portainer容器
安装完成以后,使用docker ps
应该能查看到portainer容器,类似如下图
启动以后开放了9443作为web端口访问,在浏览器中输入http://{IP}:9443
即可访问portainer页面,在未设置密码之前,首先会进入密码设置页
创建账号密码登录以后,进入首页,会显示所有的环境Environments,如下图,我本地安装了一个docker swarm,一个manager节点和一个worker节点。
下面一起来体验一下portainer的主要功能:包括Dashboard仪表板、容器管理、镜像管理、Service管理、Volumes管理、用户和团队管理。这里以docker集群的管理为例,如果你连接的是kubernetes集群,那么会有kubernetes集群的相关功能。
清晰简洁地展示集群地相关信息,以及集群内关键资源的分布情况,如Stack、Service、Container、Image、Volume、Network、GPU等。
能让你快速对所管理的集群有一个概况的掌握。
有专门针对Swarm集群的面板,笔者本地就是搭建了一个简单的2个节点的swarm集群(一个manager和一个worker),如下图可以看到清楚列出了swarm集群节点、cpu、内存等相关信息,节点的类型、IP地址、运行状态等也展示了出来。
初次之外,通过"cluster visualizer"还可以以可视化的形式进行展示:
以容器的维度列出所管理集群下所有的容器,支持容器的创建、查询、启动、停止、删除等,所有容器的IP、状态、对应的镜像等信息也在这里展示,非常方便。
在容器的详细信息页面中,可以查看容器的日志,包括标准输出和标准错误输出。
列出了本地所有的镜像,支持从远程仓库如DockerHub拉取镜像到本地,还支持镜像导入、查询、删除,甚至是在线构建新的镜像。
支持在线可视化进行Service创建,支持端口映射配置、replicated和global不同模式配置,比起命令行来说简单方便了不少。
还可以实时查看service列表,查询和删除对应的service。
portainer支持数据卷的管理,卷的详情查看、挂载的容器、权限控制,支持卷的新建、查询和删除。
在Portainer的主界面中,选择“设置”,然后选择“用户管理”或“团队管理”,可以创建和管理用户和团队,并为他们分配不同的权限和角色,其中角色权限控制是属于企业版本才有的功能。
总的来说,Portainer是一个功能强大的容器管理平台,通过它可以轻松地管理和监控容器集群,特别是它的部署和管理比较简单,不像很多其他的平台,本身复杂,在解决问题的情况下又引入了新的问题。无论是个人用户还是企业用户,Portainer都是一个不错的选择,特别如果是docker swarm集群配合portainer,对于中小企业来说堪称利器。