Лучшая практика Docker: Docker развертывает практику etcd с одним узлом
Лучшая практика Docker: Docker развертывает практику etcd с одним узлом

Лучшая практика Docker: Docker развертывает практику etcd с одним узлом

2024 Годоблачный родной Эксплуатация и обслуживание Настоящий бой Документация 99 оригинальный проект Нет. 004 Глава |Docker оптимальный Настоящий бой「2024」Сериал Нет. 004 Глава

Предисловие

Привет,добро пожаловать вКвалифицирован в эксплуатации и обслуживании

Контент, которым сегодня поделились, Docker оптимальный Настоящий бой「2024」 в серии документов Docker Развертывание одного узла etcd Настоящий бой

Карта контента

docker-single-etcd-mindmap
docker-single-etcd-mindmap

Настоящий бой Служить Конфигурация (Архитектура 1:1 Реплицируйте мелкомасштабную производственную среду, конфигурация немного другая)

имя хоста

IP

ЦП (ядро)

Память (ГБ)

Системный диск (ГБ)

Диск с данными (ГБ)

использовать

docker-node-1

192.168.9.81

4

16

40

100

Докер-узел 1

docker-node-2

192.168.9.82

4

16

40

100

Докер-узел 2

docker-node-3

192.168.9.83

4

16

40

100

Докер-узел 3

общий

3

12

48

120

300

Настоящий бойцовский окружение включает информацию о версии программного обеспечения.

  • Операционная система:openEuler 22.03 LTS SP3
  • Docker:24.0.7
  • Containerd:1.6.27
  • Etcd:3.5.12

1. Предварительные условия

В настоящее время существует два типа контейнеров, доступных для основных решений по развертыванию контейнеров etcd:

  • coreos Официально предоставлено:quay.io/coreos/etcd:v3.5.12
  • bitnami поставлять:bitnami/etcd:3.5.12

Существует три способа настройки службы etcd:

  • Command-line flags:флаги командной строки,etcd Добавьте параметры командной строки при запуске службы (flag)。справочная документация по флагам
  • Environment variables: Переменные системной среды и т. д. Чтение переменных системной среды при запуске службы
  • Configuration file: Конфигурационный файл и т. д. Прочтите, когда начнется обслуживание --config-файл параметробозначениеиз Конфигурациядокумент。ссылка на файл конфигурации etcd

Используйте переменные системной среды для настройки инструкций службы etcd:

  • Каждый флаг командной строки имеет соответствующую переменную среды.
  • Должен переменные имеют то же имя, но имеют префикс 'etcd_' И заглавными буквами и змеевидная номенклатураформат
  • Например, --some-flag После преобразования ETCD_SOME_FLAG
  • змеевидная номенклатураsnake_case):Это означает, что каждому пробелу предшествует подчеркивание.(_)заменятьизстиль письма,И каждая буква каждого слова из Нет строчная (раньше вообще все строчные).,Например lower_case_with_underscoresСправочная вики-энциклопедия

книга Настоящий курс принят coreos Официально предоставлено etcd Зеркало,Развертывание одного узлаиз etcd сервисы и продемонстрировать реализацию с использованием файлов конфигурации и переменных среды соответственно. etcd Конфигурация сервиса.

Почему стоит выбрать изображение coreos?

2. одиночный узел etcd развертывать Настоящий бой-на основе Конфигурациядокумент

Содержимое этого раздела реализовано с помощью файлов конфигурации. etcd Конфигурация сервиса.

2.1 Создайте каталог данных etcd

Язык кода:bash
копировать
mkdir -p /data/containers/etcd/{data,config}
  • data Оглавление:предположение, Постоянные данные контейнера хранения
  • config Оглавление:предположение, Документ конфигурации использования контейнера хранения

2.2 Создайте файл конфигурации etcd

etcd Служить Конфигурациядокумент Путь:/data/containers/etcd/config/etcd.conf.yml

Содержимое файла следующее:

