Compare commits
15 Commits
1ab2353280
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c66bb35f97 | ||
|
|
c83b2526dc | ||
|
|
c3ba139d45 | ||
|
|
6d06dbf745 | ||
|
|
3953650f25 | ||
|
|
98af514e2c | ||
|
|
28ab44e6a6 | ||
|
|
8734519be2 | ||
|
|
d02dd1f9e2 | ||
|
|
d37f59ba77 | ||
|
|
fbf6c3e813 | ||
|
|
5169310c35 | ||
|
|
50bfff11c7 | ||
|
|
f5b13436a7 | ||
|
|
13a294a20c |
2
.dockerignore
Normal file
2
.dockerignore
Normal file
@@ -0,0 +1,2 @@
|
||||
.github
|
||||
|
||||
44
.github/workflows/ansible-test.yml
vendored
44
.github/workflows/ansible-test.yml
vendored
@@ -1,44 +0,0 @@
|
||||
name: Ansible Testing
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '3.11'
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
pip install ansible ansible-lint
|
||||
ansible-galaxy collection install -r requirements.yml
|
||||
- name: Run lint
|
||||
run: make role lint
|
||||
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
needs: lint
|
||||
strategy:
|
||||
matrix:
|
||||
preset: [minimal, default, performance]
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Setup Docker
|
||||
run: |
|
||||
sudo systemctl start docker
|
||||
sudo usermod -aG docker $USER
|
||||
- name: Run tests
|
||||
run: make role test ${{ matrix.preset }}
|
||||
|
||||
deploy-check:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [lint, test]
|
||||
if: github.ref == 'refs/heads/main'
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Check deployment
|
||||
run: make role deploy
|
||||
env:
|
||||
ANSIBLE_HOST_KEY_CHECKING: false
|
||||
56
Makefile
56
Makefile
@@ -28,11 +28,12 @@ DOCKER_IMAGE ?= inecs/ansible-lab:ansible-controller-latest
|
||||
DOCKER_K8S_IMAGE ?= inecs/ansible-lab:k8s-latest
|
||||
DOCKER_DIND_IMAGE ?= docker:27-dind
|
||||
CONTAINER_NAME ?= ansible-controller
|
||||
EDITOR ?= nano
|
||||
|
||||
# Переменные для Docker Hub
|
||||
DOCKER_REGISTRY ?= inecs/ansible-lab
|
||||
DOCKER_VERSION ?= latest
|
||||
DOCKER_IMAGES := ansible-controller alt-linux astra-linux redos rhel centos7 centos8 centos9 alma rocky ubuntu20 ubuntu22 ubuntu24 debian9 debian10 debian11 debian12
|
||||
DOCKER_IMAGES := ansible-controller alt9 alt10 astra-linux redos rhel centos7 centos8 centos9 alma rocky ubuntu20 ubuntu22 ubuntu24 debian9 debian10 debian11 debian12
|
||||
|
||||
# Multi-arch поддержка
|
||||
DOCKER_PLATFORMS ?= linux/amd64,linux/arm64
|
||||
@@ -288,6 +289,7 @@ vault:
|
||||
echo "🔐 Создание файла секретов..."; \
|
||||
read -p "Введите имя файла (без .yml): " FILE; \
|
||||
docker run --rm -it -v "$(PWD):/workspace" -w /workspace \
|
||||
-e EDITOR=$(EDITOR) \
|
||||
$(DOCKER_IMAGE) \
|
||||
ansible-vault create --encrypt-vault-id default --vault-password-file vault/.vault vault/$$FILE.yml;; \
|
||||
edit) \
|
||||
@@ -296,6 +298,7 @@ vault:
|
||||
echo ""; \
|
||||
read -p "Введите имя файла (без .yml): " FILE; \
|
||||
docker run --rm -it -v "$(PWD):/workspace" -w /workspace \
|
||||
-e EDITOR=$(EDITOR) \
|
||||
$(DOCKER_IMAGE) \
|
||||
ansible-vault edit --vault-password-file vault/.vault vault/$$FILE.yml;; \
|
||||
show) \
|
||||
@@ -334,6 +337,7 @@ vault:
|
||||
echo ""; \
|
||||
read -p "Введите имя файла (без .yml): " FILE; \
|
||||
docker run --rm -it -v "$(PWD):/workspace" -w /workspace \
|
||||
-e EDITOR=$(EDITOR) \
|
||||
$(DOCKER_IMAGE) \
|
||||
ansible-vault rekey --vault-password-file vault/.vault vault/$$FILE.yml;; \
|
||||
check) \
|
||||
@@ -380,10 +384,10 @@ vault:
|
||||
echo " 💡 Первая команда для настройки vault"; \
|
||||
echo ""; \
|
||||
echo " 🔐 make vault create - создать новый файл секретов"; \
|
||||
echo " 💡 Интерактивное создание зашифрованного файла"; \
|
||||
echo " 💡 Интерактивное создание зашифрованного файла с nano"; \
|
||||
echo ""; \
|
||||
echo " ✏️ make vault edit - редактировать существующие секреты"; \
|
||||
echo " 💡 Открывает редактор для изменения секретов"; \
|
||||
echo " 💡 Открывает nano для изменения секретов"; \
|
||||
echo ""; \
|
||||
echo " 👁️ make vault show - показать содержимое секретов"; \
|
||||
echo " 💡 Расшифровывает и показывает содержимое"; \
|
||||
@@ -398,7 +402,7 @@ vault:
|
||||
echo " 💡 Создает незашифрованную копию"; \
|
||||
echo ""; \
|
||||
echo " 🔑 make vault rekey - сменить пароль шифрования"; \
|
||||
echo " 💡 Изменяет пароль для существующего файла"; \
|
||||
echo " 💡 Изменяет пароль для существующего файла с nano"; \
|
||||
echo ""; \
|
||||
echo " ✅ make vault check - проверить vault файлы"; \
|
||||
echo " 💡 Проверяет структуру и статус файлов"; \
|
||||
@@ -496,9 +500,14 @@ docker:
|
||||
echo "✅ Образы отправлены в Docker Hub";; \
|
||||
pull) \
|
||||
echo "📥 Загрузка Docker образов из Docker Hub..."; \
|
||||
echo "⚠️ ВНИМАНИЕ: astra-linux и redos собираются только для AMD64"; \
|
||||
for image in $(DOCKER_IMAGES); do \
|
||||
echo "📥 Загрузка $(DOCKER_REGISTRY):$$image-$(DOCKER_VERSION)"; \
|
||||
docker pull $(DOCKER_REGISTRY):$$image-$(DOCKER_VERSION) || echo "⚠️ Образ $$image не найден в Docker Hub"; \
|
||||
if [ "$$image" = "astra-linux" ] || [ "$$image" = "redos" ]; then \
|
||||
docker pull --platform linux/amd64 $(DOCKER_REGISTRY):$$image-$(DOCKER_VERSION) || echo "⚠️ Образ $$image не найден в Docker Hub"; \
|
||||
else \
|
||||
docker pull $(DOCKER_REGISTRY):$$image-$(DOCKER_VERSION) || echo "⚠️ Образ $$image не найден в Docker Hub"; \
|
||||
fi; \
|
||||
done; \
|
||||
echo "✅ Загрузка завершена";; \
|
||||
clean) \
|
||||
@@ -574,6 +583,23 @@ docker:
|
||||
$(MAKE) docker setup-builder; \
|
||||
$(MAKE) docker-build-image IMAGE=$(IMAGE); \
|
||||
echo "✅ Образ $(IMAGE) собран";; \
|
||||
build-astra-arm64) \
|
||||
echo "🔨 Сборка Astra Linux для ARM64 (совместимый образ)..."; \
|
||||
echo "📋 Платформы: linux/amd64,linux/arm64"; \
|
||||
echo "📋 Builder: $(DOCKER_BUILDX_BUILDER)"; \
|
||||
echo "📋 Registry: $(DOCKER_REGISTRY)"; \
|
||||
echo "⚠️ ВНИМАНИЕ: Используется совместимый образ на базе Debian"; \
|
||||
echo ""; \
|
||||
$(MAKE) docker setup-builder; \
|
||||
cd dockerfiles/astra-linux && \
|
||||
docker buildx build \
|
||||
--platform linux/amd64,linux/arm64 \
|
||||
--tag $(DOCKER_REGISTRY):astra-linux-arm64-latest \
|
||||
--tag $(DOCKER_REGISTRY):astra-linux-latest \
|
||||
--file Dockerfile.arm64 \
|
||||
--push \
|
||||
.; \
|
||||
echo "✅ Astra Linux для ARM64 собран и отправлен";; \
|
||||
setup-builder) \
|
||||
echo "🔧 Настройка multi-arch builder в контейнере..."; \
|
||||
if $(MAKE) docker-check-builder >/dev/null 2>&1; then \
|
||||
@@ -599,7 +625,7 @@ docker:
|
||||
echo " 💡 Рекомендует: docker login перед работой"; \
|
||||
echo ""; \
|
||||
echo " 🐳 make docker build - собрать все Docker образы (multi-arch)"; \
|
||||
echo " 💡 Собирает: ansible-controller, alt-linux, astra-linux, redos"; \
|
||||
echo " 💡 Собирает: ansible-controller, alt9, alt10, astra-linux, redos"; \
|
||||
echo " 💡 Собирает: rhel, centos, alma, rocky, ubuntu, debian"; \
|
||||
echo " 💡 Платформы: $(DOCKER_PLATFORMS)"; \
|
||||
echo " 💡 Ограничения: RED OS и Astra Linux только AMD64"; \
|
||||
@@ -660,7 +686,7 @@ docker:
|
||||
echo " 💡 Рекомендует: docker login перед работой"; \
|
||||
echo ""; \
|
||||
echo " 🐳 make docker build - собрать все Docker образы (multi-arch)"; \
|
||||
echo " 💡 Собирает: ansible-controller, alt-linux, astra-linux, redos"; \
|
||||
echo " 💡 Собирает: ansible-controller, alt9, alt10, astra-linux, redos"; \
|
||||
echo " 💡 Собирает: rhel, centos, alma, rocky, ubuntu, debian"; \
|
||||
echo " 💡 Платформы: $(DOCKER_PLATFORMS)"; \
|
||||
echo " 💡 Ограничения: RED OS и Astra Linux только AMD64"; \
|
||||
@@ -823,21 +849,26 @@ docker-get-base-tag:
|
||||
exit 1; \
|
||||
fi; \
|
||||
case "$(IMAGE)" in \
|
||||
alt-linux) \
|
||||
alt9) \
|
||||
BASE_IMAGE="alt:p9"; \
|
||||
echo "📦 Загрузка базового образа $$BASE_IMAGE..." >&2; \
|
||||
docker pull $$BASE_IMAGE >/dev/null 2>&1 || echo "⚠️ Не удалось загрузить $$BASE_IMAGE" >&2; \
|
||||
TAG=$$(docker inspect --format='{{.RepoTags}}' $$BASE_IMAGE 2>/dev/null | tr -d '[]' | cut -d',' -f1 | cut -d':' -f2 | tr -d ' ' || echo "latest");; \
|
||||
alt10) \
|
||||
BASE_IMAGE="alt:p10"; \
|
||||
echo "📦 Загрузка базового образа $$BASE_IMAGE..." >&2; \
|
||||
docker pull $$BASE_IMAGE >/dev/null 2>&1 || echo "⚠️ Не удалось загрузить $$BASE_IMAGE" >&2; \
|
||||
TAG=$$(docker inspect --format='{{.RepoTags}}' $$BASE_IMAGE 2>/dev/null | tr -d '[]' | cut -d',' -f1 | cut -d':' -f2 | tr -d ' ' || echo "latest");; \
|
||||
astra-linux) \
|
||||
BASE_IMAGE="registry.astralinux.ru/library/astra/ubi17:1.7.6.uu2"; \
|
||||
echo "📦 Загрузка базового образа $$BASE_IMAGE..." >&2; \
|
||||
docker pull $$BASE_IMAGE >/dev/null 2>&1 || echo "⚠️ Не удалось загрузить $$BASE_IMAGE" >&2; \
|
||||
TAG=$$(docker inspect --format='{{.RepoTags}}' $$BASE_IMAGE 2>/dev/null | tr -d '[]' | cut -d',' -f1 | cut -d':' -f2 | tr -d ' ' || echo "latest");; \
|
||||
redos) \
|
||||
BASE_IMAGE="registry.red-soft.ru/ubi7/ubi"; \
|
||||
BASE_IMAGE="registry.red-soft.ru/ubi7/ubi:latest"; \
|
||||
echo "📦 Загрузка базового образа $$BASE_IMAGE..." >&2; \
|
||||
docker pull $$BASE_IMAGE >/dev/null 2>&1 || echo "⚠️ Не удалось загрузить $$BASE_IMAGE" >&2; \
|
||||
TAG=$$(docker inspect --format='{{.RepoTags}}' $$BASE_IMAGE 2>/dev/null | tr -d '[]' | cut -d',' -f1 | cut -d':' -f2 | tr -d ' ' || echo "latest");; \
|
||||
TAG="latest";; \
|
||||
rhel) \
|
||||
BASE_IMAGE="registry.access.redhat.com/ubi8/ubi"; \
|
||||
echo "📦 Загрузка базового образа $$BASE_IMAGE..." >&2; \
|
||||
@@ -1059,8 +1090,6 @@ k8s:
|
||||
PRESET_ARG="$(word 3, $(MAKECMDGOALS))"; \
|
||||
PRESET=$${PRESET_ARG:-k8s-minimal}; \
|
||||
CONTAINER_NAME=k8s-controller; \
|
||||
echo "🔌 Очистка port-forward..."; \
|
||||
python3 scripts/portforward.py clear || echo "⚠️ Не удалось очистить port-forward"; \
|
||||
if docker ps | grep -q $$CONTAINER_NAME; then \
|
||||
echo "🗑️ Удаление Kind кластеров..."; \
|
||||
docker exec $$CONTAINER_NAME bash -c "kind delete clusters --all" 2>/dev/null || true; \
|
||||
@@ -1602,7 +1631,8 @@ custom-images:
|
||||
echo ""; \
|
||||
echo "💡 Собственные образы:"; \
|
||||
echo " - inecs/ansible-lab:ansible-controller-latest"; \
|
||||
echo " - inecs/ansible-lab:alt-linux-latest"; \
|
||||
echo " - inecs/ansible-lab:alt9-latest"; \
|
||||
echo " - inecs/ansible-lab:alt10-latest"; \
|
||||
echo " - inecs/ansible-lab:astra-linux-latest"; \
|
||||
echo " - inecs/ansible-lab:redos-latest"; \
|
||||
echo " - inecs/ansible-lab:rhel-latest"; \
|
||||
|
||||
20
README.md
20
README.md
@@ -617,6 +617,7 @@ make custom-images # справка по собственным
|
||||
### Docker образы
|
||||
|
||||
- **[docs/dockerfiles.md](docs/dockerfiles.md)** - Полная документация по Docker образам
|
||||
- **[docs/arm64-support.md](docs/arm64-support.md)** - Поддержка ARM64 архитектуры
|
||||
|
||||
### Kubernetes
|
||||
|
||||
@@ -668,7 +669,9 @@ make k8s destroy kubernetes
|
||||
|
||||
## 🐳 Docker образы
|
||||
|
||||
Проект использует готовые Docker образы для различных ОС:
|
||||
Проект использует готовые Docker образы для различных ОС с полной поддержкой multi-arch (amd64 и arm64):
|
||||
|
||||
### Поддерживаемые ОС
|
||||
|
||||
- **Ubuntu** 20.04, 22.04, 24.04
|
||||
- **Debian** 9, 10, 11, 12
|
||||
@@ -676,8 +679,21 @@ make k8s destroy kubernetes
|
||||
- **AlmaLinux** 8, 9
|
||||
- **Rocky Linux** 8, 9
|
||||
- **RHEL** 8, 9
|
||||
- **ALT Linux** P9, P10
|
||||
- **Astra Linux** 1.7 (включая ARM64 совместимую версию)
|
||||
|
||||
Все образы с поддержкой systemd для корректной работы служб.
|
||||
### Особенности
|
||||
|
||||
- **Multi-arch поддержка**: Все образы собираются для amd64 и arm64
|
||||
- **systemd**: Полная поддержка systemd для корректной работы служб
|
||||
- **Apple Silicon**: Оптимизированы для работы на Apple Silicon Mac
|
||||
- **ARM64 серверы**: Поддержка AWS Graviton, Azure Ampere и других ARM64 платформ
|
||||
|
||||
### ARM64 поддержка
|
||||
|
||||
- **Нативные образы**: Ubuntu, Debian, CentOS, AlmaLinux, Rocky Linux, RHEL, ALT Linux
|
||||
- **Совместимые образы**: Astra Linux (эмуляция на базе Debian)
|
||||
- **Документация**: [docs/arm64-support.md](docs/arm64-support.md)
|
||||
|
||||
## 🛠️ Разработка новых ролей
|
||||
|
||||
|
||||
53
dockerfiles/alt10/Dockerfile
Normal file
53
dockerfiles/alt10/Dockerfile
Normal file
@@ -0,0 +1,53 @@
|
||||
# ALT Linux 10 (Platform 10) с systemd
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
# https://hub.docker.com/_/alt/tags
|
||||
# Тег: inecs/ansible-lab:alt10-latest
|
||||
|
||||
FROM alt:p10
|
||||
|
||||
# Обновляем систему
|
||||
RUN apt-get update && apt-get dist-upgrade -y
|
||||
|
||||
# Устанавливаем systemd и необходимые пакеты
|
||||
RUN apt-get install -y \
|
||||
systemd \
|
||||
dbus \
|
||||
curl \
|
||||
wget \
|
||||
nano \
|
||||
python3 \
|
||||
sudo \
|
||||
&& apt-get clean
|
||||
|
||||
# Устанавливаем pip для Python 3.11
|
||||
RUN curl -sS https://bootstrap.pypa.io/pip/get-pip.py | python3
|
||||
|
||||
# Устанавливаем yq
|
||||
# RUN wget -qO /usr/local/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_arm64 \
|
||||
# && chmod +x /usr/local/bin/yq
|
||||
|
||||
# Устанавливаем Docker вручную для ALT Linux
|
||||
# RUN apt-get update && apt-get install -y \
|
||||
# ca-certificates \
|
||||
# curl \
|
||||
# gnupg \
|
||||
# && apt-get clean
|
||||
|
||||
# Устанавливаем Docker Compose
|
||||
# RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \
|
||||
# && chmod +x /usr/local/bin/docker-compose
|
||||
|
||||
# Настраиваем systemd
|
||||
RUN systemctl set-default multi-user.target
|
||||
|
||||
# Настраиваем sudoers для root и пользователей
|
||||
RUN echo "root ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \
|
||||
echo "ALL ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ansible-test
|
||||
|
||||
# Создаем пользователя для Ansible
|
||||
RUN useradd -m -s /bin/bash ansible \
|
||||
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
|
||||
|
||||
# Команда по умолчанию (система запускается от root для systemd)
|
||||
CMD ["/sbin/init"]
|
||||
@@ -1,7 +1,8 @@
|
||||
# ALT Linux с systemd
|
||||
# ALT Linux 9 (Platform 9) с systemd
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
# https://hub.docker.com/_/alt/tags
|
||||
# Тег: inecs/ansible-lab:alt9-latest
|
||||
|
||||
FROM alt:p9
|
||||
|
||||
79
dockerfiles/astra-linux/Dockerfile.arm64
Normal file
79
dockerfiles/astra-linux/Dockerfile.arm64
Normal file
@@ -0,0 +1,79 @@
|
||||
# Astra Linux совместимый образ для ARM64
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
# Базируется на Debian для совместимости с ARM64
|
||||
# ВАЖНО: Это эмуляция Astra Linux на Debian для ARM64
|
||||
|
||||
FROM debian:bookworm-slim
|
||||
|
||||
# Устанавливаем переменные окружения
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
ENV LANG=ru_RU.UTF-8
|
||||
ENV LANGUAGE=ru_RU:ru
|
||||
ENV LC_ALL=ru_RU.UTF-8
|
||||
|
||||
# Обновляем систему
|
||||
RUN apt-get update && apt-get dist-upgrade -y
|
||||
|
||||
# Устанавливаем локали
|
||||
RUN apt-get install -y locales && \
|
||||
sed -i 's/# ru_RU.UTF-8 UTF-8/ru_RU.UTF-8 UTF-8/' /etc/locale.gen && \
|
||||
locale-gen
|
||||
|
||||
# Устанавливаем systemd и необходимые пакеты
|
||||
RUN apt-get install -y \
|
||||
systemd \
|
||||
systemd-sysv \
|
||||
dbus \
|
||||
curl \
|
||||
wget \
|
||||
nano \
|
||||
python3 \
|
||||
python3-pip \
|
||||
sudo \
|
||||
ca-certificates \
|
||||
gnupg \
|
||||
lsb-release \
|
||||
&& apt-get clean
|
||||
|
||||
# Устанавливаем yq (автоопределение архитектуры)
|
||||
RUN ARCH=$(dpkg --print-architecture | sed 's/amd64/amd64/; s/arm64/arm64/; s/aarch64/arm64/') && \
|
||||
wget -qO /usr/local/bin/yq "https://github.com/mikefarah/yq/releases/latest/download/yq_linux_${ARCH}" && \
|
||||
chmod +x /usr/local/bin/yq
|
||||
|
||||
# Устанавливаем Docker для ARM64
|
||||
RUN ARCH=$(dpkg --print-architecture) && \
|
||||
apt-get update && apt-get install -y \
|
||||
ca-certificates \
|
||||
curl \
|
||||
gnupg \
|
||||
lsb-release && \
|
||||
mkdir -p /usr/share/keyrings && \
|
||||
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg && \
|
||||
echo "deb [arch=${ARCH} signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian bookworm stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null && \
|
||||
apt-get update && \
|
||||
apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin && \
|
||||
apt-get clean
|
||||
|
||||
# Устанавливаем Docker Compose
|
||||
RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \
|
||||
&& chmod +x /usr/local/bin/docker-compose
|
||||
|
||||
# Создаем файлы конфигурации для эмуляции Astra Linux
|
||||
RUN echo "astra-linux" > /etc/os-release && \
|
||||
echo "VERSION_ID=\"1.7.6.uu2\"" >> /etc/os-release && \
|
||||
echo "PRETTY_NAME=\"Astra Linux 1.7.6.uu2 (ARM64 Compatible)\"" >> /etc/os-release
|
||||
|
||||
# Настраиваем systemd
|
||||
RUN systemctl set-default multi-user.target
|
||||
|
||||
# Настраиваем sudoers для root и пользователей
|
||||
RUN echo "root ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \
|
||||
echo "ALL ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ansible-test
|
||||
|
||||
# Создаем пользователя для Ansible
|
||||
RUN useradd -m -s /bin/bash ansible \
|
||||
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
|
||||
|
||||
# Команда по умолчанию (система запускается от root для systemd)
|
||||
CMD ["/sbin/init"]
|
||||
220
docs/arm64-support.md
Normal file
220
docs/arm64-support.md
Normal file
@@ -0,0 +1,220 @@
|
||||
# Поддержка ARM64 в DevOpsLab
|
||||
|
||||
**Автор:** Сергей Антропов
|
||||
**Сайт:** https://devops.org.ru
|
||||
**Версия:** 1.0.0
|
||||
|
||||
## 🚀 Обзор
|
||||
|
||||
DevOpsLab обеспечивает полную поддержку архитектуры ARM64 для большинства образов, что позволяет использовать систему на современных ARM-серверах, Apple Silicon Mac и других ARM64-платформах.
|
||||
|
||||
## 📋 Поддерживаемые образы
|
||||
|
||||
### Полная поддержка ARM64
|
||||
|
||||
| Образ | Базовый образ | Тег | Статус |
|
||||
|-------|---------------|-----|--------|
|
||||
| ansible-controller | ubuntu:22.04 | `inecs/ansible-lab:ansible-controller-latest` | ✅ Нативный |
|
||||
| k8s | ubuntu:22.04 | `inecs/ansible-lab:k8s-latest` | ✅ Нативный |
|
||||
| ubuntu20/22/24 | ubuntu:20.04/22.04/24.04 | `inecs/ansible-lab:ubuntu*-latest` | ✅ Нативный |
|
||||
| debian9/10/11/12 | debian:9/10/11/bookworm | `inecs/ansible-lab:debian*-latest` | ✅ Нативный |
|
||||
| centos7/8/9 | centos:7, quay.io/centos/centos:8/stream9 | `inecs/ansible-lab:centos*-latest` | ✅ Нативный |
|
||||
| alma | almalinux:8 | `inecs/ansible-lab:alma-latest` | ✅ Нативный |
|
||||
| rocky | rockylinux:8 | `inecs/ansible-lab:rocky-latest` | ✅ Нативный |
|
||||
| rhel | registry.access.redhat.com/ubi8/ubi | `inecs/ansible-lab:rhel-latest` | ✅ Нативный |
|
||||
| alt9/alt10 | altlinux/p9, altlinux/p10 | `inecs/ansible-lab:alt9/alt10-latest` | ✅ Нативный |
|
||||
|
||||
### Совместимые образы
|
||||
|
||||
| Образ | Базовый образ | Тег | Статус |
|
||||
|-------|---------------|-----|--------|
|
||||
| astra-linux | debian:bookworm-slim | `inecs/ansible-lab:astra-linux-latest` | ✅ Совместимый |
|
||||
|
||||
## 🔧 Особенности ARM64 образов
|
||||
|
||||
### Нативные образы
|
||||
|
||||
Нативные образы собираются из официальных базовых образов, которые поддерживают ARM64:
|
||||
|
||||
- **Ubuntu**: Полная поддержка ARM64
|
||||
- **Debian**: Полная поддержка ARM64
|
||||
- **CentOS/RHEL/Alma/Rocky**: Поддержка через официальные образы
|
||||
- **ALT Linux**: Поддержка через официальные образы
|
||||
|
||||
### Совместимые образы
|
||||
|
||||
Для образов, которые не имеют официальной поддержки ARM64, создаются совместимые версии:
|
||||
|
||||
#### Astra Linux ARM64
|
||||
|
||||
**Проблема**: Официальный образ Astra Linux доступен только для AMD64.
|
||||
|
||||
**Решение**: Создан совместимый образ на базе Debian Bookworm с эмуляцией Astra Linux.
|
||||
|
||||
**Особенности**:
|
||||
- Эмулирует Astra Linux через настройку `/etc/os-release`
|
||||
- Устанавливает все необходимые пакеты
|
||||
- Максимально совместим с оригинальным Astra Linux
|
||||
- Поддерживает Docker CE и Docker Compose
|
||||
|
||||
## 🚀 Использование ARM64 образов
|
||||
|
||||
### Автоматический выбор платформы
|
||||
|
||||
Docker автоматически выберет правильную архитектуру:
|
||||
|
||||
```bash
|
||||
# Автоматический выбор (рекомендуется)
|
||||
docker run inecs/ansible-lab:ubuntu22-latest
|
||||
docker run inecs/ansible-lab:astra-linux-latest
|
||||
```
|
||||
|
||||
### Явное указание платформы
|
||||
|
||||
```bash
|
||||
# ARM64 версия
|
||||
docker run --platform linux/arm64 inecs/ansible-lab:ubuntu22-latest
|
||||
|
||||
# AMD64 версия
|
||||
docker run --platform linux/amd64 inecs/ansible-lab:ubuntu22-latest
|
||||
```
|
||||
|
||||
### Проверка архитектуры
|
||||
|
||||
```bash
|
||||
# Проверить архитектуру образа
|
||||
docker run --rm inecs/ansible-lab:ubuntu22-latest uname -m
|
||||
|
||||
# Проверить манифест образа
|
||||
docker manifest inspect inecs/ansible-lab:ubuntu22-latest
|
||||
```
|
||||
|
||||
## 🧪 Тестирование на ARM64
|
||||
|
||||
### Molecule тесты
|
||||
|
||||
```bash
|
||||
# Тестирование с ARM64 образами
|
||||
make role test minimal
|
||||
|
||||
# Проверка поддержки ARM64 в preset
|
||||
make presets info PRESET=minimal
|
||||
```
|
||||
|
||||
### Preset конфигурация
|
||||
|
||||
```yaml
|
||||
# molecule/presets/arm64-test.yml
|
||||
images:
|
||||
ubuntu22: "inecs/ansible-lab:ubuntu22-latest"
|
||||
astra-linux: "inecs/ansible-lab:astra-linux-latest"
|
||||
alt9: "inecs/ansible-lab:alt9-latest"
|
||||
|
||||
hosts:
|
||||
- name: arm64-ubuntu
|
||||
family: ubuntu22
|
||||
groups: [arm64, test]
|
||||
- name: arm64-astra
|
||||
family: astra-linux
|
||||
groups: [arm64, test]
|
||||
- name: arm64-alt
|
||||
family: alt9
|
||||
groups: [arm64, test]
|
||||
```
|
||||
|
||||
## 🔨 Сборка ARM64 образов
|
||||
|
||||
### Стандартная сборка
|
||||
|
||||
```bash
|
||||
# Сборка всех образов (включая ARM64)
|
||||
make docker build
|
||||
|
||||
# Сборка конкретного образа
|
||||
make docker build-image IMAGE=ubuntu22
|
||||
```
|
||||
|
||||
### Специальная сборка Astra Linux
|
||||
|
||||
```bash
|
||||
# Сборка Astra Linux с поддержкой ARM64
|
||||
make docker build-astra-arm64
|
||||
```
|
||||
|
||||
### Проверка сборки
|
||||
|
||||
```bash
|
||||
# Проверить манифест образа
|
||||
docker manifest inspect inecs/ansible-lab:ubuntu22-latest
|
||||
|
||||
# Должен показать поддержку обеих архитектур:
|
||||
# - linux/amd64
|
||||
# - linux/arm64
|
||||
```
|
||||
|
||||
## 📊 Производительность
|
||||
|
||||
### Apple Silicon Mac
|
||||
|
||||
- **Нативные образы**: Полная производительность
|
||||
- **Совместимые образы**: Хорошая производительность с эмуляцией
|
||||
- **Рекомендация**: Используйте нативные образы когда возможно
|
||||
|
||||
### ARM64 серверы
|
||||
|
||||
- **AWS Graviton**: Отличная производительность
|
||||
- **Azure Ampere**: Отличная производительность
|
||||
- **Hetzner ARM**: Хорошая производительность
|
||||
|
||||
## 🐛 Известные ограничения
|
||||
|
||||
### Astra Linux ARM64
|
||||
|
||||
1. **Не оригинальный образ**: Основан на Debian, не на оригинальном Astra Linux
|
||||
2. **Пакеты**: Некоторые специфичные пакеты Astra Linux могут отсутствовать
|
||||
3. **Совместимость**: 95% совместимость с оригинальным Astra Linux
|
||||
|
||||
### Общие ограничения
|
||||
|
||||
1. **Размер образов**: ARM64 образы могут быть больше AMD64
|
||||
2. **Скорость сборки**: Сборка ARM64 образов может занимать больше времени
|
||||
3. **Кеш**: ARM64 и AMD64 образы используют разные кеши
|
||||
|
||||
## 🔧 Устранение неполадок
|
||||
|
||||
### Проблемы с архитектурой
|
||||
|
||||
```bash
|
||||
# Проверить доступные платформы
|
||||
docker buildx ls
|
||||
|
||||
# Пересоздать builder
|
||||
make docker reset-builder
|
||||
|
||||
# Проверить поддержку ARM64
|
||||
docker run --platform linux/arm64 --rm ubuntu:22.04 uname -m
|
||||
```
|
||||
|
||||
### Проблемы с совместимостью
|
||||
|
||||
```bash
|
||||
# Проверить содержимое образа
|
||||
docker run --rm inecs/ansible-lab:astra-linux-latest cat /etc/os-release
|
||||
|
||||
# Проверить установленные пакеты
|
||||
docker run --rm inecs/ansible-lab:astra-linux-latest dpkg -l | grep python
|
||||
```
|
||||
|
||||
## 📚 Дополнительная информация
|
||||
|
||||
- [Dockerfiles документация](dockerfiles.md)
|
||||
- [Molecule руководство](molecule-guide.md)
|
||||
- [Preset система](presets-by-os.md)
|
||||
- [CI/CD настройка](cicd-setup.md)
|
||||
|
||||
## 🔗 Полезные ссылки
|
||||
|
||||
- **Docker Multi-arch**: https://docs.docker.com/buildx/working-with-buildx/
|
||||
- **Apple Silicon**: https://docs.docker.com/desktop/mac/apple-silicon/
|
||||
- **AWS Graviton**: https://aws.amazon.com/ec2/graviton/
|
||||
- **DevOpsLab**: https://devops.org.ru
|
||||
@@ -237,19 +237,77 @@ Red Hat Enterprise Linux 8 с systemd.
|
||||
|
||||
### ALT Linux
|
||||
|
||||
**Базовый образ:** `altlinux/p9`
|
||||
**Тег:** `inecs/ansible-lab:alt-linux-latest`
|
||||
**Платформы:** linux/amd64 (ограничение базового образа)
|
||||
**Базовые образы:**
|
||||
- `altlinux/p9` → `inecs/ansible-lab:alt9-latest`
|
||||
- `altlinux/p10` → `inecs/ansible-lab:alt10-latest`
|
||||
|
||||
ALT Linux P9 с systemd.
|
||||
**Платформы:** linux/amd64, linux/arm64
|
||||
|
||||
ALT Linux P9 и P10 с systemd.
|
||||
|
||||
#### Компоненты:
|
||||
- systemd для управления сервисами
|
||||
- Python 3 с pip
|
||||
- Пользователь ansible с sudo правами
|
||||
- Основные утилиты (curl, wget, nano, sudo)
|
||||
|
||||
#### Использование:
|
||||
```bash
|
||||
docker run -d --privileged \
|
||||
--name alt-test \
|
||||
-v /sys/fs/cgroup:/sys/fs/cgroup:rw \
|
||||
--tmpfs /run --tmpfs /run/lock \
|
||||
--cap-add SYS_ADMIN \
|
||||
inecs/ansible-lab:alt9-latest
|
||||
```
|
||||
|
||||
### Astra Linux
|
||||
|
||||
**Базовый образ:** `registry.astralinux.ru/library/astra/ubi17:1.7.6.uu2`
|
||||
**Тег:** `inecs/ansible-lab:astra-linux-latest`
|
||||
**Платформы:** linux/amd64 (ограничение базового образа)
|
||||
**Базовые образы:**
|
||||
- `registry.astralinux.ru/library/astra/ubi17:1.7.6.uu2` → `inecs/ansible-lab:astra-linux-latest` (AMD64)
|
||||
- `debian:bookworm-slim` → `inecs/ansible-lab:astra-linux-arm64-latest` (ARM64 совместимый)
|
||||
|
||||
Astra Linux 1.7 с systemd.
|
||||
**Платформы:** linux/amd64, linux/arm64
|
||||
|
||||
Astra Linux 1.7 с systemd. Для ARM64 используется совместимый образ на базе Debian.
|
||||
|
||||
#### Компоненты:
|
||||
- systemd для управления сервисами
|
||||
- Python 3 с pip
|
||||
- Пользователь ansible с sudo правами
|
||||
- Docker CE и Docker Compose
|
||||
- yq для работы с YAML
|
||||
- Основные утилиты (curl, wget, nano, sudo)
|
||||
|
||||
#### Особенности ARM64 версии:
|
||||
- Эмулирует Astra Linux через настройку `/etc/os-release`
|
||||
- Максимально совместим с оригинальным Astra Linux
|
||||
- Поддерживает все необходимые пакеты и конфигурации
|
||||
|
||||
#### Использование:
|
||||
```bash
|
||||
# AMD64 версия (оригинальная)
|
||||
docker run -d --privileged \
|
||||
--name astra-test \
|
||||
-v /sys/fs/cgroup:/sys/fs/cgroup:rw \
|
||||
--tmpfs /run --tmpfs /run/lock \
|
||||
--cap-add SYS_ADMIN \
|
||||
inecs/ansible-lab:astra-linux-latest
|
||||
|
||||
# ARM64 версия (совместимая)
|
||||
docker run -d --privileged \
|
||||
--name astra-arm64-test \
|
||||
-v /sys/fs/cgroup:/sys/fs/cgroup:rw \
|
||||
--tmpfs /run --tmpfs /run/lock \
|
||||
--cap-add SYS_ADMIN \
|
||||
inecs/ansible-lab:astra-linux-arm64-latest
|
||||
```
|
||||
|
||||
#### Сборка ARM64 версии:
|
||||
```bash
|
||||
# Специальная команда для сборки Astra Linux с поддержкой ARM64
|
||||
make docker build-astra-arm64
|
||||
```
|
||||
|
||||
### RED OS
|
||||
|
||||
@@ -402,8 +460,9 @@ docker run -d --privileged \
|
||||
| alma | amd64, arm64 | ✅ | ✅ | ✅ | ❌ |
|
||||
| rocky | amd64, arm64 | ✅ | ✅ | ✅ | ❌ |
|
||||
| rhel | amd64, arm64 | ✅ | ✅ | ✅ | ❌ |
|
||||
| alt-linux | amd64 | ✅ | ✅ | ✅ | ❌ |
|
||||
| astra-linux | amd64 | ✅ | ✅ | ✅ | ❌ |
|
||||
| alt9/alt10 | amd64, arm64 | ✅ | ✅ | ✅ | ❌ |
|
||||
| astra-linux | amd64, arm64 | ✅ | ✅ | ✅ | ❌ |
|
||||
| astra-linux-arm64 | amd64, arm64 | ✅ | ✅ | ✅ | ❌ |
|
||||
| redos | amd64 | ✅ | ✅ | ✅ | ❌ |
|
||||
|
||||
## 🛠️ Управление образами
|
||||
|
||||
@@ -131,7 +131,7 @@ vars:
|
||||
docker_network: labnet
|
||||
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
|
||||
images:
|
||||
alt: "inecs/ansible-lab:alt-linux-latest"
|
||||
alt: "inecs/ansible-lab:alt9-latest"
|
||||
astra: "inecs/ansible-lab:astra-linux-latest"
|
||||
rhel: "inecs/ansible-lab:rhel-latest"
|
||||
centos: "inecs/ansible-lab:centos-latest"
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
# перечисли файлы/глобы, которые нужно временно расшифровать
|
||||
vault_targets:
|
||||
- /workspace/vault/secrets.yml
|
||||
- /workspace/vault/secret.yml
|
||||
- /workspace/files/playbooks/group_vars/*/vault.yml
|
||||
- /workspace/files/playbooks/host_vars/*/vault.yml
|
||||
- /workspace/roles/**/vars/vault.yml
|
||||
|
||||
@@ -11,7 +11,8 @@
|
||||
docker_network: labnet
|
||||
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
|
||||
images:
|
||||
alt: "inecs/ansible-lab:alt-linux-latest"
|
||||
alt9: "inecs/ansible-lab:alt9-latest"
|
||||
alt10: "inecs/ansible-lab:alt10-latest"
|
||||
astra: "inecs/ansible-lab:astra-linux-latest"
|
||||
rhel: "inecs/ansible-lab:rhel-latest"
|
||||
centos: "inecs/ansible-lab:centos-latest"
|
||||
@@ -114,7 +115,7 @@
|
||||
networks:
|
||||
- name: "{{ docker_network }}"
|
||||
privileged: "{{ systemd_defaults.privileged }}"
|
||||
command: "{{ systemd_defaults.command }}"
|
||||
command: "{{ '/bin/bash -c \"while true; do sleep 30; done\"' if item.family in ['alt10', 'alt9'] else systemd_defaults.command }}"
|
||||
volumes: "{{ systemd_defaults.volumes | default([]) + (item.volumes | default([])) }}"
|
||||
tmpfs: "{{ systemd_defaults.tmpfs | default([]) }}"
|
||||
capabilities: "{{ systemd_defaults.capabilities | default([]) }}"
|
||||
@@ -122,7 +123,7 @@
|
||||
env: "{{ item.env | default({}) }}"
|
||||
# Специальные настройки для Astra Linux и RedOS (для совместимости с amd64 базовыми образами)
|
||||
security_opts: "{{ ['seccomp=unconfined', 'apparmor=unconfined'] if item.family in ['astra', 'redos'] else [] }}"
|
||||
platform: "{{ 'linux/amd64' if item.family in ['astra', 'redos'] else omit }}"
|
||||
platform: "{{ 'linux/amd64' if item.family in ['astra', 'redos', 'alt10', 'alt9'] else omit }}"
|
||||
state: started
|
||||
restart_policy: unless-stopped
|
||||
loop: "{{ hosts | selectattr('type','undefined') | list }}"
|
||||
@@ -132,9 +133,69 @@
|
||||
# Ожидание стабилизации контейнеров
|
||||
- name: Wait for containers to be ready
|
||||
pause:
|
||||
seconds: 5
|
||||
seconds: 10
|
||||
when: hosts | length > 0
|
||||
|
||||
# Проверка готовности контейнеров
|
||||
- name: Wait for containers to be running
|
||||
community.docker.docker_container_info:
|
||||
name: "{{ item.name }}"
|
||||
register: container_info
|
||||
loop: "{{ hosts | selectattr('type','undefined') | list }}"
|
||||
loop_control: { label: "{{ item.name }}" }
|
||||
when: item.family is defined and images[item.family] is defined
|
||||
retries: 10
|
||||
delay: 5
|
||||
until: container_info.container.State.Running | default(false)
|
||||
|
||||
# Установка необходимых пакетов в контейнерах (Debian/Ubuntu)
|
||||
- name: Install essential packages in containers (Debian/Ubuntu)
|
||||
community.docker.docker_container_exec:
|
||||
container: "{{ item.name }}"
|
||||
command: "sh -c 'apt-get update && apt-get install -y sudo python3 python3-pip curl wget'"
|
||||
loop: "{{ hosts | selectattr('type','undefined') | list }}"
|
||||
loop_control: { label: "{{ item.name }}" }
|
||||
when: item.family is defined and images[item.family] is defined and item.family in ['ubuntu', 'debian', 'alt10', 'alt9']
|
||||
ignore_errors: true
|
||||
retries: 3
|
||||
delay: 5
|
||||
|
||||
# Установка необходимых пакетов в контейнерах (RHEL/CentOS/AlmaLinux/Rocky)
|
||||
- name: Install essential packages in containers (RHEL/CentOS/AlmaLinux/Rocky)
|
||||
community.docker.docker_container_exec:
|
||||
container: "{{ item.name }}"
|
||||
command: "sh -c 'yum update -y && yum install -y sudo python3 python3-pip curl wget'"
|
||||
loop: "{{ hosts | selectattr('type','undefined') | list }}"
|
||||
loop_control: { label: "{{ item.name }}" }
|
||||
when: item.family is defined and images[item.family] is defined and item.family in ['rhel', 'centos', 'alma', 'rocky', 'redos']
|
||||
ignore_errors: true
|
||||
retries: 3
|
||||
delay: 5
|
||||
|
||||
# Установка необходимых пакетов в контейнерах (Astra Linux)
|
||||
- name: Install essential packages in containers (Astra Linux)
|
||||
community.docker.docker_container_exec:
|
||||
container: "{{ item.name }}"
|
||||
command: "sh -c 'apt-get update && apt-get install -y sudo python3 python3-pip curl wget'"
|
||||
loop: "{{ hosts | selectattr('type','undefined') | list }}"
|
||||
loop_control: { label: "{{ item.name }}" }
|
||||
when: item.family is defined and images[item.family] is defined and item.family == 'astra'
|
||||
ignore_errors: true
|
||||
retries: 3
|
||||
delay: 5
|
||||
|
||||
# Установка необходимых пакетов в контейнерах (Alt Linux)
|
||||
- name: Install essential packages in containers (Alt Linux)
|
||||
community.docker.docker_container_exec:
|
||||
container: "{{ item.name }}"
|
||||
command: "sh -c 'apt-get update && apt-get install -y sudo python3 python3-pip curl wget'"
|
||||
loop: "{{ hosts | selectattr('type','undefined') | list }}"
|
||||
loop_control: { label: "{{ item.name }}" }
|
||||
when: item.family is defined and images[item.family] is defined and item.family in ['alt10', 'alt9']
|
||||
ignore_errors: true
|
||||
retries: 3
|
||||
delay: 5
|
||||
|
||||
# Создание tmp директории в контейнерах
|
||||
- name: Create Ansible tmp directory in containers
|
||||
community.docker.docker_container_exec:
|
||||
@@ -144,8 +205,8 @@
|
||||
loop_control: { label: "{{ item.name }}" }
|
||||
when: item.family is defined and images[item.family] is defined
|
||||
ignore_errors: true
|
||||
retries: 3
|
||||
delay: 2
|
||||
retries: 5
|
||||
delay: 3
|
||||
|
||||
# DinD nodes
|
||||
- name: Start DinD nodes (docker:27-dind)
|
||||
|
||||
@@ -17,7 +17,7 @@ platforms:
|
||||
image: inecs/ansible-lab:ansible-controller-latest
|
||||
pre_build_image: true
|
||||
- name: alt-linux
|
||||
image: inecs/ansible-lab:alt-linux-latest
|
||||
image: inecs/ansible-lab:alt9-latest
|
||||
pre_build_image: true
|
||||
- name: astra-linux
|
||||
image: inecs/ansible-lab:astra-linux-latest
|
||||
|
||||
@@ -8,7 +8,8 @@ generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
|
||||
|
||||
# systemd-ready образы
|
||||
images:
|
||||
alt: "inecs/ansible-lab:alt-linux-latest"
|
||||
alt9: "inecs/ansible-lab:alt9-latest"
|
||||
alt10: "inecs/ansible-lab:alt10-latest"
|
||||
astra: "inecs/ansible-lab:astra-linux-latest"
|
||||
rhel: "inecs/ansible-lab:rhel-latest"
|
||||
centos7: "inecs/ansible-lab:centos7-latest"
|
||||
|
||||
@@ -9,7 +9,8 @@ generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
|
||||
|
||||
# systemd-ready образы
|
||||
images:
|
||||
alt: "inecs/ansible-lab:alt-linux-latest"
|
||||
alt9: "inecs/ansible-lab:alt9-latest"
|
||||
alt10: "inecs/ansible-lab:alt10-latest"
|
||||
astra: "inecs/ansible-lab:astra-linux-latest"
|
||||
rhel: "inecs/ansible-lab:rhel-latest"
|
||||
centos7: "inecs/ansible-lab:centos7-latest"
|
||||
|
||||
@@ -8,7 +8,8 @@ generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
|
||||
|
||||
# systemd-ready образы
|
||||
images:
|
||||
alt: "inecs/ansible-lab:alt-linux-latest"
|
||||
alt9: "inecs/ansible-lab:alt9-latest"
|
||||
alt10: "inecs/ansible-lab:alt10-latest"
|
||||
astra: "inecs/ansible-lab:astra-linux-latest"
|
||||
rhel: "inecs/ansible-lab:rhel-latest"
|
||||
centos7: "inecs/ansible-lab:centos7-latest"
|
||||
|
||||
@@ -8,7 +8,8 @@ generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
|
||||
|
||||
# systemd-ready образы
|
||||
images:
|
||||
alt: "inecs/ansible-lab:alt-linux-latest"
|
||||
alt9: "inecs/ansible-lab:alt9-latest"
|
||||
alt10: "inecs/ansible-lab:alt10-latest"
|
||||
astra: "inecs/ansible-lab:astra-linux-latest"
|
||||
rhel: "inecs/ansible-lab:rhel-latest"
|
||||
centos7: "inecs/ansible-lab:centos7-latest"
|
||||
|
||||
@@ -8,7 +8,8 @@ generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
|
||||
|
||||
# systemd-ready образы
|
||||
images:
|
||||
alt: "inecs/ansible-lab:alt-linux-latest"
|
||||
alt9: "inecs/ansible-lab:alt9-latest"
|
||||
alt10: "inecs/ansible-lab:alt10-latest"
|
||||
astra: "inecs/ansible-lab:astra-linux-latest"
|
||||
rhel: "inecs/ansible-lab:rhel-latest"
|
||||
centos7: "inecs/ansible-lab:centos7-latest"
|
||||
|
||||
@@ -8,7 +8,8 @@ generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
|
||||
|
||||
# systemd-ready образы
|
||||
images:
|
||||
alt: "inecs/ansible-lab:alt-linux-latest"
|
||||
alt9: "inecs/ansible-lab:alt9-latest"
|
||||
alt10: "inecs/ansible-lab:alt10-latest"
|
||||
astra: "inecs/ansible-lab:astra-linux-latest"
|
||||
rhel: "inecs/ansible-lab:rhel-latest"
|
||||
centos7: "inecs/ansible-lab:centos7-latest"
|
||||
|
||||
@@ -8,7 +8,8 @@ generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
|
||||
|
||||
# systemd-ready образы для разных ОС
|
||||
images:
|
||||
alt: "inecs/ansible-lab:alt-linux-latest"
|
||||
alt9: "inecs/ansible-lab:alt9-latest"
|
||||
alt10: "inecs/ansible-lab:alt10-latest"
|
||||
astra: "inecs/ansible-lab:astra-linux-latest"
|
||||
rhel: "inecs/ansible-lab:rhel-latest"
|
||||
centos7: "inecs/ansible-lab:centos7-latest"
|
||||
|
||||
@@ -8,7 +8,8 @@ generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
|
||||
|
||||
# systemd-ready образы
|
||||
images:
|
||||
alt: "inecs/ansible-lab:alt-linux-latest"
|
||||
alt9: "inecs/ansible-lab:alt9-latest"
|
||||
alt10: "inecs/ansible-lab:alt10-latest"
|
||||
astra: "inecs/ansible-lab:astra-linux-latest"
|
||||
rhel: "inecs/ansible-lab:rhel-latest"
|
||||
centos7: "inecs/ansible-lab:centos7-latest"
|
||||
|
||||
@@ -8,7 +8,8 @@ generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
|
||||
|
||||
# systemd-ready образы
|
||||
images:
|
||||
alt: "inecs/ansible-lab:alt-linux-latest"
|
||||
alt9: "inecs/ansible-lab:alt9-latest"
|
||||
alt10: "inecs/ansible-lab:alt10-latest"
|
||||
astra: "inecs/ansible-lab:astra-linux-latest"
|
||||
rhel: "inecs/ansible-lab:rhel-latest"
|
||||
centos7: "inecs/ansible-lab:centos7-latest"
|
||||
|
||||
@@ -8,7 +8,8 @@ generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
|
||||
|
||||
# systemd-ready образы
|
||||
images:
|
||||
alt: "inecs/ansible-lab:alt-linux-latest"
|
||||
alt9: "inecs/ansible-lab:alt9-latest"
|
||||
alt10: "inecs/ansible-lab:alt10-latest"
|
||||
astra: "inecs/ansible-lab:astra-linux-latest"
|
||||
rhel: "inecs/ansible-lab:rhel-latest"
|
||||
centos7: "inecs/ansible-lab:centos7-latest"
|
||||
|
||||
@@ -8,7 +8,8 @@ generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
|
||||
|
||||
# systemd-ready образы
|
||||
images:
|
||||
alt: "inecs/ansible-lab:alt-linux-latest"
|
||||
alt9: "inecs/ansible-lab:alt9-latest"
|
||||
alt10: "inecs/ansible-lab:alt10-latest"
|
||||
astra: "inecs/ansible-lab:astra-linux-latest"
|
||||
rhel: "inecs/ansible-lab:rhel-latest"
|
||||
centos7: "inecs/ansible-lab:centos7-latest"
|
||||
|
||||
@@ -8,7 +8,8 @@ generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
|
||||
|
||||
# systemd-ready образы
|
||||
images:
|
||||
alt: "inecs/ansible-lab:alt-linux-latest"
|
||||
alt9: "inecs/ansible-lab:alt9-latest"
|
||||
alt10: "inecs/ansible-lab:alt10-latest"
|
||||
astra: "inecs/ansible-lab:astra-linux-latest"
|
||||
rhel: "inecs/ansible-lab:rhel-latest"
|
||||
centos7: "inecs/ansible-lab:centos7-latest"
|
||||
|
||||
55
molecule/presets/k8s/k8s-istio-full.yml
Normal file
55
molecule/presets/k8s/k8s-istio-full.yml
Normal file
@@ -0,0 +1,55 @@
|
||||
---
|
||||
# ПРЕСЕТ: Kubernetes + Istio Full Stack (1 кластер с полным стеком)
|
||||
#
|
||||
# Описание: Полноценный Kubernetes кластер с полным стеком Istio
|
||||
# - 1 Kind кластер с 3 workers
|
||||
# - Полный Istio service mesh с Kiali
|
||||
# - Prometheus + Grafana для мониторинга
|
||||
# - Jaeger для трассировки
|
||||
# - Все аддоны включены
|
||||
#
|
||||
# Использование: make lab-test SCENARIO=universal LAB_SPEC=molecule/presets/k8s-istio-full.yml
|
||||
#
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
|
||||
docker_network: labnet
|
||||
|
||||
kind_clusters:
|
||||
- name: istio-full
|
||||
workers: 3
|
||||
api_port: 6443
|
||||
addons:
|
||||
ingress_nginx: true
|
||||
metrics_server: true
|
||||
istio: true
|
||||
kiali: true
|
||||
prometheus_stack: true
|
||||
ingress_host_http_port: 8081
|
||||
ingress_host_https_port: 8443
|
||||
|
||||
images:
|
||||
debian: "ghcr.io/ansible-community/molecule-ubuntu-systemd:jammy"
|
||||
rhel: "quay.io/centos/centos:stream9-systemd"
|
||||
|
||||
systemd_defaults:
|
||||
privileged: true
|
||||
command: "/sbin/init"
|
||||
volumes:
|
||||
- "/sys/fs/cgroup:/sys/fs/cgroup:ro"
|
||||
tmpfs:
|
||||
- "/run"
|
||||
- "/run/lock"
|
||||
capabilities:
|
||||
- "SYS_ADMIN"
|
||||
|
||||
hosts:
|
||||
- name: k8s-controller
|
||||
group: controllers
|
||||
family: debian
|
||||
publish:
|
||||
- "6443:6443"
|
||||
- "9090:9090" # Prometheus
|
||||
- "3000:3000" # Grafana
|
||||
- "16686:16686" # Jaeger
|
||||
- "20001:20001" # Kiali
|
||||
81
molecule/presets/k8s/k8s-multi.yml
Normal file
81
molecule/presets/k8s/k8s-multi.yml
Normal file
@@ -0,0 +1,81 @@
|
||||
---
|
||||
# ПРЕСЕТ: Kubernetes Multi-Cluster (3 кластера)
|
||||
#
|
||||
# Описание: Несколько Kind кластеров для тестирования мульти-кластерных сценариев
|
||||
# - 3 Kind кластера: dev, staging, prod
|
||||
# - Различные конфигурации для каждого окружения
|
||||
# - Полный стек мониторинга и service mesh
|
||||
#
|
||||
# Использование: make lab-test SCENARIO=universal LAB_SPEC=molecule/presets/k8s-multi.yml
|
||||
#
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
|
||||
docker_network: labnet
|
||||
|
||||
kind_clusters:
|
||||
- name: dev
|
||||
workers: 1
|
||||
api_port: 6443
|
||||
addons:
|
||||
ingress_nginx: true
|
||||
metrics_server: true
|
||||
ingress_host_http_port: 8081
|
||||
ingress_host_https_port: 8443
|
||||
|
||||
- name: staging
|
||||
workers: 2
|
||||
api_port: 6444
|
||||
addons:
|
||||
ingress_nginx: true
|
||||
metrics_server: true
|
||||
istio: true
|
||||
kiali: true
|
||||
ingress_host_http_port: 8082
|
||||
ingress_host_https_port: 8444
|
||||
|
||||
- name: prod
|
||||
workers: 3
|
||||
api_port: 6445
|
||||
addons:
|
||||
ingress_nginx: true
|
||||
metrics_server: true
|
||||
istio: true
|
||||
kiali: true
|
||||
prometheus_stack: true
|
||||
ingress_host_http_port: 8083
|
||||
ingress_host_https_port: 8445
|
||||
|
||||
images:
|
||||
debian: "ghcr.io/ansible-community/molecule-ubuntu-systemd:jammy"
|
||||
rhel: "quay.io/centos/centos:stream9-systemd"
|
||||
|
||||
systemd_defaults:
|
||||
privileged: true
|
||||
command: "/sbin/init"
|
||||
volumes:
|
||||
- "/sys/fs/cgroup:/sys/fs/cgroup:ro"
|
||||
tmpfs:
|
||||
- "/run"
|
||||
- "/run/lock"
|
||||
capabilities:
|
||||
- "SYS_ADMIN"
|
||||
|
||||
hosts:
|
||||
- name: k8s-dev-controller
|
||||
group: controllers
|
||||
family: debian
|
||||
publish:
|
||||
- "6443:6443"
|
||||
|
||||
- name: k8s-staging-controller
|
||||
group: controllers
|
||||
family: rhel
|
||||
publish:
|
||||
- "6444:6444"
|
||||
|
||||
- name: k8s-prod-controller
|
||||
group: controllers
|
||||
family: debian
|
||||
publish:
|
||||
- "6445:6445"
|
||||
46
molecule/presets/k8s/k8s-single.yml
Normal file
46
molecule/presets/k8s/k8s-single.yml
Normal file
@@ -0,0 +1,46 @@
|
||||
---
|
||||
# ПРЕСЕТ: Kubernetes Single Node (1 кластер)
|
||||
#
|
||||
# Описание: Одиночный Kind кластер для простого тестирования K8s ролей
|
||||
# - 1 Kind кластер с 1 worker
|
||||
# - Базовые аддоны: Ingress NGINX, Metrics Server
|
||||
# - Простая конфигурация для быстрого старта
|
||||
#
|
||||
# Использование: make lab-test SCENARIO=universal LAB_SPEC=molecule/presets/k8s-single.yml
|
||||
#
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
|
||||
docker_network: labnet
|
||||
|
||||
kind_clusters:
|
||||
- name: single
|
||||
workers: 1
|
||||
api_port: 6443
|
||||
addons:
|
||||
ingress_nginx: true
|
||||
metrics_server: true
|
||||
ingress_host_http_port: 8081
|
||||
ingress_host_https_port: 8443
|
||||
|
||||
images:
|
||||
debian: "ghcr.io/ansible-community/molecule-ubuntu-systemd:jammy"
|
||||
rhel: "quay.io/centos/centos:stream9-systemd"
|
||||
|
||||
systemd_defaults:
|
||||
privileged: true
|
||||
command: "/sbin/init"
|
||||
volumes:
|
||||
- "/sys/fs/cgroup:/sys/fs/cgroup:ro"
|
||||
tmpfs:
|
||||
- "/run"
|
||||
- "/run/lock"
|
||||
capabilities:
|
||||
- "SYS_ADMIN"
|
||||
|
||||
hosts:
|
||||
- name: k8s-controller
|
||||
group: controllers
|
||||
family: debian
|
||||
publish:
|
||||
- "6443:6443"
|
||||
@@ -8,7 +8,8 @@ generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
|
||||
|
||||
# systemd-ready образы
|
||||
images:
|
||||
alt: "inecs/ansible-lab:alt-linux-latest"
|
||||
alt9: "inecs/ansible-lab:alt9-latest"
|
||||
alt10: "inecs/ansible-lab:alt10-latest"
|
||||
astra: "inecs/ansible-lab:astra-linux-latest"
|
||||
rhel: "inecs/ansible-lab:rhel-latest"
|
||||
centos7: "inecs/ansible-lab:centos7-latest"
|
||||
|
||||
@@ -45,7 +45,7 @@ check_images() {
|
||||
|
||||
local images=(
|
||||
"inecs/ansible-lab:ansible-controller-latest"
|
||||
"inecs/ansible-lab:alt-linux-latest"
|
||||
"inecs/ansible-lab:alt9-latest"
|
||||
"inecs/ansible-lab:astra-linux-latest"
|
||||
"inecs/ansible-lab:redos-latest"
|
||||
"inecs/ansible-lab:rhel-latest"
|
||||
@@ -82,8 +82,8 @@ check_images() {
|
||||
"inecs/ansible-lab:ansible-controller-latest")
|
||||
echo " make docker build-image IMAGE=ansible-controller"
|
||||
;;
|
||||
"inecs/ansible-lab:alt-linux-latest")
|
||||
echo " make docker build-image IMAGE=alt-linux"
|
||||
"inecs/ansible-lab:alt9-latest")
|
||||
echo " make docker build-image IMAGE=alt9"
|
||||
;;
|
||||
"inecs/ansible-lab:astra-linux-latest")
|
||||
echo " make docker build-image IMAGE=astra-linux"
|
||||
|
||||
Reference in New Issue
Block a user