微服务实战之春云与刀客(四)—— docker swarm 集群实战

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
简介: 概述 docker swarm 是一个非常简单的docker 原生集群部署环境。在docker swarm 出来之前,要搭建一个docker 集群需要复杂的网络运维和配置能力,而docker swarm 把这一切都解放了。

概述

docker swarm 是一个非常简单的docker 原生集群部署环境。在docker swarm 出来之前,要搭建一个docker 集群需要复杂的网络运维和配置能力,而docker swarm 把这一切都解放了。
简单来说呢,docker swarm把多个docker节点连接成一个集群,可以认为是一个可以互通的独立局域网,通过服务的方式管理应用的生命周期。例如有一个MyService的微服务,在单机的模式需要你分别在两个节点上启动相应的docker 容器,而docker swarm直接就有“服务”的概念,只要在某一管理节点上执行创建服务命令,同时指定节点数为2,则集群自动找两个节点分别运行你的MyService微服务。当两个节点扛不住的时候,你要增加到4个节点,则只需要执行一个扩展命令就行。

docker 安装

本文基于centos 版本7.2搭建的docker 集群,用的是17.09版本的docker。

节点有192.168.0.37和192.168.0.38 两个节点,分别为管理节点和工作节点。工作节点可以运行服务,管理节点也可以运行服务,但比工作节点多了“管理控制”的功能,即可以创建服务。为了避免脑裂现象,管理节点数量为1,3,5奇数。
分别在0.37和0.38上安装docker。

介质下载

https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-17.09.0.ce-1.el7.centos.x86_64.rpm

安装

yum install docker-ce-17.09.0.ce-1.el7.centos.x86_64.rpm

启动

systemctl start docker

开机启动

systemctl enable docker
或者
chkconfig docker on

hostname

vi /etc/hosts 把两个节点的host和ip加上。

搭建和使用 docker hub私有仓库

搭建docker hub私有仓库(0.37)

仓库是用来存放docker镜像的,在创建和启动服务的时候,多个节点需要从仓库中拉取镜像。

sudo docker run -d -p 5000:5000 -v /root/hub:/var/lib/registry --restart=always --name registry2 registry:2

默认情况下,会将仓库存放于容器内的/var/lib/registry目录下,这样如果容器被删除,则存放于容器中的镜像也会丢失,所以我们一般情况下会指定本地一个目录挂载。

https://github.com/docker/docker.github.io/blob/master/registry/index.md

配置拉取镜像认证(0.37/0.38)

客户端访问docker hub拉取镜像,缺省走https的,会报https://192.168.0.37:5000镜像没找到或不存在(No such image: 192.168.0.37:5000/cehome/operation-service:),解决方式一种是通过nginx 添加https代理,我们采用是另一种是非安全方式:

  • 打开
  1. /usr/lib/systemd/system/docker.service
  • 添加(ExecStart=/usr/bin/dockerd 可能已经有,只需要添加insecure参数)
    ExecStart=/usr/bin/dockerd --insecure-registry 192.168.0.37:5000
  • 重载
    systemctl daemon-reload
  • 重启
    service docker restart

集群环境搭建

参考:
https://docs.docker.com/engine/swarm/swarm-mode/
https://docs.docker.com/engine/reference/commandline/service/

https://docs.docker.com/engine/swarm/how-swarm-mode-works/nodes/
https://docs.docker.com/engine/swarm/how-swarm-mode-works/services/#replicated-and-global-services

关闭防火墙(0.37/0.38)

需要互相访问2377等端口(为方便,直接关闭防火墙,否则可能会有不可意料的事情)

  • 查看

systemctl is-enabled firewalld

  • 关闭

systemctl stop firewalld.service

  • 禁用服务

systemctl disable firewalld

初始化管理节点(0.37)

docker swarm init --advertise-addr 192.168.0.37

( 多ip的情况:docker swarm init --advertise-addr ,一般要加上,否则会有网络问题)

添加其它节点前查看token(0.37)

添加其它节点到集群,必须先在管理节点执行如下命令,它会打印出在其它节点将要执行的包含token的完整脚本。

1)查看如何添加work节点
docker swarm join-token worker
2)查看如何添加manager节点
docker swarm join-token manager

添加work节点(0.38)

通过上面的命令可以查出执行的脚本,然后拷贝到0.38并执行(即来源于0.37上面执行docker swarm join-token worker的打印结果),执行后0.38就加入了集群。
docker swarm join\
--token SWMTKN-1-3jcd5cjgwy8ct1gfyqqy8oqnokz4jjaul7el97h77qii4e6zw3-1vrjlin1bl5k9whzc4fulqfh2 192.168.0.37:2377

查看节点(0.37)

必须在管理节点才能执行:
docker node ls

创建overlay网络

为什么需要overlay 网络?保证多台机器不同容器之间通信!

docker network create --attachable --driver overlay tiejia
--attachable 参数为了兼容单机的容器可以加入此网络。
tiejia是网络名称。

管理节点信息的备份与恢复

由于目前是单管理节点,最好是备份信息,主要步骤是停止docker,备份目录/var/lib/docker/swarm/
参考:https://docs.docker.com/engine/swarm/admin_guide/#back-up-the-swarm

移除节点的命令(这里只是介绍,不要执行)

当你节点不需要的时候可以从集群剥离,
docker swarm leave -f

例子:部署一个nginx 服务

在manager节点0.37上部署nginx服务,服务数量为3个,公开指定端口是8080映射容器80,使用nginx镜像。这里直接会从官网下载nginx镜像,上面部署的私有仓库还用不上。

docker service create --replicas 3 --name nginx --publish 8080:80  nginx

通过 docker service ps nginx 命令查看服务分布情况。

目录
相关文章
|
24天前
|
存储 关系型数据库 数据安全/隐私保护
【Docker实战项目】使用Docker部署Plik 临时文件上传系统
【7月更文挑战第23天】使用Docker部署Plik 临时文件上传系统
26 1
【Docker实战项目】使用Docker部署Plik 临时文件上传系统
|
10天前
|
canal Kubernetes Docker
基于Kubernetes v1.25.0和Docker部署高可用集群(03部分)
基于Kubernetes v1.25.0和Docker部署高可用集群(03部分)
|
11天前
|
Kubernetes Ubuntu Linux
基于Kubernetes v1.25.0和Docker部署高可用集群(02部分)
基于Kubernetes v1.25.0和Docker部署高可用集群(02部分)
|
14天前
|
Shell 云计算 Docker
零基础到容器技术大神,一键解锁Docker实战秘籍!从零搭建,见证你的技术飞跃,让代码在云端翩翩起舞!
【8月更文挑战第5天】在云计算与微服务当道的今天,容器技术如汹涌浪潮般席卷IT领域。对新手而言,它或许充满神秘,但无须担忧,让我们一同揭开它的面纱。容器是一种轻量级软件打包技术,允许应用及其依赖被打包,在独立的虚拟环境中运行。Docker作为容器界的明星,简化了容器的创建与管理。从安装Docker开始,运行首个容器,深入容器内部执行命令,直至构建自定义镜像,我们将逐步掌握这项关键技术。这不仅是一场技术之旅,更是思维方式的革新,让我们携手探索未来。
56 6
|
13天前
|
存储 Kubernetes Java
基于Kubernetes v1.25.0和Docker部署高可用集群(说明篇)
docker与kubernetes的区别是:docker是管理当前主机上的容器,k8s是管理多台主机、跨平台的分布式管理系统。Kubernetes的设计初衷是支持可插拔架构,从而利于扩展kubernetes的功能
|
20天前
|
关系型数据库 分布式数据库 PolarDB
PolarDB产品使用问题之原PolarDB-X集群无法连接且Docker容器已经被删除,如何恢复数据
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
4天前
|
Kubernetes Nacos 微服务
【技术难题破解】Nacos v2.2.3 + K8s 微服务注册:强制删除 Pod 却不消失?!7步排查法+实战代码,手把手教你解决Nacos Pod僵死问题,让服务瞬间满血复活!
【8月更文挑战第15天】Nacos作为微服务注册与配置中心受到欢迎,但有时会遇到“v2.2.3 k8s 微服务注册nacos强制删除 pod不消失”的问题。本文介绍此现象及其解决方法,帮助开发者确保服务稳定运行。首先需检查Pod状态与事件、配置文件及Nacos配置,确认无误后可调整Pod生命周期管理,并检查Kubernetes版本兼容性。若问题持续,考虑使用Finalizers、审查Nacos日志或借助Kubernetes诊断工具。必要时,可尝试手动强制删除Pod。通过系统排查,通常能有效解决此问题。
|
1月前
|
监控 Java 微服务
Spring Boot微服务部署与监控的实战指南
【7月更文挑战第19天】Spring Boot微服务的部署与监控是保障应用稳定运行和高效维护的重要环节。通过容器化部署和云平台支持,可以实现微服务的快速部署和弹性伸缩。而利用Actuator、Prometheus、Grafana等监控工具,可以实时获取应用的运行状态和性能指标,及时发现并解决问题。在实际操作中,还需根据应用的具体需求和场景,选择合适的部署和监控方案,以达到最佳效果。
|
12天前
|
NoSQL Linux Redis
使用docker-compose搭建redis-cluster集群
使用docker-compose搭建redis-cluster集群
|
12天前
|
Kubernetes Linux 网络安全
基于Kubernetes v1.25.0和Docker部署高可用集群(01部分)
基于Kubernetes v1.25.0和Docker部署高可用集群(01部分)