Portainer学习笔记2

news/2025/3/26 7:19:43/文章来源:https://www.cnblogs.com/ggborn-001/p/18785082

使用portainer添加docker swarm集群,然后部署redis主从集群

docker swarm集群部署参考:https://blog.csdn.net/backtwo/article/details/143334089

需要提前在swarm 的manage节点上生成TLS证书,用来加密开启docker远程连接协议。

[root@park2-0006 uniapply]# mkdir /etc/docker/certs
[root@park2-0006 uniapply]# cd /etc/docker/certs
[root@park2-0006 certs]# vim gen-TLS.sh
[root@park2-0006 certs]# chmod +x gen-TLS.sh 
[root@park2-0006 certs]# ./gen-TLS.sh 
当前目录:/etc/docker/certs/ 证书文件将保存在此文件夹下
请输入证书使用的 IP 地址或者 HOST: 192.168.0.100
您输入的是:192.168.0.100 证书只能在这个 IP 或者 HOST 下使用,证书密码和输入的一致
Generating RSA private key, 4096 bit long modulus
...................................................................++
................++
e is 65537 (0x10001)
Generating RSA private key, 4096 bit long modulus
......................++
..................................++
e is 65537 (0x10001)
Signature ok
subject=/CN=10.9.102.61
Getting CA Private Key
Generating RSA private key, 4096 bit long modulus
.......................................................................................................................................++
.................................................................................++
e is 65537 (0x10001)
Signature ok
subject=/CN=client
Getting CA Private Key
证书生成完成
客户端使用文件:key.pem ca.pem cert.pem
Docker 端使用文件:ca.pem server-cert.pem server-key.pem
Docker 推荐配置内容:-H tcp://0.0.0.0:2375 --tlsverify --tlscacert=/etc/docker/certs/ca.pem --tlscert=/etc/docker/certs/server-cert.pem --tlskey=/etc/docker/certs/server-key.pem

脚本内容如下:

#!/bin/bash
#
# -------------------------------------------------------------
# 自动创建 Docker TLS 证书
# wget https://gitee.com/dromara/Jpom/raw/master/script/docker-tls.sh
# curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# systemctl daemon-reload && systemctl restart docker
# -------------------------------------------------------------
# 以下是配置信息
# --[BEGIN]------------------------------
NOW_PATH=$(cd "$(dirname "$0")" || exitpwd
)"/"
echo "当前目录:${NOW_PATH} 证书文件将保存在此文件夹下"
read -p "请输入证书使用的 IP 地址或者 HOST: " HOST
#
echo "您输入的是:${HOST} 证书只能在这个 IP 或者 HOST 下使用,证书密码和输入的一致"
# --[INIT PARAMETER]------------------------------
PASSWORD="$HOST"
COUNTRY="CN"
STATE="$HOST"
CITY="$HOST"
ORGANIZATION="$HOST"
ORGANIZATIONAL_UNIT="Dev"
COMMON_NAME="$HOST"
EMAIL="$HOST@docker-tls.com"
# --[END]--
# Generate CA key
openssl genrsa -aes256 -passout "pass:$PASSWORD" -out "ca-key.pem" 4096
# Generate CA
openssl req -new -x509 -days 365 -key "ca-key.pem" -sha256 -out "ca.pem" -passin "pass:$PASSWORD" -subj "/C=$COUNTRY/ST=$STATE/L=$CITY/O=$ORGANIZATION/OU=$ORGANIZATIONAL_UNIT/CN=$COMMON_NAME/emailAddress=$EMAIL"
# Generate Server key
openssl genrsa -out "server-key.pem" 4096
# Generate Server Certs.
openssl req -subj "/CN=$COMMON_NAME" -sha256 -new -key "server-key.pem" -out server.csr
rm -f extfile.cnf
echo "subjectAltName = DNS.1:$HOST,IP.1:127.0.0.1,IP.2:$HOST" >>extfile.cnf
echo "extendedKeyUsage = serverAuth" >>extfile.cnf
openssl x509 -req -days 365 -sha256 -in server.csr -passin "pass:$PASSWORD" -CA "ca.pem" -CAkey "ca-key.pem" -CAcreateserial -out "server-cert.pem" -extfile extfile.cnf
# Generate Client Certs.
rm -f extfile.cnf
openssl genrsa -out "key.pem" 4096
openssl req -subj '/CN=client' -new -key "key.pem" -out client.csr
echo "extendedKeyUsage = clientAuth" >>extfile.cnf
openssl x509 -req -days 365 -sha256 -in client.csr -passin "pass:$PASSWORD" -CA "ca.pem" -CAkey "ca-key.pem" -CAcreateserial -out "cert.pem" -extfile extfile.cnf
rm -f client.csr server.csr ca.srl extfile.cnf# check
if [ -f "${NOW_PATH}key.pem" -a -f "${NOW_PATH}ca.pem" -a -f "${NOW_PATH}ca-key.pem" -a -f "${NOW_PATH}server-cert.pem" -a -f "${NOW_PATH}server-key.pem" ]; thenecho "证书生成完成"echo "客户端使用文件:key.pem ca.pem cert.pem"echo "Docker 端使用文件:ca.pem server-cert.pem server-key.pem"echo "Docker 推荐配置内容:-H tcp://0.0.0.0:2375 --tlsverify --tlscacert=${NOW_PATH}ca.pem --tlscert=${NOW_PATH}server-cert.pem --tlskey=${NOW_PATH}server-key.pem"
elseecho "证书生成不完成,请检查配置和根据错误日志排查"
fi