Язык кода:yaml
копировать
name: etcd-s1
data-dir: /var/etcd
listen-client-urls: http://0.0.0.0:2379
advertise-client-urls: http://0.0.0.0:2379
listen-peer-urls: http://0.0.0.0:2380
initial-advertise-peer-urls: http://0.0.0.0:2380
initial-cluster: etcd-s1=http://0.0.0.0:2380
initial-cluster-token: etcd-cluster
initial-cluster-state: new
logger: zap
log-level: info
#log-outputs: stderr

Описание специального параметра:

name: etcd member Имя, может быть изменено в зависимости от реальной ситуации data-dir: etcd Каталог данных, который можно изменить в соответствии с фактическими условиями. listen-client-urls: client Адрес мониторинга трафика, просто заполните его согласно документу, если нет особых требований. advertise-client-urls: Должен member Клиенты, рекламируемые на внешнем рынке url список,одиночный узел не нужно изменять при развертывании. Режим развертывания кластера необходимо изменить, чтобы обеспечить Служитьиз места расположения контейнера. IP listen-peer-urls: peer Адрес мониторинга трафика, просто заполните его согласно документу, если нет особых требований. initial-advertise-peer-urls: Должен member другим членам в том же кластере member Объявлено peer url список,одиночный узел не нужно изменять при развертывании. Режим развертывания кластера необходимо изменить, чтобы обеспечить Служитьиз места расположения контейнера. IP initial-cluster: Инициализация информации о кластере, одиночная узел не нужно модифицировать при развертывании. В режиме развертывания кластера необходимо заполнить все поля. member информация initial-cluster-token: Используется при инициализации кластера жетон, пиши что хочешь initial-cluster-state: Инициализируйте состояние кластера, необязательное значение: new или existing,Обычно используется new

2.3 Создайте файл docker-compose

Язык кода:yaml
копировать
version: '3'

services:
  etcd:
    container_name: etcd-s1
    image: quay.io/coreos/etcd:v3.5.12
    command: /usr/local/bin/etcd --config-file=/var/lib/etcd/conf/etcd.conf.yml
    volumes:
      - ${DOCKER_VOLUME_DIRECTORY:-.}/data:/var/etcd
      - ${DOCKER_VOLUME_DIRECTORY:-.}/config/etcd.conf.yml:/var/lib/etcd/conf/etcd.conf.yml
      - "/etc/localtime:/etc/localtime:ro"
    ports:
      - 2379:2379
      - 2380:2380
    restart: always

networks:
  default:
    name: etcd-tier
    driver: bridge

Описание специального параметра:

networks.default: Создайте новый, используя bridge сеть шаблонов etcd-tier, Имя можно настроить в соответствии с потребностями.

2.4 Создайте и запустите службу etcd

Язык кода:bash
копировать
cd /data/containers/etcd
docker compose up -d

Результаты успешного выполнения команды следующие:

Язык кода:bash
копировать
[root@docker-node-1 etcd]# docker compose up -d
[+] Running 1/2
 ⠸ Network etcd-tier  Created                                                                                                                                   0.4s
 ✔ Container etcd-s1  Started 

2.5 Проверка статуса контейнера

  • Просмотр статуса контейнера etcd
Язык кода:bash
копировать
[root@docker-node-1 etcd]# docker compose ps -a
NAME      IMAGE                         COMMAND                  SERVICE   CREATED          STATUS          PORTS
etcd-s1   quay.io/coreos/etcd:v3.5.12   "/usr/local/bin/etcd…"   etcd      53 seconds ago   Up 53 seconds   0.0.0.0:2379-2380->2379-2380/tcp, :::2379-2380->2379-2380/tcp

3. Развертывание одиночного узла etcd Настоящий бой — на основе переменных окружения

Содержимое этого раздела реализовано с использованием переменных среды. etcd Конфигурация сервиса.

3.1 Создайте каталог данных etcd

