IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> docker系列--在一台服务器上搭建docker swarm测试集群 -> 正文阅读

[系统运维]docker系列--在一台服务器上搭建docker swarm测试集群

1. 宿主机环境

ubuntu 20.04
docker 20.10.8

重装集群时先删除以下服务

# 删除所有使用 dind:ssh 镜像启动的容器
sudo docker rm -f $(docker ps -f "ancestor=dind:ssh" -aq)
# 删除 dind:ssh 镜像
sudo bash docker rmi -f dind:ssh
# 删除 docker-swarm 网络
sudo docker network rm docker-swarm

2. 构建swarm环境

在宿主机创建 docker-swarm.sh 文件

#!/bin/bash
set -e # 程序出错在出错位置退出

mkdir -p /app/docker/dockerfile

# 创建一个带有ssh服务的docker in docker镜像
tee /app/docker/dockerfile/dind <<-'EOOF'
FROM docker:dind
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
        && apk update \
        && apk add --no-cache openssh tzdata \
        && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
        && sed -i "s/#PermitRootLogin.*/PermitRootLogin yes/g" /etc/ssh/sshd_config \
        && ssh-keygen -t dsa -P "" -f /etc/ssh/ssh_host_dsa_key \
        && ssh-keygen -t rsa -P "" -f /etc/ssh/ssh_host_rsa_key \
        && ssh-keygen -t ecdsa -P "" -f /etc/ssh/ssh_host_ecdsa_key \
        && ssh-keygen -t ed25519 -P "" -f /etc/ssh/ssh_host_ed25519_key \
        && echo "root:admin" | chpasswd
RUN sed -i '2 a /usr/sbin/sshd -D &' /usr/local/bin/dockerd-entrypoint.sh
RUN sed -i '3 a echo ***** sshd is run *****' /usr/local/bin/dockerd-entrypoint.sh
EOOF
# --rm 删除中间镜像
docker build -f /app/docker/dockerfile/dind --rm -t dind:ssh .

# 创建一个网络, 我们在此局域网段中搭建docker集群
ip12="192.179"
docker network create --driver=bridge --subnet=${ip12}.0.1/16 docker-swarm

# ip3, ip4 存储ip地址后两段的值
ip3=0
ip4=1
# 用于记录第一个创建的机器的ip
manager1ip=""
# 创建的机器编号, 计划用几台机器搭建集群 end 值设为几即可
start=1
end=4
for i in $(seq $start $end); do
  # ip地址后两端递增添加
  ((ip4++))
  if [ "$ip4" -ge 255 ]; then
    ((ip3++))
    ip4=1
  fi
  # 启动含有docker服务的容器, 并将容器22端口使用宿主机2000+端口暴漏出去
  # --network docker-swarm 使用我们自定义的网路
  # --ip 给容器分配固定ip, 减少我们搭建集群时查询ip的麻烦
  # -e 设置环境变量
  # -v 挂在卷, 将容器中部分文件挂载在宿主机上
  # -p 端口映射
  docker run --privileged --name dind-"${i}" -d \
    --network docker-swarm --ip ${ip12}."${ip3}".${ip4} \
    --restart=always \
    -e DOCKER_TLS_CERTDIR=/certs \
    -v some-docker-certs-ca:/certs/ca \
    -v some-docker-certs-client:/certs/client \
    -p $((2000+i)):22 \
    dind:ssh
  # 记录第一台机器的ip用于初始化swarm集群
  if [ "$i" == 1 ]; then
    manager1ip="${ip12}.${ip3}.${ip4}"
  fi
done

# 睡眠5s, 用以保证容器内服务全部已启动
# 不睡眠可能会导致容器里的docker服务不可正常运行
sleep 5
# 用以限制 manager 节点的数量, 一般不低于3
((max_manager=start+3))
for i in $(seq $start $end); do
  if [ "$i" == $start ]; then
    # 使用第一个容器进行swarm初始化
    docker exec dind-"${i}" docker swarm init --advertise-addr ${manager1ip}
  elif [ "$i" -lt "$max_manager" ]; then
    # 前几台机器作为manager节点
    token=$(docker exec -it dind-${start} docker swarm join-token -q manager)
    docker exec dind-"${i}" docker swarm join --token "${token:0:85}" ${manager1ip}:2377
  else
    # 剩余的机器作为worker节点
    token=$(docker exec dind-${start} docker swarm join-token -q worker)
    docker exec dind-"${i}" docker swarm join --token "${token:0:85}" ${manager1ip}:2377
  fi
done

在宿主机root账户下执行下述代码

chmod +x ./docker-swarm.sh
# -x 打印shell文件里每一行执行的代码, 可用于调试
bash -x ./docker-swarm.sh

3. 测试

使用ssh工具连上我们上述创建的容器

root@宿主机ip:2001~200x

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-08-28 09:45:32  更:2021-08-28 09:47:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 11:27:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码