执行此脚本会提升让输入IP,此IP为你开启远程docker权限的IP,被管理的远程docker的IP

脚本执行结果如下

修改swarm manage节点的docker daemon配置,重启开启远程服务

# vim /usr/lib/systemd/system/docker.service
...
[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 fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375 --tlsverify --tlscacert=/etc/docker/certs/ca.pem --tlscert=/etc/docker/certs/server-cert.pem --tlskey=/etc/docker/certs/server-key.pem
...# 推出保存,重启dokcer
systemctl daemon-reload
systemctl restart docker 

 回到Portainer页面添加环境

 选择API的方式,输入swarm manage节点的ip和证书信息

 添加完成之后如下所示

 选择Stacks,Web Editer方式输入docker-compose内容

version: '3'
services:# Redis 主节点redis-master:image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/redis:5.0.14ports:- "6379:6379"command: redis-server --requirepass aTPTF6An*jX5volumes:- redis-master-data:/datadeploy:replicas: 1placement:constraints:- node.hostname == park2-0007.novalocalrestart_policy:condition: on-failurenetworks:- swarm-overlay# Redis 从节点 1redis-slave:image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/redis:5.0.14ports:- "6380:6379"  # 修改为不同的宿主机端口command: redis-server --slaveof redis-master 6379 --requirepass aTPTF6An*jX5 --masterauth aTPTF6An*jX5volumes:- redis-slave-data:/datadeploy:replicas: 1placement:constraints:- node.hostname == park2-0008.novalocalrestart_policy:condition: on-failurenetworks:- swarm-overlayvolumes:redis-master-data:driver: localredis-slave-data:driver: localnetworks:swarm-overlay:driver: overlay    

部署验证

# 连接到主节点
redis-cli -h <主节点 IP> -p 6379 -a aTPTF6An*jX5# 设置键值对
set mykey "Hello, Redis!"# 连接到从节点
redis-cli -h <从节点 IP> -p 6380 -a aTPTF6An*jX5# 获取键值对
get mykey

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/902450.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPF 和 Avalonia 开发者的 html css 前端指南 StackPanel 篇

本文主要是向大家列出 WPF 和 Avalonia 的 StackPanel 在 html 和 css 的实现方法。WPF 和 Avalonia 开发者的 html css 前端指南 StackPanel 篇笔者前端框架使用的是 Vue3 + Deno。 笔者主要会以 Avalonia 作为 C# 技术部分的示例。 本文主要是向大家列出 WPF 和 Avalonia 的 …

维修松下机器人G3示教器通电不显示的问题

示教器作为一种先进的工具,被广泛应用于机器人的控制编程中,它不仅能够定义机器人的具体行为和任务,还能实时地监测到机器人的多种状态信息,诸如位置、速度以及负载等关键数据。一旦遇到紧急情况,示教器能够迅速执行急停操作,从而确保整个系统的安全无虞。当面对松下焊接…

第一组可行性分析

第1章 系统分析 1.1 可行性分析 本项目“电磨房——智能家居配置系统”是一款基于微信小程序的家庭用电管理工具,旨在通过智能化手段帮助用户优化用电策略、降低电费支出。以下从技术、经济、社会和法律四个维度分析其可行性。 1.1.1 技术可行性分析 团队具备全栈开发能力:前…

1.A+B问题

用Scanner容器来接受键盘录入数字的情况 因为这题不止一次录入 用while循环 不用for循环 因为只要键盘录入就一直循环 不知道循环多少次 while(scan.hasNextInt)用来判断键盘是否有下一个数字录入 总后sout输出就好了

CH182F7与LAN8720A对比

1、CH182简介 CH182是一款支持Auto-MDIX的工业级10/100M以太网PHY收发器。CH182内部包括物理编码子层(PCS)、物理介质接入层(PMA)、双绞线物理介质相关子层(TP-PMD)、10BASE-TX编码器/解码器、双绞线介质连接单元(TPMAU)、MII和RMII接口等以太网Transceiver功能所需的模…

一键将文件转成网页

1、使用工具trae,需要魔法。 提示词(来自于向阳乔木,微微改动):你是一名专业的网页设计师和前端开发专家,对现代 Web 设计趋势和最佳实践有深入理解,尤其擅长创造具有极高审美价值的用户界面。你的设计作品不仅功能完备,而且在视觉上令人惊叹,能够给用户带来强烈的&qu…

『Plotly实战指南』--柱状图绘制基础篇

柱状图作为最基础的数据可视化形式之一,能直观展示不同类别数据的对比关系,适用于一下的场景:比较不同类别之间的数据大小,如不同产品的销售额对比。 展示数据的分布情况,如各年龄段的人口数量分布。 分析时间序列数据的变化趋势,如某公司近几年的利润变化。今天,我们就…

【作业3】

黄鹏翔 3123004229 黄皓维 3123004228仓库地址 地址这个作业的要求 结对项目这个作业的目标 了解双人合作项目的方法,并完成此次项目PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)Planning 计划 30 35Estimate 这个任务需要的时间 25 30Develop…