Язык кода:bash
копировать
mkdir -p /data/containers/etcd/data
  • data Оглавление:предположение, Постоянные данные контейнера хранения

3.2 Создание файла docker-compose

Язык кода:yaml
копировать
version: '3'

services:
  etcd:
    container_name: etcd-s1
    image: quay.io/coreos/etcd:v3.5.12
    environment:
      - ETCD_NAME=etcd-s1
      - ETCD_DATA_DIR=/var/etcd
      - ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379
      - ETCD_ADVERTISE_CLIENT_URLS=http://0.0.0.0:2379
      - ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
      - ETCD_INITIAL_ADVERTISE_PEER_URLS=http://0.0.0.0:2380
      - ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
      - ETCD_INITIAL_CLUSTER=etcd-s1=http://0.0.0.0:2380
      - ETCD_INITIAL_CLUSTER_STATE=new
      - ETCD_LOGGER=zap
      - ETCD_LOG_LeveL=info      
    volumes:
      - ${DOCKER_VOLUME_DIRECTORY:-.}/data:/var/etcd
      - "/etc/localtime:/etc/localtime:ro"
    ports:
      - 2379:2379
      - 2380:2380
    restart: always

networks:
  default:
    name: etcd-tier
    driver: bridge

3.3 Создайте и запустите службу etcd

Язык кода:bash
копировать
cd /data/containers/etcd
docker compose up -d

3.4 Проверка статуса контейнера

  • Просмотр статуса контейнера etcd
Язык кода:bash
копировать
[root@docker-node-1 etcd]# docker compose ps -a
NAME      IMAGE                         COMMAND                 SERVICE   CREATED          STATUS          PORTS
etcd-s1   quay.io/coreos/etcd:v3.5.12   "/usr/local/bin/etcd"   etcd      17 seconds ago   Up 16 seconds   0.0.0.0:2379-2380->2379-2380/tcp, :::2379-2380->2379-2380/tcp

4. Тестирование доступности сервиса etcd

Чтобы проверить доступность службы etcd, найдите дополнительный компьютер для установки клиентского инструмента etcd для проверочного тестирования.

  • Загрузите и разархивируйте пакет
Язык кода:bash
копировать
cd /srv
wget https://github.com/etcd-io/etcd/releases/download/v3.5.12/etcd-v3.5.12-linux-amd64.tar.gz
tar xvf etcd-v3.5.12-linux-amd64.tar.gz
cd etcd-v3.5.12-linux-amd64
  • Используйте инструмент etcdctl для проверки конечных точек теста.
Язык кода:bash
копировать
# ./etcdctl --endpoints=192.168.9.81:2379 --write-out=table endpoint health
+-------------------+--------+------------+-------+
|     ENDPOINT      | HEALTH |    TOOK    | ERROR |
+-------------------+--------+------------+-------+
| 192.168.9.81:2379 |   true | 2.517794ms |       |
+-------------------+--------+------------+-------+

# ./etcdctl --endpoints=192.168.9.81:2379 --write-out=table endpoint status
+-------------------+-----------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
|     ENDPOINT      |       ID        | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |
+-------------------+-----------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| 192.168.9.81:2379 | 1c70f9bbb41018f |  3.5.12 |   20 kB |      true |      false |         2 |          4 |                  4 |        |
+-------------------+-----------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
  • Используйте инструмент etcdctl для проверки участников теста
Язык кода:bash
копировать
# ./etcdctl --endpoints=192.168.9.81:2379 --write-out=table member list
+-----------------+---------+---------+---------------------+---------------------+------------+
|       ID        | STATUS  |  NAME   |     PEER ADDRS      |    CLIENT ADDRS     | IS LEARNER |
+-----------------+---------+---------+---------------------+---------------------+------------+
| 1c70f9bbb41018f | started | etcd-s1 | http://0.0.0.0:2380 | http://0.0.0.0:2379 |      false |
+-----------------+---------+---------+---------------------+---------------------+------------+
  • Используйте инструмент etcdctl для проверки чтения и записи тестовых данных.
