zoukankan      html  css  js  c++  java
  • swarm 学习笔记

    《官方文档:https://docs.docker.com/engine/swarm/swarm-tutorial/#open-protocols-and-ports-between-the-hosts》

    hostnamectl set-hostname manager

    hostnamectl set-hostname worker1

    hostnamectl set-hostname worker2
    =============

    创建集群:docker swarm init --advertise-addr 10.0.2.15
    其中 10.0.2.15 是manager节点的ip

    返回值告诉我们如何添加work 节点,如果忘记了添加work节点的命令,可以通过 docker swarm join-token worker 查看。
    查看添加manager节点的命令:docker swarm join-token manager

    查看当前swarm集群中的节点状态:docker node ls

    默认配置下 manager node 也是 worker node,所以 swarm-manager 上也运行了副本。如果不希望在 manager 上运行 service,可以执行如下命令:
    docker node update --availability drain swarm-manager

    ===============
    检查防火墙状态:systemctl status firewalld.service 或 firewall-cmd --state
    查看防火墙:firewall-cmd --list-all
    更新防火墙规则:firewall-cmd --reload
    启停防火墙:systemctl start firewalld.service
    systemctl stop firewalld.service


    临时增加:firewall-cmd --add-port=999/tcp
    永久增加:firewall-cmd --permanent --add-port=999/tcp
    firewall-cmd --reload

    删除端口:firewall-cmd --remove-port=999/tcp
    ----
    firewall-cmd --permanent --remove-port=999/tcp
    firewall-cmd --reload


    查询端口firewall-cmd --query-port=999/tcp
    查看所有放行的端口:firewall-cmd --list-ports


    添加端口:


    firewall-cmd --permanent --add-port=2377/tcp

    firewall-cmd --permanent --add-port=7946/tcp
    firewall-cmd --permanent --add-port=7946/udp
    firewall-cmd --permanent --add-port=4789/udp
    firewall-cmd --reload
    firewall-cmd --list-ports
    ============
    如果开启防火墙,则需要在所有节点的防火墙上依次放行2377/tcp(管理端口)、7946/udp(节点间通信端口)、4789/udp(overlay 网络端口)端口。

    查看部署的服务:docker service ls
    查看服务每个副本的状态:docker service ps <service name>
    查看 service 的当前配置:docker service inspect
    删除服务:docker service rm <servicee name>

    为了外部网络可以访问服务,需要使用--publish-add, 将容器的端口映射到主机的端口,这样外部网络就能访问到 service 了,这样访问任何一个节点的ip都能访问到服务

    查看宿主机上的容器网络:docker network ls
    通过服务发现,service 的使用者不需要知道 service 运行在哪里,IP 是多少,有多少个副本,就能与 service 通信。
    要使用服务发现,需要相互通信的 service 必须属于同一个 overlay 网络,所以我们先得创建一个新的 overlay 网络
    虽然ingress也是overlay 网络,但ingress 没有提供服务发现,必须创建自己的 overlay 网络


    可以通过 --rollback 快速恢复到更新之前的状态,--rollback 只能回滚到上一次执行 docker service update 之前的状态,并不能无限制地回滚
    docker service update --rollback <service name>

    service提供了一个 global mode,其作用是强制在每个 node 上都运行一个且最多一个副本。即使之后有新的 node 加入,swarm 也会自动在新 node 上启动容器
    docker service create
    --mode global
    --name logspout
    --mount type=bind,source=/var/run/docker.sock,destination=/var/run/docker.sock
    gliderlabs/logspout


    可以通过给节点打标签和设置容器的constraint来控制容器运行在哪个节点上
    docker node update --label-add env=test swarm-worker1
    docker service create
    --constraint node.labels.env==test
    --replicas 3
    --name my_web
    --publish 8080:80
    httpd


    通过--health-cmd 进行健康检查:
    docker service create --name my_db
    --health-cmd "curl --fail http://localhost:8091/pools || exit 1"
    couchbase

    --health-cmd Health Check 的命令,还有几个相关的参数:
    --timeout 命令超时的时间,默认 30s。
    --interval 命令执行的间隔时间,默认 30s。
    --retries 命令失败重试的次数,默认为 3,如果 3 次都失败了则会将容器标记为 unhealthy。swarm 会销毁并重建 unhealthy 的副本

    ========
    yaml官方文档:https://docs.docker.com/compose/compose-file/
    创建应用:docker stack deploy ocr-system -c /export/system-install-offline/docker-compose.yaml
    yaml修改后,也是通过docker stack deploy 命令来生效修改

    为了不重名,所有资源都会加上 stack 名称作为前缀

    查看应用列表:docker stack ls

    查看所有的服务:docker service ls
    删除应用
    docker stack rm ocr-system
    列出某个应用下面的服务
    docker stack ps ocr-system
    查看应用下的服务
    docker stack services ocr-system
    查看应用下的详细信息
    docker stack ps ocr-system

    docker service inspect tst2_flask-svc

    docker service logs tst2_flask-svc

    docker service ps tst2_flask-svc

    如果需要从镜像仓库拉镜像,首先要在执行deploy的节点上docker login镜像仓库(其他节点不用login),然后在deploy时需要加上 --with-registry-auth

    docker stack deploy -c tst.yaml tst --with-registry-auth 

    docker stack deploy -c tst.yaml tst --with-registry-auth 

    虽然manager节点上可以运行容器,但强烈不建议,因为若manager节点挂了,上面的服务也就挂了。如果服务是运行在worker节点,若worker节点挂了,服务可以迁移到其他节点

  • 相关阅读:
    关于DataGridView的数据源绑定字符串两个值得注意的问题
    .Net 第三方控件(转)
    sql语句linq语言lambda表达式对照
    InvokeRequired 属性 与Invoke方法
    .net垃圾回收机制
    const与readonly的区别
    Developer Express控件组合中的GridControl控件,如何自动显示每一行的序号
    XtraGrid控件6——2种GridColumn的属性
    如何让应用程序仅运行一个实例(c#)
    DevExpress控件之GridControl控件
  • 原文地址:https://www.cnblogs.com/testzcy/p/15112186.html
Copyright © 2011-2022 走看看