Как развернуть хранилище Hashicorp и Consul с помощью Docker Swarm

Давайте посмотрим, как развернуть хранилище Hashicorp и Consul в DigitalOcean с помощью Docker Swarm.

По окончании вы сможете:

  1. Предоставление хостов в DigitalOcean с помощью Docker Machine
  2. Настройте кластер Docker Swarm для работы в DigitalOcean.
  3. Запустите Vault и Consul на Docker Swarm

Основные зависимости:

  • Докер v20.10.8
  • Докер-композитор v1.29.2
  • Докер-машина v0.16.2
  • Убежище v1.8.3
  • Консул v1.10.3

Консул

Создайте новый каталог проекта:

$ mkdir vault-consul-swarm && cd vault-consul-swarm

Затем добавьте файл docker-compose.yml в корень проекта:

version: "3.8"

services:

  server-bootstrap:
    image: consul:1.10.3
    ports:
      - 8500:8500
    command: "agent -server -bootstrap-expect 3 -ui -client 0.0.0.0 -bind '{{ GetInterfaceIP \"eth0\" }}'"

  server:
    image: consul:1.10.3
    command: "agent -server -retry-join server-bootstrap -client 0.0.0.0 -bind '{{ GetInterfaceIP \"eth0\" }}'"
    deploy:
      replicas: 2
    depends_on:
      - server-bootstrap

  client:
    image: consul:1.10.3
    command: "agent -retry-join server-bootstrap -client 0.0.0.0 -bind '{{ GetInterfaceIP \"eth0\" }}'"
    deploy:
      replicas: 2
    depends_on:
      - server-bootstrap

networks:
  default:
    external: true
    name: core

Эта конфигурация должна выглядеть знакомо.

  1. Обратитесь к разделу Compose File записи блога Running Flask on Docker Swarm для получения дополнительной информации об использовании файла compose для режима Docker Swarm.
  2. Просмотрите руководство Consul и Docker для получения информации о приведенной выше конфигурации Consul.

Докер Рой

Зарегистрируйте учетную запись DigitalOcean (если у вас ее еще нет), а затем создайте токен доступа, чтобы получить доступ к API DigitalOcean.

Добавьте токен в свою среду:

$ export DIGITAL_OCEAN_ACCESS_TOKEN=[your_digital_ocean_token]

Раскрутите три капли:

$ for i in 1 2 3; do
    docker-machine create \
      --driver digitalocean \
      --digitalocean-region "nyc1" \
      --digitalocean-image=debian-10-x64 \
      --engine-install-url "https://releases.rancher.com/install-docker/19.03.9.sh" \
      --digitalocean-access-token $DIGITAL_OCEAN_ACCESS_TOKEN \
      node-$i;
done

Инициализируйте режим Swarm на первом узле node-1:

$ docker-machine ssh node-1 -- docker swarm init --advertise-addr $(docker-machine ip node-1)

Используйте токен соединения из вывода предыдущей команды, чтобы добавить оставшиеся два узла в Swarm в качестве рабочих:

$ for i in 2 3; do
    docker-machine ssh node-$i -- docker swarm join --token YOUR_JOIN_TOKEN HOST:PORT;
done

Например:

for i in 2 3; do
    docker-machine ssh node-$i -- docker swarm join --token SWMTKN-1-18xrfgcgq7k6krqr7tvav3ydx5c5104y662lzh4pyct2t0ror3-e3ed1ggivhf8z15i40z6x55g5 67.205.165.166:2377;
done

Тебе следует увидеть:

This node joined a swarm as a worker.
This node joined a swarm as a worker.

Укажите демону Docker на node-1, создайте присоединяемую оверлейную сеть (называемую core) и разверните стек:

$ eval $(docker-machine env node-1)
$ docker network create -d overlay --attachable core
$ docker stack deploy --compose-file=docker-compose.yml secrets

Перечислите службы в стеке:

$ docker stack ps -f "desired-state=running" secrets

Вы должны увидеть что-то похожее на:

ID             NAME                         IMAGE          NODE     DESIRED STATE   CURRENT STATE
b5f5eycrhf3o   secrets_client.1             consul:1.10.3   node-1   Running         Running 7 seconds ago
zs7a5t8khcew   secrets_server.1             consul:1.10.3   node-2   Running         Running 9 seconds ago
qnhtlan6m0sp   secrets_server-bootstrap.1   consul:1.10.3   node-1   Running         Running 7 seconds ago
u61eycesmsl7   secrets_client.2             consul:1.10.3   node-2   Running         Running 9 seconds ago
vgpql8lfy5fi   secrets_server.2             consul:1.10.3   node-3   Running         Running 9 seconds ago

Получите IP-адрес, связанный с node-1:

$ docker-machine ip node-1

Затем протестируйте пользовательский интерфейс Consul в своем браузере по адресу http://YOUR_MACHINE_IP:8500/ui . Должно быть три запущенных сервиса и пять узлов.

услуги консула

узлы пользовательского интерфейса консула

Свод

Добавьте vaultсервис в docker-compose.yml :

vault:
  image: vault:1.8.3
  deploy:
    replicas: 1
  ports:
    - 8200:8200
  environment:
    - VAULT_ADDR=http://127.0.0.1:8200
    - VAULT_LOCAL_CONFIG={"backend":{"consul":{"address":"http://server-bootstrap:8500","path":"vault/"}},"listener":{"tcp":{"address":"0.0.0.0:8200","tls_disable":1}},"ui":true, "disable_mlock":true}
  command: server
  depends_on:
    - consul

Обратите внимание на VAULT_LOCAL_CONFIGпеременную окружения:

{
  "backend": {
    "consul": {
      "address": "http://server-bootstrap:8500",
      "path": "vault/"
    }
  },
  "listener": {
    "tcp": {
      "address": "0.0.0.0:8200",
      "tls_disable": 1
    }
  },
  "ui": true,
  "disable_mlock": true
}

Просмотрите раздел Consul Backend в записи блога Управление секретами с помощью Vault и Consul для получения дополнительной информации. Кроме того, установка для параметра disabled_mlock значенияtrue не рекомендуется для производственных сред; однако его необходимо включить, поскольку --cap-addон недоступен в режиме Docker Swarm. Дополнительные сведения см. в следующих проблемах GitHub:

  1. --cap-add=IPC_LOCK недоступен в рое докеров
  2. Отсутствует в Swarmmode --cap-add

Тест

Повторно разверните стек:

$ docker stack deploy --compose-file=docker-compose.yml secrets

Подождите несколько секунд, пока сервисы запустятся, затем проверьте статус:

$ docker stack ps -f "desired-state=running" secrets

Опять же, вы должны увидеть что-то похожее на:

ID             NAME                         IMAGE           NODE      DESIRED STATE   CURRENT STATE
xtfsetfrbrs7   secrets_client.1             consul:1.10.3   node-3    Running         Running 19 minutes ago
ydqxexgiyzb2   secrets_client.2             consul:1.10.3   node-1    Running         Running 19 minutes ago
izlku3y6j8rp   secrets_server-bootstrap.1   consul:1.10.3   node-2    Running         Running 19 minutes ago
zqpkcrhrix2x   secrets_server.1             consul:1.10.3   node-1    Running         Running 19 minutes ago
kmlxuhxw1akv   secrets_server.2             consul:1.10.3   node-2    Running         Running 19 minutes ago
wfmscoj53m39   secrets_vault.1              vault:1.8.3     node-3    Running         Running about a minute ago

Затем убедитесь, что Vault указан в разделе «Сервисы» пользовательского интерфейса Consul:

услуги консула

Теперь вы сможете взаимодействовать с Vault через интерфейс командной строки, HTTP API и пользовательский интерфейс. Начните с инициализации и распечатывания Vault. Затем войдите в систему и создайте новый секрет.

Удалите узлы после завершения:

$ docker-machine rm node-1 node-2 node-3 -y

Скрипт автоматизации

Наконец, давайте создадим быстрый скрипт для автоматизации процесса развертывания:

  1. Предоставление трех капель DigitalOcean с помощью Docker Machine
  2. Настроить режим Docker Swarm
  3. Добавьте узлы в Swarm
  4. Развернуть стек

Добавьте новый файл с именем deploy.sh в корень проекта:

#!/bin/bash


echo "Spinning up three droplets..."