Язык кода:bash
копировать
# Запись данных
# ./etcdctl --endpoints=192.168.9.81:2379 put foo bar
OK

# Чтение данных
# ./etcdctl --endpoints=192.168.9.81:2379 get foo
foo
bar

5. Автоматизированные сценарии оболочки

Все операции в полном тексте я организовал в автоматизированные скрипты:

  • Режим профиля deploy-etcd-conf.sh
Язык кода:bash
копировать
#!/bin/bash
set -e

etcd_name=${1:-"etcd-s1"}
docker_container_dir=${2:-"/data/containers"}

# создатель Базового каталога
mkdir -p ${docker_container_dir}/etcd/{data,config}

# создавать etcd Конфигурациядокумент
function deploy_etcd_config(){
cat > ${docker_container_dir}/etcd/config/etcd.conf.yml <<-EOF
name: ${etcd_name}
data-dir: /var/etcd
listen-client-urls: http://0.0.0.0:2379
advertise-client-urls: http://0.0.0.0:2379
listen-peer-urls: http://0.0.0.0:2380
initial-advertise-peer-urls: http://0.0.0.0:2380
initial-cluster: etcd-s1=http://0.0.0.0:2380
initial-cluster-token: etcd-cluster
initial-cluster-state: new
logger: zap
log-level: info
#log-outputs: stderr

EOF
}

# создавать docker-compose документ
function deploy_compose_config(){
cat > ${docker_container_dir}/etcd/docker-compose.yml <<-EOF
version: '3'

services:
  etcd:
    container_name: ${etcd_name}
    image: quay.io/coreos/etcd:v3.5.12
    command: /usr/local/bin/etcd --config-file=/var/lib/etcd/conf/etcd.conf.yml
    volumes:
      - ${DOCKER_VOLUME_DIRECTORY:-.}/data:/var/etcd
      - ${DOCKER_VOLUME_DIRECTORY:-.}/config/etcd.conf.yml:/var/lib/etcd/conf/etcd.conf.yml
      - "/etc/localtime:/etc/localtime:ro"
    ports:
      - 2379:2379
      - 2380:2380
    restart: always

networks:
  default:
    name: etcd-tier
    driver: bridge

EOF
}

# создавать etcd Служить
function deploy_etcd(){
  cd ${docker_container_dir}/etcd
  docker compose up -d
}

# проверять etcd Служить
function check_etcd(){
  cd ${docker_container_dir}/etcd
  docker compose ps
}

echo -e "\033[1;32m 1.Deploy etcd config.\n \033[0m"
deploy_etcd_config

echo -e "\033[1;32m 2.Deploy docker compose config.\n \033[0m"
deploy_compose_config

echo -e "\033[1;32m 3.Deploy etcd service.\n \033[0m"
deploy_etcd

echo -e "\033[1;32m 4.Check etcd service status. \033[0m"
check_etcd
  • шаблон переменной среды deploy-etcd-env.sh
Язык кода:bash
копировать
#!/bin/bash
set -e

etcd_name=${1:-"etcd-s1"}
docker_container_dir=${2:-"/data/containers"}

# создатель Базового каталога
mkdir -p ${docker_container_dir}/etcd/data

# создавать docker-compose документ
function deploy_compose_config(){
cat > ${docker_container_dir}/etcd/docker-compose.yml <<-EOF
version: '3'

services:
  etcd:
    container_name: ${etcd_name}
    image: quay.io/coreos/etcd:v3.5.12
    environment:
      - ETCD_NAME=${etcd_name}
      - ETCD_DATA_DIR=/var/etcd
      - ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379
      - ETCD_ADVERTISE_CLIENT_URLS=http://0.0.0.0:2379
      - ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
      - ETCD_INITIAL_ADVERTISE_PEER_URLS=http://0.0.0.0:2380
      - ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
      - ETCD_INITIAL_CLUSTER=etcd-s1=http://0.0.0.0:2380
      - ETCD_INITIAL_CLUSTER_STATE=new
      - ETCD_LOGGER=zap
      - ETCD_LOG_LeveL=info      
    volumes:
      - ${DOCKER_VOLUME_DIRECTORY:-.}/data:/var/etcd
      - "/etc/localtime:/etc/localtime:ro"
    ports:
      - 2379:2379
      - 2380:2380
    restart: always

networks:
  default:
    name: etcd-tier
    driver: bridge

EOF
}