ASE11N45-ASEMI智能家居专用ASE11N45

ASE11N45-ASEMI智能家居专用ASE11N45编辑:ll ASE11N45-ASEMI智能家居专用ASE11N45 型号:ASE11N45 品牌:ASEMI 封装:TO-252 批号:最新 最大漏源电流:11A 漏源击穿电压:450V RDS(ON)Max:0.39Ω 引脚数量:3 沟道类型:N沟道MOS管、中低压MOS管 漏电流:ua 特性:N沟道M…

sql 保留两位小数并强制向前进位的方法

使用CEILING函数 CEILING函数会返回大于或等于指定数值的最小整数值 例如,保留两位小数:select CEILING(0.0132*100)/100输出结果 这里,我们将数字乘以100(因为我们想保留两位小数),使用CEILING函数确保向上进位,然后再除以100以恢复原来的数值范围。

可行性分析[3]

第1章 系统分析 1.1 可行性分析 1.1.1 技术可行性分析 1.1.2 经济可行性分析 1.1.3 社会可行性分析 1.1.4 法律可行性分析 1.2 系统流程分析 1.2.1 系统开发总流程 1.2.2 登录流程 1.2.3 系统操作流程 1.2.4 系统性能分析 第1章 可行性分析 1.1可行性分析 随着生活水平的提高,…

PLM项目管理软件的未来:自动化与智能化的发展方向

PLM(产品生命周期管理)项目管理软件在现代企业的产品研发、生产与运营过程中扮演着至关重要的角色。它整合了从产品概念设计到退役处理的全流程信息,助力企业提升效率、降低成本并提高产品质量。随着科技的飞速发展,自动化与智能化成为 PLM 项目管理软件未来的核心发展方向…