for i in 1 2 3; do
  docker-machine create \
    --driver digitalocean \
    --digitalocean-region "nyc1" \
    --digitalocean-image=debian-10-x64 \
    --engine-install-url "https://releases.rancher.com/install-docker/19.03.9.sh" \
    --digitalocean-access-token $DIGITAL_OCEAN_ACCESS_TOKEN \
    node-$i;
done


echo "Initializing Swarm mode..."

docker-machine ssh node-1 -- docker swarm init --advertise-addr $(docker-machine ip node-1)


echo "Adding the nodes to the Swarm..."

TOKEN=`docker-machine ssh node-1 docker swarm join-token worker | grep token | awk '{ print $5 }'`

for i in 2 3; do
  docker-machine ssh node-$i \
    -- docker swarm join --token ${TOKEN} $(docker-machine ip node-1):2377;
done


echo "Creating networking..."

eval $(docker-machine env node-1)
docker network create -d overlay --attachable core


echo "Deploying the stack..."

docker stack deploy --compose-file=docker-compose.yml secrets

Попробуйте!

$ sh deploy.sh

Сбейте капли, как только закончите:

$ docker-machine rm node-1 node-2 node-3 -y

Код можно найти в репозитории vault-consul-swarm . Ваше здоровье!

Источник:  https://testdriven.io

#vault #docker 

What is GEEK

Buddha Community

Как развернуть хранилище Hashicorp и Consul с помощью Docker Swarm

Как развернуть хранилище Hashicorp и Consul с помощью Docker Swarm

Давайте посмотрим, как развернуть хранилище Hashicorp и Consul в DigitalOcean с помощью Docker Swarm.

По окончании вы сможете:

  1. Предоставление хостов в DigitalOcean с помощью Docker Machine
  2. Настройте кластер Docker Swarm для работы в DigitalOcean.
  3. Запустите Vault и Consul на Docker Swarm

Основные зависимости:

  • Докер v20.10.8
  • Докер-композитор v1.29.2
  • Докер-машина v0.16.2
  • Убежище v1.8.3
  • Консул v1.10.3

Консул

Создайте новый каталог проекта:

$ mkdir vault-consul-swarm && cd vault-consul-swarm

Затем добавьте файл docker-compose.yml в корень проекта:

version: "3.8"

services:

  server-bootstrap:
    image: consul:1.10.3
    ports:
      - 8500:8500
    command: "agent -server -bootstrap-expect 3 -ui -client 0.0.0.0 -bind '{{ GetInterfaceIP \"eth0\" }}'"

  server:
    image: consul:1.10.3
    command: "agent -server -retry-join server-bootstrap -client 0.0.0.0 -bind '{{ GetInterfaceIP \"eth0\" }}'"
    deploy:
      replicas: 2
    depends_on:
      - server-bootstrap

  client:
    image: consul:1.10.3
    command: "agent -retry-join server-bootstrap -client 0.0.0.0 -bind '{{ GetInterfaceIP \"eth0\" }}'"
    deploy:
      replicas: 2
    depends_on:
      - server-bootstrap

networks:
  default:
    external: true
    name: core

Эта конфигурация должна выглядеть знакомо.

  1. Обратитесь к разделу Compose File записи блога Running Flask on Docker Swarm для получения дополнительной информации об использовании файла compose для режима Docker Swarm.
  2. Просмотрите руководство Consul и Docker для получения информации о приведенной выше конфигурации Consul.

Докер Рой

Зарегистрируйте учетную запись DigitalOcean (если у вас ее еще нет), а затем создайте токен доступа, чтобы получить доступ к API DigitalOcean.

Добавьте токен в свою среду:

$ export DIGITAL_OCEAN_ACCESS_TOKEN=[your_digital_ocean_token]

Раскрутите три капли:

$ for i in 1 2 3; do
    docker-machine create \
      --driver digitalocean \
      --digitalocean-region "nyc1" \
      --digitalocean-image=debian-10-x64 \
      --engine-install-url "https://releases.rancher.com/install-docker/19.03.9.sh" \
      --digitalocean-access-token $DIGITAL_OCEAN_ACCESS_TOKEN \
      node-$i;
done

Инициализируйте режим Swarm на первом узле node-1:

$ docker-machine ssh node-1 -- docker swarm init --advertise-addr $(docker-machine ip node-1)

Используйте токен соединения из вывода предыдущей команды, чтобы добавить оставшиеся два узла в Swarm в качестве рабочих:

$ for i in 2 3; do
    docker-machine ssh node-$i -- docker swarm join --token YOUR_JOIN_TOKEN HOST:PORT;
done

Например:

for i in 2 3; do
    docker-machine ssh node-$i -- docker swarm join --token SWMTKN-1-18xrfgcgq7k6krqr7tvav3ydx5c5104y662lzh4pyct2t0ror3-e3ed1ggivhf8z15i40z6x55g5 67.205.165.166:2377;
done

Тебе следует увидеть:

This node joined a swarm as a worker.
This node joined a swarm as a worker.

Укажите демону Docker на node-1, создайте присоединяемую оверлейную сеть (называемую core) и разверните стек:

$ eval $(docker-machine env node-1)
$ docker network create -d overlay --attachable core
$ docker stack deploy --compose-file=docker-compose.yml secrets

Перечислите службы в стеке:

$ docker stack ps -f "desired-state=running" secrets

Вы должны увидеть что-то похожее на:

ID             NAME                         IMAGE          NODE     DESIRED STATE   CURRENT STATE
b5f5eycrhf3o   secrets_client.1             consul:1.10.3   node-1   Running         Running 7 seconds ago
zs7a5t8khcew   secrets_server.1             consul:1.10.3   node-2   Running         Running 9 seconds ago
qnhtlan6m0sp   secrets_server-bootstrap.1   consul:1.10.3   node-1   Running         Running 7 seconds ago
u61eycesmsl7   secrets_client.2             consul:1.10.3   node-2   Running         Running 9 seconds ago
vgpql8lfy5fi   secrets_server.2             consul:1.10.3   node-3   Running         Running 9 seconds ago

Получите IP-адрес, связанный с node-1:

$ docker-machine ip node-1

Затем протестируйте пользовательский интерфейс Consul в своем браузере по адресу http://YOUR_MACHINE_IP:8500/ui . Должно быть три запущенных сервиса и пять узлов.

услуги консула

узлы пользовательского интерфейса консула

Свод

Добавьте vaultсервис в docker-compose.yml :

vault:
  image: vault:1.8.3
  deploy:
    replicas: 1
  ports:
    - 8200:8200
  environment:
    - VAULT_ADDR=http://127.0.0.1:8200
    - VAULT_LOCAL_CONFIG={"backend":{"consul":{"address":"http://server-bootstrap:8500","path":"vault/"}},"listener":{"tcp":{"address":"0.0.0.0:8200","tls_disable":1}},"ui":true, "disable_mlock":true}
  command: server
  depends_on:
    - consul

Обратите внимание на VAULT_LOCAL_CONFIGпеременную окружения:

{
  "backend": {
    "consul": {
      "address": "http://server-bootstrap:8500",
      "path": "vault/"
    }
  },
  "listener": {
    "tcp": {
      "address": "0.0.0.0:8200",
      "tls_disable": 1
    }
  },
  "ui": true,
  "disable_mlock": true
}

Просмотрите раздел Consul Backend в записи блога Управление секретами с помощью Vault и Consul для получения дополнительной информации. Кроме того, установка для параметра disabled_mlock значенияtrue не рекомендуется для производственных сред; однако его необходимо включить, поскольку --cap-addон недоступен в режиме Docker Swarm. Дополнительные сведения см. в следующих проблемах GitHub:

  1. --cap-add=IPC_LOCK недоступен в рое докеров
  2. Отсутствует в Swarmmode --cap-add

Тест

Повторно разверните стек:

$ docker stack deploy --compose-file=docker-compose.yml secrets

Подождите несколько секунд, пока сервисы запустятся, затем проверьте статус:

$ docker stack ps -f "desired-state=running" secrets

Опять же, вы должны увидеть что-то похожее на:

ID             NAME                         IMAGE           NODE      DESIRED STATE   CURRENT STATE
xtfsetfrbrs7   secrets_client.1             consul:1.10.3   node-3    Running         Running 19 minutes ago
ydqxexgiyzb2   secrets_client.2             consul:1.10.3   node-1    Running         Running 19 minutes ago
izlku3y6j8rp   secrets_server-bootstrap.1   consul:1.10.3   node-2    Running         Running 19 minutes ago
zqpkcrhrix2x   secrets_server.1             consul:1.10.3   node-1    Running         Running 19 minutes ago
kmlxuhxw1akv   secrets_server.2             consul:1.10.3   node-2    Running         Running 19 minutes ago
wfmscoj53m39   secrets_vault.1              vault:1.8.3     node-3    Running         Running about a minute ago

Затем убедитесь, что Vault указан в разделе «Сервисы» пользовательского интерфейса Consul:

услуги консула

Теперь вы сможете взаимодействовать с Vault через интерфейс командной строки, HTTP API и пользовательский интерфейс. Начните с инициализации и распечатывания Vault. Затем войдите в систему и создайте новый секрет.

Удалите узлы после завершения:

$ docker-machine rm node-1 node-2 node-3 -y

Скрипт автоматизации

Наконец, давайте создадим быстрый скрипт для автоматизации процесса развертывания:

  1. Предоставление трех капель DigitalOcean с помощью Docker Machine
  2. Настроить режим Docker Swarm
  3. Добавьте узлы в Swarm
  4. Развернуть стек

Добавьте новый файл с именем deploy.sh в корень проекта:

#!/bin/bash


echo "Spinning up three droplets..."

for i in 1 2 3; do
  docker-machine create \
    --driver digitalocean \
    --digitalocean-region "nyc1" \
    --digitalocean-image=debian-10-x64 \
    --engine-install-url "https://releases.rancher.com/install-docker/19.03.9.sh" \
    --digitalocean-access-token $DIGITAL_OCEAN_ACCESS_TOKEN \
    node-$i;
done


echo "Initializing Swarm mode..."

docker-machine ssh node-1 -- docker swarm init --advertise-addr $(docker-machine ip node-1)


echo "Adding the nodes to the Swarm..."

TOKEN=`docker-machine ssh node-1 docker swarm join-token worker | grep token | awk '{ print $5 }'`

for i in 2 3; do
  docker-machine ssh node-$i \
    -- docker swarm join --token ${TOKEN} $(docker-machine ip node-1):2377;
done


echo "Creating networking..."

eval $(docker-machine env node-1)
docker network create -d overlay --attachable core


echo "Deploying the stack..."

docker stack deploy --compose-file=docker-compose.yml secrets

Попробуйте!

$ sh deploy.sh

Сбейте капли, как только закончите:

$ docker-machine rm node-1 node-2 node-3 -y

Код можно найти в репозитории vault-consul-swarm . Ваше здоровье!

Источник:  https://testdriven.io

#vault #docker 

Panmure  Anho

Panmure Anho

1601301859

Kubernetes vs. Docker Swarm (k8 vs Docker Swarm)

Basically, both Kubernetes and Docker Swarm both are the container orchestration tool. The rise in interest to containers has in turn brought in higher demands for their deployment and management. Both Kubernetes and Docker Swarm are important tools that are used to deploy containers inside a cluster. So the question arises here is which one to use?

So lets discuss one by one and see the the differances between them.

Introduction to Kubernetes:

The name Kubernetes originates from Greek, meaning helmsman or pilot. Kubernetes is an open-source, portable, and extensible platform for managing containerized workload and services. That facilitates both declarative configuration and automation. Kubernetes manage the containers that run the applications and ensure that there is no downtime into a huge scale production environment.

Introduction to Docker swarm:

Docker swarm is a container orchestration tool, meaning that it allows the user to manage multiple containers deployed across multiple host machines. Docker Swarm is designed to work around four key principles:

  1. Less cluttered/heavy and with just working methodology
  2. No Single Point of Failure option for Docker Swarm
  3. Secure due to auto-generation of security certificates.
  4. Compatibility with Backward versions easily.

Here you get to know that both in some manner are the same , So now let’s check out the differences and see:

#devops #docker #docker swarm #kubernetes #swarm

Iliana  Welch

Iliana Welch

1595249460

Docker Explained: Docker Architecture | Docker Registries

