[Nativo da nuvem] Orquestração de host Docker Swarm

1. O que é Docker Swarm?

Swarm é uma plataforma lançada pela Docker para gerenciar clusters docker. É quase inteiramente desenvolvida usando a linguagem GO. O código é de código aberto em https://github.com/docker/swarm. Ele transforma um grupo de hosts Docker em um As. um único host virtual, o Swarm usa a interface padrão da API do Docker como sua entrada de acesso front-end. Em outras palavras, várias formas de cliente Docker (compose, docker-py, etc.) podem se comunicar diretamente com o Swarm, e até mesmo o próprio Docker pode Facilmente integrado ao Swarm, isso facilita muito aos usuários o transplante de sistemas originalmente baseados em nós únicos para o Swarm.Ao mesmo tempo, o Swarm possui suporte integrado para plug-ins de rede Docker e os usuários podem facilmente implantar serviços de cluster de contêiner entre hosts.

O Docker Swarm, assim como o Docker Compose, é o projeto oficial de orquestração de contêineres do Docker, mas a diferença é que o Docker Compose é uma ferramenta para criar vários contêineres em um único servidor ou host, enquanto o Docker Swarm pode ser criado em vários servidores ou hosts. , para a implantação de microsserviços, o Docker Swarm é obviamente mais adequado.

A partir da versão 1.12.0 do Docker, o Docker Swarm foi incluído no mecanismo Docker (docker swarm) e possui ferramentas integradas de descoberta de serviços.Não precisamos configurar Etcd ou Consul para configuração de descoberta de serviços como antes.

Swarm deamon é apenas um agendador mais roteador. O próprio Swarm não executa o contêiner. Ele apenas aceita solicitações do cliente Docker e agenda nós adequados para executar o contêiner. Isso significa que mesmo que o Swarm seja devido a um certo motivo, se o motivo estiver inativo, os nós do cluster continuarão a funcionar normalmente.Quando o Swarm retomar a operação, ele coletará e reconstruirá as informações do cluster.

2. Vários conceitos-chave do Swarm

Enxame

O gerenciamento e orquestração do cluster usam SwarmKit incorporado no mecanismo docker. Você pode iniciar o modo swarm durante a inicialização do docker ou ingressar em um swarm existente.

Um nó é uma instância de um cluster do mecanismo docker. Você também pode pensar nisso como um nó Docker. Você pode executar um ou mais nós em um único computador físico ou servidor em nuvem, mas as implantações de cluster de produção geralmente incluem nós do Docker distribuídos em vários computadores físicos e em nuvem.
Para implementar um aplicativo em um swarm, envie a definição de serviço ao nó gerenciador. O nó gerenciador despacha unidades de trabalho chamadas tarefas para os nós trabalhadores.
O nó Gerenciador também executa as funções de orquestração e gerenciamento de cluster necessárias para manter o estado de cluster desejado. O nó Gerenciador seleciona um único líder para executar tarefas de orquestração. Os nós trabalhadores recebem e executam tarefas despachadas do nó gerenciador. Por padrão, os nós gerenciadores também executam serviços como nós do trabalhador, mas é possível configurá-los para executar apenas tarefas de gerenciador e serem nós somente de gerente. O agente é executado em cada nó de trabalho e relata as tarefas atribuídas a ele. Os nós de trabalho informam os nós de gerenciamento sobre o status atual de suas tarefas atribuídas para que o gerente possa manter o status desejado de cada trabalhador.

Serviço

Um serviço é uma definição de tarefas executadas em uma máquina de gerenciamento ou nó de trabalho. É a estrutura central do sistema de grupo e a principal fonte de interação entre usuários e grupos. Ao criar um serviço, você precisa especificar a imagem do contêiner a ser usada.

Tarefa

Tarefas são comandos executados no contêiner docekr. O nó Gerenciador aloca tarefas aos nós trabalhadores com base no número especificado de cópias de tarefas.

3. Comandos relacionados

enxame docker:

Gerenciamento de cluster, os subcomandos incluem init, join, leave, update. (docker swarm --help para ver a ajuda)

serviço docker:

Criação de serviço, os subcomandos incluem criar, inspecionar, atualizar, remover tarefas. (docker service – help para ver a ajuda)

nó docker:

Gerenciamento de nós, os subcomandos incluem aceitar, promover, rebaixar, inspecionar, atualizar, tarefas, ls, rm.
(docker node --help para visualizar a ajuda)

4. Implantação de cluster Swarm

4.1. Preparação antes da implantação

As seguintes operações são executadas em todos os nós:

endereço de IP Nome do computador Papel
192.168.1.100 gerenciar01 swarm_manager
192.168.1.101 nó01 swarm_node
192.168.1.102 nó02 swarm_node
  • Instalar janela de encaixe
  • análise de hosts
[root@manage01 ~]# cat /etc/hosts
192.168.1.100 manage01
192.168.1.101 node01
192.168.1.102 node02

[root@manage01 ~]# systemctl disable firewalld
[root@manage01 ~]# systemctl stop firewalld
[root@manage01 ~]# iptables -F

关闭 selinux

#设置为 disabled 后需要重启计算机生效
SELINUX=disabled

4.2. Crie um cluster de enxame

初始化集群-init

[root@manage01 ~]# docker swarm init --advertise-addr 192.168.1.100

#--advertise-addr参数表示其它swarm中的worker节点使用此ip地址与manager联系


Swarm initialized: current node (dh6qthwwctbrl0y3hx1k41icl) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-0vdbyxq80uk8sf9nlnahsnkv6w3gaf5necl992ia0g8dmc5x8c-bkenoigc7kwizoch08r3fc4wq 192.168.1.100:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

4.3. Adicionar trabalhador (nó trabalhador) ao swarm

[root@node01 ~]# docker swarm join --token SWMTKN-1-0vdbyxq80uk8sf9nlnahsnkv6w3gaf5necl992ia0g8dmc5x8c-bkenoigc7kwizoch08r3fc4wq 192.168.1.100:2377
This node joined a swarm as a worker.

[root@node02 ~]# docker swarm join --token SWMTKN-1-0vdbyxq80uk8sf9nlnahsnkv6w3gaf5necl992ia0g8dmc5x8c-bkenoigc7kwizoch08r3fc4wq 192.168.1.100:2377
This node joined a swarm as a worker.

4.4. Verifique o status de adesão

 [root@manage01 ~]# docker node ls

4.5. Implantar serviços no Swarm (nginx como exemplo)

Criar rede e implantar serviços

# 创建网络
[root@manage01 ~]# docker network create -d overlay nginx_net
a52jy33asc5o0ts0rq823bf0m

[root@manage01 ~]# docker network ls | grep nginx_net
a52jy33asc5o        nginx_net           overlay             swarm
 
# 部署服务
[root@manage01 ~]# docker service create --replicas 1 --network nginx_net --name my_nginx -p 80:80 nginx    # 就创建了一个具有一个副本(--replicas 1 )的nginx服务,使用镜像nginx

olexfmtdf94sxyeetkchwhehg
overall progress: 1 out of 1 tasks
1/1: running   [==================================================>]
verify: Service converged

Use a rede de sobreposição acima para criar o serviço nginx nos nós do gerenciador e do nó
. O parâmetro –replicas especifica que o serviço consiste em várias instâncias
. Observação: não há necessidade de baixar a imagem nginx no nó com antecedência. A imagem do contêiner será baixado automaticamente após a execução deste comando.

# 使用 docker service ls 查看正在运行服务的列表
[root@manage01 ~]# docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
olexfmtdf94s        my_nginx            replicated          1/1                 nginx:latest        *:80->80/tcp

Consultar informações de serviço no Swarm -pretty formata a saída do comando em um formato legível.Informações mais detalhadas podem ser produzidas sem adicionar --pretty:

[root@manage01 ~]# docker service inspect --pretty my_nginx

ID:             zs7fw4ereo5w7ohd4n9ii06nt
Name:           my_nginx
Service Mode:   Replicated
 Replicas:      1
Placement:
UpdateConfig:
 Parallelism:   1
 On failure:    pause
 Monitoring Period: 5s
 Max failure ratio: 0
 Update order:      stop-first
RollbackConfig:
 Parallelism:   1
 On failure:    pause
 Monitoring Period: 5s
 Max failure ratio: 0
 Rollback order:    stop-first
ContainerSpec:
 Image:         nginx:latest@sha256:b73f527d86e3461fd652f62cf47e7b375196063bbbd503e853af5be16597cb2e
 Init:          false
Resources:
Networks: nginx_net
Endpoint Mode:  vip
Ports:
 PublishedPort = 80
  Protocol = tcp
  TargetPort = 80
  PublishMode = ingress
  
# 查询到哪个节点正在运行该服务
[root@manage01 ~]# docker service ps my_nginx

Escalando serviços dinamicamente no Swarm (escala) Claro, se você apenas iniciar o contêiner por meio do serviço, o swarm não é novidade. O serviço também fornece funcionalidade de replicação (semelhante à replicação em kubernetes). Você pode usar o comando docker service scale para definir o número de cópias do contêiner no serviço, como expandir dinamicamente o contêiner my_nginx acima para 4

[root@manager01 ~]# docker service scale my_nginx=4
my_nginx scaled to 4
overall progress: 4 out of 4 tasks
1/4: running   [==================================================>]
2/4: running   [==================================================>]
3/4: running   [==================================================>]
4/4: running   [==================================================>]
verify: Service converged

Assim como na criação de um serviço, após aumentar o número da escala, novos contêineres serão criados. Esses contêineres recém-iniciados também passarão pelo processo desde a preparação até a execução. Após cerca de um minuto, o serviço deverá ser iniciado. Neste momento, você posso dar uma olhada novamente.Contêineres no serviço nginx

[root@manager01 ~]# docker service ps my_nginx
#升级镜像/升级业务/回滚业务
docker service update --image nginx:new my_nginx

#删除服务
[root@manager01 ~]# docker service rm my_nginx

Guess you like

Origin blog.csdn.net/qq_45277554/article/details/131372109