云原生之容器管理工具Portainer

1. 简介

前面文章我们讲Docker、Docker Compose和Docker Swarm都是在Linux系统上手工命令行去操作,在第一次安装的时候可以命令行,以后运维和CICD流程操作中,如果还要命令行去各个节点操作,操作就麻烦了,工作效率就低了,我们需要有一个集中管理的系统,而且是web界面化的管理系统,而且是开源的,Portainer正是这样的系统。

Portainer是一款开源的容器管理工具系统,旨在简化Docker容器和Kubernetes集群的管理。通过提供一个直观的Web界面,Portainer可以帮助用户轻松地创建、管理和维护容器,而无需使用复杂的命令行工具。

Portainer系统开源代码托管在github上:https://github.com/portainer/portainer

Portainer提供两个版本:社区版和企业版。

Portainer Community Edition is a lightweight service delivery platform for containerized applications that can be used to manage Docker, Swarm, Kubernetes and ACI environments. It is designed to be as simple to deploy as it is to use. The application allows you to manage all your orchestrator resources (containers, images, volumes, networks and more) through a 'smart' GUI and/or an extensive API.

Portainer consists of a single container that can run on any cluster. It can be deployed as a Linux container or a Windows native container.

Portainer Business Edition builds on the open-source base and includes a range of advanced features and functions (like RBAC and Support) that are specific to the needs of business users.

2. 架构

Portainer由两个元素组成:Portainer服务器和Portainer代理。两者都作为轻量级容器在现有的容器化基础设施上运行,如Docker Swarm集群上运行。Portainer代理应该部署到集群中的每个节点,并配置为向Portainer Server容器报告。

单个Portainer服务器将接受来自任意数量Portainer代理的连接,从而能够从一个集中式接口管理多个集群。为此,PortainerServer容器需要数据持久性。Portainer代理是无状态的,数据被运回Portainer服务器容器。

3. 安装

这里单讲社区版的安装,Portainer社区版提供三种安装方式:Docker standalone、Docker Swarm、Kubernetes。官网文档:Install Portainer CE - Portainer Documentation

其实安装都及其简单,我的开发环境安装采用Docker Swarm方式,这里简述一下。我们采用docker-compose.yml来编排安装最方便了:

XML 复制代码
version: '3.2'

services:
  agent:
    image: portainer/agent:2.0.0
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /var/lib/docker/volumes:/var/lib/docker/volumes
    networks:
      - agent_network
    deploy:
      mode: global
      placement:
        constraints: [node.platform.os == linux]

  portainer:
    image: portainer/portainer-ce:2.0.0
    command: -H tcp://tasks.agent:9001 --tlsskipverify
    ports:
      - "9000:9000"
      - "8000:8000"
    volumes:
      - portainer_data:/data
    networks:
      - agent_network
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints: [node.role == manager]

networks:
  agent_network:
    driver: overlay
    attachable: true

volumes:
  portainer_data:

我的Docker版本是:

$ docker version

Client: Docker Engine - Community

Version: 20.10.16

API version: 1.41

Go version: go1.17.10

Server: Docker Engine - Community

Engine:

Version: 20.10.16

API version: 1.41 (minimum version 1.12)

Go version: go1.17.10

containerd:

Version: 1.6.4

安装执行一行命令即可:

docker stack deploy -c docker-compose.yml portainer

可以在docker swarm管理节点执行命令来查看,你将看到两个service:

docker service ls| grep portainer

4. Web管理

安装完毕之后,我们可以访问其Web管理系统地址,例如我的开发环境url地址是:http://192.168.1.10:9000/

从上图可以看到,Portainer可以对stack、service、container、image、volume、networks、config等进行界面化集中管理,这样大大简化了我们对Docker Swarm集群的运维工作。

5. 实用工具

虽然说运维管理要用Portainer Web管理系统来进行操作,但是CI/CD管道流水线的一切自动化操作,还是需要通过Linux命令行实用工具,可以编写Bash脚本或Python程序来自动化应用程序的安装部署。

也有好人做了一个开源portainer-stack-utils:GitHub - greenled/portainer-stack-utils: CLI client for Portainer,安装直接看官网文档,这里不累述了。最后的工具是psu:

$ psu -h

A CLI client for Portainer

Usage:

psu [command]

Available Commands:

completion Generate Bash completion scripts

config Manage configs

container Manage containers

endpoint Manage endpoints

help Help about any command

login Log in to a Portainer instance

network Manage networks

proxy Start an HTTP proxy to an endpoint's Docker API

secret Manage secrets

service Manage services

setting Manage settings

stack Manage stacks

status Check Portainer status

volume Manage volumes

Flags:

-A, --auth-token string Portainer auth token.

-h, --help help for psu

-i, --insecure Skip Portainer SSL certificate verification.

--log-format string Log format. One of text or json. (default "text")

-v, --log-level string Log level. One of trace, debug, info, warning, error, fatal or panic. (default "info")

-p, --password string Portainer password.

--settings-file string Settings file. (default "$HOME/.psu.yaml)"

-t, --timeout duration Waiting time before aborting (like 100ms, 30s, 1h20m).

-l, --url string Portainer url.

-u, --user string Portainer user.

--version version for psu

Use "psu [command] --help" for more information about a command.

我在GitLab CICD里使用,通过gitlab-runner来调用psu进行服务部署。

6. API接口

Portainer系统还提供了API接口,供我们进行二次开发管理,swagger地址:Build, Collaborate & Integrate APIs | SwaggerHub

7. 总结

Portainer是一款开源的容器管理工具系统,通过提供一个直观的Web界面,帮助我们轻松地创建、管理和维护容器,同时也提供实用工具供我们自动化操作使用,还提供API接口供我们进行二次开发管理。

相关推荐
qsqya3 小时前
ceph/daemon安装部署
ceph·云原生·eureka
m0_7415747512 小时前
k8s的service
云原生·容器·kubernetes
xiao-xiang16 小时前
k8s下的发布策略详解
云原生·容器·kubernetes·部署·cicd·发布
Lin_Aries_042116 小时前
容器使用卷
linux·运维·docker·云原生·容器·eureka
zhysunny19 小时前
51.不可变基础设施:云原生时代的「乐高城堡」建造法
java·云原生
程序消消乐1 天前
ZooKeeper Multi-op+乐观锁实战优化:提升分布式Worker节点状态一致性
分布式·zookeeper·云原生
@ chen1 天前
kubectl常用命令
云原生·kubernetes·k8s
NineData2 天前
NineData云原生智能数据管理平台新功能发布|2025年8月版
数据库·mongodb·云原生·数据库管理工具·ninedata·数据库迁移·数据复制
Serverless社区2 天前
函数计算进化之路:AI Sandbox 新基座
阿里云·云原生·serverless
喂完待续2 天前
【Big Data】Amazon S3 专为从任何位置检索任意数量的数据而构建的对象存储
大数据·云原生·架构·big data·对象存储·amazon s3·序列晋升