# создавать etcd Служить
function deploy_etcd(){
  cd ${docker_container_dir}/etcd
  docker compose up -d
}

# проверять etcd Служить
function check_etcd(){
  cd ${docker_container_dir}/etcd
  docker compose ps
}

echo -e "\033[1;32m 1.Deploy docker compose config.\n \033[0m"
deploy_compose_config

echo -e "\033[1;32m 2.Deploy etcd service.\n \033[0m"
deploy_etcd

echo -e "\033[1;32m 3.Check etcd service status. \033[0m"
check_etcd

проиллюстрировать: Потому что это не было решено в процессе отладки. EOF Проблема с сообщением об ошибке, функция внутри cat Часть контента не имеет отступов и выглядит неприглядно, но на его использование это не влияет.

6. Домашнее задание

Основываясь на том, что вы узнали из этой статьи, пожалуйста, выполните следующие задания «Настоящий бой».

  1. Развертывание вручную на основе документизодиночной конфигурации. узел etcd Служить
  2. Развертывание вручную на основе переменных среды изодиночный узел etcd Служить
  3. использоватьавтоматизация Скриптразвертыватьна основе Конфигурациядокументизодиночный узел etcd
  4. использоватьавтоматизация Скрипт развертывается на основе переменных среды изодиночный узел etcd
  5. Проверка тестирования с помощью командной строки etcd Служить наличие и статус

7. Резюме

В этой статье представлена ​​информация, основанная на coreos Официально предоставлено etcd Развертывание зеркала etcd Подробные процедуры обслуживания и меры предосторожности. Основное содержание резюмируется следующим образом:

  • Реализовано на основе метода документирования конфигурации. etcd Служитьразвертывать
  • Реализуйте развертывание etcd Служить на основе переменных среды.
  • Написано на основе конфигурационного документа и переменной среды из etcd. Скрипт автоматического развертывания.
  • etcd Служить Доступностьпроверятьтест

Получить эту статью Настоящий бой видео(пожалуйста, обрати внимание,Асинхронный выпуск документального видео,пожалуйста, сначаласосредоточиться на)

Отказ от ответственности:

  • Уровень автора ограничен,Несмотря на то, что много разпроверятьи проверь,Мы прилагаем все усилия для обеспечения точности содержания.,Однако могут быть и пропуски。Пожалуйста, дайте свой совет экспертам отрасли.。
  • Содержание, указанное в этой статье, предоставлено только Настоящим. бойсредапроверятьтест,Читатели могут учиться и извлекать уроки из,ноКатегорически запрещено использовать непосредственно в производственной среде.Автор не несет ответственности за любые проблемы, возникшие в связи с этим.

Заключение

Если вам понравилась эта статья, поделитесь, добавьте в избранное, поставьте лайк и прокомментируйте! Пожалуйста, продолжайте обращать внимание @ Опытные в эксплуатации и обслуживании, вовремя смотрите больше хороших статей!

Добро пожаловать присоединиться 「Квалифицирован в эксплуатации и обслуживании·облачный родной Настоящий тренировочный лагерь для бойцов》 ,получи больше KubeSphere、Kubernetes、облачный родной Эксплуатация и обслуживание Настоящий бой Навык。

Заявление об авторских правах

  • Весь контент принадлежит оригиналу,Спасибо, что прочитали и собрали,Пожалуйста, свяжитесь с нами для получения разрешения на перепечатку. Воспроизведение без разрешения запрещено.
boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose