极简入门Docker-Swarm集群管理

简介: 极简入门Docker-Swarm集群管理

在这里插入图片描述

👨🏻‍🎓博主介绍:大家好,我是芝士味的椒盐,一名在校大学生,热爱分享知识,很高兴在这里认识大家🌟
🌈擅长领域:Java、大数据、运维、电子
🙏🏻如果本文章各位小伙伴们有帮助的话,🍭关注+👍🏻点赞+🗣评论+📦收藏,相应的有空了我也会回访,互助!!!
🤝另本人水平有限,旨在创作简单易懂的文章,在文章描述时如有错,恳请各位大佬指正,在此感谢!!!

@[TOC]

什么是Swarm

  • Swarm是Docker公司推出的用来管理docker集群的平台.
  • Swarm集成在Docker中无需安装
  • 工作原理
    在这里插入图片描述

Swarm常用命令

  • 常用命令

    • 作为集群的管理docker swarm

      • 初始化一个

        swarmdocker swarm init

      • 指定初始化ip地址节点

        docker swarm init --advertise-addr 管理端IP地址

      • 去除本地之外的所有管理器身份

        docker swarm init --force-new-cluster

      • 将节点加入swarm集群,两种加入模式manager与worker

        docker swarm join

      • 工作节点加入管理节点需要通过join-token认证

        docker swarm join-token

      • 重新获取docker获取初始化命令

        docker swarm join-token worker

      • 离开swarm

        docker swarm leave

      • 对swarm集群更新配置

        docker swarm update

    • 管理swarm节点docker node

      • 查看集群中的节点

        docker node ls

      • 将manager角色降级为worker

        docker node demote 主机名

      • 将worker角色升级为manager

        docker node promote 主机名

      • 查看节点的详细信息,默认json格式

        docker node inspect 主机名

      • 查看节点信息平铺格式

        docker node inspect --pretty 主机名

      • 查看运行的一个或多个及节点任务数,默认当前节点

        docker node ps

      • 从swarm中删除一个节点

        docker node rm 主机名

      • 更新一个节点

        docker node update

      • 对节点设置状态(“active”正常|“pause”暂停|“drain”排除自身work任务)

        docker node update --availability

    • 服务管理docker service

      • 创建一个服务

        docker service create

      • 创建的副本数

        docker service create --replicas 副本数

      • 指定容器名称

        docker service create --name 名字

      • 每次容器与容器之间的更新时间间隔。

        docker service create --update-delay s秒

      • 更新时同时并行更新数量,默认1

        docker service create --update-parallelism 个数

      • 任务容器更新失败时的模式,(“pause”停止|”continue“继续),默认pause。

        docker service create --update-failure-action 类型

      • 每次容器与容器之间的回滚时间间隔。

        docker service create --rollback-monitor 20s

      • 回滚故障率如果小于百分比允许运行

        docker service create --rollback-max-failure-ratio .数值(列“.2”为%20)

      • 添加网络

        docker service create --network 网络名

      • 创建volume类型数据卷

        docker service create --mount type=volume,src=volume名称,dst=容器目录

      • 创建bind读写目录挂载

        docker service create --mount type=bind,src=宿主目录,dst=容器目录

      • 创建bind只读目录挂载

        docker service create --mount type=bind,src=宿主目录,dst=容器目录,readonly

      • 创建dnsrr负载均衡模式

        docker service create --endpoint-mode dnsrr 服务名

      • 创建docker配置文件到容器本地目录

        docker service create --config source=docker配置文件,target=配置文件路径

      • 创建添加端口

        docker service create --publish 暴露端口:容器端口 服务名

搭建Docker集群(双主双从)

  • 搭建Docker集群[双主双从]

    • manager节点和Leader节点是可以触达的
    • docker swarm init -advertise-addr [初始化集群,节点为主节点发起集群,公网/内网ip]
    • docker swarm join-token worker/manager 获取令牌,该令牌将未加入集群的节点变成w/m
    • docker node ls 查看加入集群的节点
  • Raft协议

    • 双主双从:假设一个节点挂了!其他节点是否可用
    • Raft协议:保证大多数节点存活才能用!主节点至少要>3台!
    • 实验:

      • 原本的双主双从配置如下分布
        在这里插入图片描述
      • 将swarm1停掉,在swarm4为上使用docker node ls查看集群状态,会发现卡住[验证双主双从的缺点]
      • 启动swarm1会发现原本为管理节点的swarm4变成主节点leader,现在启动的swarm1变成管理节点Reachable

        在这里插入图片描述 - 让swarm3 leave集群,节点列表不会删除会显示STATUS=Down

在这里插入图片描述

        
    - 当swarm3重新加入集群之后,原本的那条STATUS还是会存在,只不过会有一个新的集群id,可以用docker node rm id将其记录删除
        
        ![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/9f0cde42f9a24a6e996813308beb2f38.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6Iqd5aOr5ZGz55qE5qSS55uQ,size_20,color_FFFFFF,t_70,g_se,x_16)
        
        - Tips ⚠️ :如果是某一个节点短暂的时间因为故障停掉了,然后又回来了,那么原本Down的那条记录就会变回Ready,效果不是和leave一样!切记!
    
    ---
    
    - 将双主双从转变成准守Raft协议,实验如下:
        - 在swarm2上使用docker swarm leave先让其离开集群
        - 在有权限的manager或者leader上获得manager的令牌docker swarm join-token manager
        - 将令牌给swarm2,则swarm2变成Reachable节点

在这里插入图片描述

            
        - 停掉swarm2,不会让集群停止,会显示不可达。这就是保证高可用。遵守Raft协议
            
             ![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/5e8422273b3249478fceb481441ae508.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6Iqd5aOr5ZGz55qE5qSS55uQ,size_20,color_FFFFFF,t_70,g_se,x_16)

Swarm弹性服务

  • Swarm创建弹性服务

    • 弹性!扩缩容!集群!
    • 容器、副本、服务。
    • docker-compose up !启动单个项目,单机。
    • 集群swarm:docker service...
    • 灰度发布/金丝雀发布

      灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式。AB test就是一种灰度发布方式,让一部分用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度,而我们平常所说的金丝雀部署也就是灰度发布的一种方式

    Tips ⚠️ :

    docker run 启动容器,不具备扩缩容的功能!

    docker service 服务启动,具有扩缩容的功能,滚动更新!

    • 实例操作:

      • 在基于Raft协议的基础上操作。
      • docker service create -p 5000:80 —name=menginx nginx 创建nginx服务
      • docker service inspect menginx 查看menginx服务的元数据
      • docker service update —replicas 3 menginx 扩展多个副本数量,也就是启动多个nginx服务

    Tips ⚠️ :访问的时候地址是init初始化docker集群时的地址,不管这台主机是否正常只要有两台台以上的MR存活,集群就会向外提供服务。docker node ls查看到某个ID后面有星号说明当前正处于该服务器下。

    • docker service scale menginx=5 scale的作用和update效果一样的扩缩容
    • 概念总结

      • Swarm:集群的管理和编号
      • Node:就是一个docker节点
      • Service:任务,可以管理节点或者工作节点来运行
      • Task:容器内的命令

在这里插入图片描述

    - 不变逻辑
        
        命令→ 管理→api →调度→工作节点(创建Task容器维护创建)
        
    - 调整service以什么方式运行
        
        ```docker
        #每个工作节点上运行一个任务
        docker service --mode global
        #按照一定规则在各个工作节点上运行指定个数的任务。
        docker service --mode replicated
        ```
        
- 拓展:网络模式 "PublishMode": "ingress"
    - Swarm:
        - Overlay:将几台不同的服务器上的,ip是不同的,使用Overlay将集群变成一个整体,加入一个共同的网络。
        - "ingress":特殊的Overlay网络!负载均衡!IPVS VIP
相关文章
|
2月前
|
NoSQL 关系型数据库 MySQL
docker部署jumpserver及入门
docker部署jumpserver及入门
|
2月前
|
应用服务中间件 nginx Docker
【与时俱进】网络工程师必备技能:Docker基础入门指南,助你轻松应对新时代挑战!
【8月更文挑战第22天】随着容器技术的发展,Docker已成为开发与运维的关键工具。本文简要介绍Docker——一种开源容器化平台,能让应用程序及依赖项被打包成轻量级容器,在任何Linux或Windows机器上运行。文中涵盖Docker的安装步骤、基础命令操作如启动服务、查看版本、拉取与运行容器等。并通过实例演示了如何运行Nginx服务器和基于Dockerfile构建Python Flask应用镜像的过程。这些基础知识将助力网络工程师理解Docker的核心功能,并为实际应用提供指导。
56 2
|
2天前
|
Linux 持续交付 Docker
掌握Docker:从入门到实践
Docker 是一个开源容器引擎,允许开发者将应用及其依赖打包成可移植的容器,在任意 Linux 机器上运行。本文从基本概念入手,详细介绍 Docker 的安装、基本操作、镜像构建及 Docker Compose 的使用,并通过实战案例展示如何部署 Web 应用、构建微服务架构及实现 CI/CD。通过学习,你将掌握 Docker 的核心功能,提升应用开发和部署效率。
|
2天前
|
Kubernetes Cloud Native 持续交付
云原生之旅:Docker容器化与Kubernetes集群管理
【9月更文挑战第33天】在数字化转型的浪潮中,云原生技术如同一艘航船,带领企业乘风破浪。本篇文章将作为你的航海指南,从Docker容器化的基础讲起,直至Kubernetes集群的高级管理,我们将一起探索云原生的奥秘。你将学习到如何封装应用、实现环境隔离,以及如何在Kubernetes集群中部署、监控和扩展你的服务。让我们启航,驶向灵活、可伸缩的云原生未来。
|
5天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker与Kubernetes入门
【9月更文挑战第30天】在云计算的浪潮中,云原生技术正以前所未有的速度重塑着软件开发和运维领域。本文将通过深入浅出的方式,带你了解云原生的核心组件——Docker容器和Kubernetes集群,并探索它们如何助力现代应用的构建、部署和管理。从Docker的基本命令到Kubernetes的资源调度,我们将一起开启云原生技术的奇妙之旅。
|
15天前
|
运维 Cloud Native Docker
云原生技术入门:Docker容器化实战
【9月更文挑战第20天】本文将引导你走进云原生技术的世界,通过Docker容器化技术的实战演练,深入理解其背后的原理和应用。我们将一起探索如何在云平台上利用Docker简化部署、扩展和管理应用程序的过程,并揭示这一技术如何改变现代软件的开发和运维模式。
|
10天前
|
Cloud Native 持续交付 Docker
云原生技术入门与实践:Docker容器化部署示例
【9月更文挑战第25天】在数字化转型的浪潮下,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,为初学者揭示云原生技术的核心概念及其应用价值。我们将以Docker容器为例,逐步引导读者了解如何将应用程序容器化,并在云端高效运行。这不仅是对技术趋势的跟随,更是对资源利用和开发效率提升的探索。
29 4
|
11天前
|
关系型数据库 Linux 虚拟化
Docker入门基础实战
Docker入门基础实战
|
19天前
|
Kubernetes Cloud Native 开发者
云原生入门:从Docker到Kubernetes的旅程
【9月更文挑战第16天】 本文将带你进入云原生的世界,从理解Docker容器的基础开始,逐步深入到Kubernetes集群管理。我们将通过简单的代码示例和实际操作,探索这两个关键技术如何协同工作,以实现更高效、灵活的应用程序部署和管理。无论你是云原生新手还是希望深化理解,这篇文章都将为你提供清晰的指导和实用的知识。
51 11
|
2月前
|
图形学 C#
超实用!深度解析Unity引擎,手把手教你从零开始构建精美的2D平面冒险游戏,涵盖资源导入、角色控制与动画、碰撞检测等核心技巧,打造沉浸式游戏体验完全指南
【8月更文挑战第31天】本文是 Unity 2D 游戏开发的全面指南,手把手教你从零开始构建精美的平面冒险游戏。首先,通过 Unity Hub 创建 2D 项目并导入游戏资源。接着,编写 `PlayerController` 脚本来实现角色移动,并添加动画以增强视觉效果。最后,通过 Collider 2D 组件实现碰撞检测等游戏机制。每一步均展示 Unity 在 2D 游戏开发中的强大功能。
84 6
下一篇
无影云桌面