Following the second video about Docker basics, in this video, I explain Docker architecture and explain the different building blocks of the docker engine; docker client, API, Docker Daemon. I also explain what a docker registry is and I finish the video with a demo explaining and illustrating how to use Docker hub

In this video lesson you will learn:

  • What is Docker Host
  • What is Docker Engine
  • Learn about Docker Architecture
  • Learn about Docker client and Docker Daemon
  • Docker Hub and Registries
  • Simple demo to understand using images from registries

#docker #docker hub #docker host #docker engine #docker architecture #api

Aketch  Rachel

Aketch Rachel

1624332660

Selenium Grid With Docker Swarm

In this guide, we will talk about setting up a Selenium Grid using Docker Swarm on any of the cloud services like GCP or AWS.

Let’s start with the basics first, i.e. what is Selenium Grid and Docker Swarm.

What is Selenium Grid?

Selenium Grid allows the execution of WebDriver scripts on remote machines (virtual or real) by routing commands sent by the client to remote browser instances. It aims to provide an easy way to run tests in parallel on multiple machines.

Selenium Grid allows us to run tests in parallel on multiple machines, and to manage different browser versions and browser configurations centrally (instead of in each individual test).

Selenium Grid purposes and main functionalities

  1. A central entry point for all tests
  2. Management and control of the nodes/environment where the browsers run
  3. Scaling
  4. Running tests in parallel
  5. Load balancing

Now a question comes “When to use Grid”?

Generally speaking, there are two reasons why you might want to use Grid.

  1. To run your tests against multiple browsers, multiple versions of browsers, and browsers running on different operating systems.
  2. To reduce the time it takes for the test suite to complete a test pass.

Grid is used to speed up the execution of a test pass by using multiple machines to run tests in parallel. For example, if you have a suite of 100 tests, but you set up Grid to support 4 different machines (VMs or separate physical machines) to run those tests, your test suite will complete in (roughly) one-fourth the time as it would if you ran your tests sequentially on a single machine.

What is Docker Swarm?

Docker swarm is a container orchestration tool, meaning that it allows the user to manage multiple containers deployed across multiple host machines.

One of the key benefits associated with the operation of a docker swarm is the high level of availability offered for applications. In a docker swarm, there are typically several worker nodes and at least one manager node that is responsible for handling the worker nodes’ resources efficiently and ensuring that the cluster operates efficiently.

What are the two types of Docker Swarm mode services?

Docker Swarm has two types of services: replicated and global.

**Replicated services: **Swarm mode replicated services functions by you specifying the number of replica tasks for the swarm manager to assign to available nodes.

**Global services: **Global services function by using the swam manager to schedule one task to each available node that meets the services constraints and resource requirements.

#docker-swarm #docker #selenium #docker swarm

Paris  Turcotte

Paris Turcotte

1617996180

Using Docker Swarm Secrets to Store and Rotate your SSL Certificates with Nginx

A tutorial on using Docker Swarm secrets to store your sensitive data by creating an Nginx docker service, and how to update it.

What is Docker Swarm Secrets?

Docker Swarm has an excellent feature out of the box — Docker Swarm secrets. Using it, you can easily keep your sensitive data like credentials, TLS certificates, etc.

In terms of Docker Swarm services, a secret is a blob of data, such as a password, SSH private key, SSL certificate, or another piece of data that should not be transmitted over a network or stored unencrypted in a Dockerfile or in your application’s source code. You can use Docker secrets to centrally manage this data and securely transmit it to only those containers that need access to it.

So, if we want to use it to store our certificates, first we need a certificate. Here we have two options:

  • Use a self-signed certificate.
  • Buy SSL certificate.

We will use self-signed:

$ mkdir certs && sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ./certs/nginx.key -out ./certs/nginx.crt

The command above generates a certificate that expires in 1 year and places it in ./certs/ directory.

Now we have key and crt files, and we can already use them. But besides that, we should always monitor the certificate expiration date. Sure, there are a few ways to do it, but it is out of scope for this topic. Just keep in mind that you can use alerts (Prometheus + Blackbox exporter) of the certificate expiration date to trigger your script, which in its turn updates the secret with the certificate.

Next step, we need to create an Nginx docker service with our certificate. Here is a docker-compose file with a secrets section:

#devops #docker #ssl #nginx #docker swarm #swarm