云原生之容器管理工具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接口供我们进行二次开发管理。

相关推荐
华为云开源4 小时前
openGemini 社区人才培养计划:助力成长,培养新一代云原生数据库人才
数据库·云原生·开源
ZHOU西口14 小时前
微服务实战系列之玩转Docker(十五)
nginx·docker·微服务·云原生·swarm·docker swarm·dockerui
无名之逆21 小时前
云原生(Cloud Native)
开发语言·c++·算法·云原生·面试·职场和发展·大学期末
Richardlygo1 天前
(k8s)Kubernetes部署Promehteus
云原生·容器·kubernetes
Lill_bin1 天前
JVM内部结构解析
jvm·后端·spring cloud·微服务·云原生·ribbon
二进制杯莫停1 天前
初识zookeeper
分布式·zookeeper·云原生
StevenZeng学堂1 天前
【Kubernetes笔记】为什么DNS解析会超时?
网络协议·docker·云原生·kubernetes
爱吃龙利鱼2 天前
nginx实现https安全访问的详细配置过程
运维·nginx·安全·云原生·https
大白菜和MySQL2 天前
rockylinux9.4单master节点k8s1.28集群部署
云原生·容器·kubernetes
七夜zippoe2 天前
nacos和eureka的区别详解
云原生·eureka