Azure - andyceo/documentation GitHub Wiki
Создайте аккаунт. У вас должна быть подписка.
Затем, можно установить пакет для Python для работы с облаком Azure: pip install azure==2.0.0rc5
. Для успешной работы Ansible нужна именно эта версия.
Затем установим набор модулей azure для Ansible: pip install ansible[azure]
Затем, нужно создать AD-приложение (Azure Active Directory Application) и предоставить ему полный доступ на подписку. Ansible будет работать с облаком через это приложение. Подробная инструкция находится тут: Use portal to create an Azure Active Directory application and service principal that can access resources. Сделать это можно из веб-портала Azure. Это приложение так же иногда называется Service principal.
Затем, нужно создать в домашней папке пользователя, из-под которого ведется работа, папку: mkdir ~/.azure/
. В эту папку нужно положить файл touch ~/.azure/credentials
, который будет содержать параметры доступа к ранее созданному AD-приложению:
#[default]
#subscription_id=12345678-1234-1234-1234-123456789012
#client_id=12345678-1234-1234-1234-123456789012
#secret=secret12345678secret
#tenant=12345678-1234-1234-1234-123456789012
После этого, в ваш Asnible надо залить файлик для динамического Inventory. Например такой.
После этого в Ansible создаем тестовый плейбук: touch azure_test.yml
:
- name: Test Azure Soundchain inventory
hosts: azure
connection: local
gather_facts: no
tasks:
- debug: msg="{{ inventory_hostname }} has powerstate {{ powerstate }}"
tags:
- azure_test
И можно запустить: ansible-playbook -i inventory/azure_rm.py azure_soundchain.yml
Дополнительную информацию по работе с Azure в Ansible можно посмотреть на странице документации Ansible Getting Started with Azure и странице документации Azure Установка и настройка Ansible для управления виртуальными машинами в Azure (также будет полезно пролистать дальнейшие инструкции в этом разделе документации).
Установка описана здесь: Install Azure CLI 2.0
Поставим через Docker: sudo docker run --rm -ti -v azure:/root azuresdk/azure-cli-python:2.0.18 az --version
. Версия 2.0.18 - последняя стабильная на момент написания этого документа (2017-09-24).
Обратите внимание, что Azure CLI пишет файлы в именованный том Docker azure
. Нужно периодически создавать резервные копии этого тома.
Для упрощения работы, можно добавить алиас для вышеуказанной команды, в файл ~/.bash_aliases
:
alias az='sudo docker run --rm -ti -v azure:/root azuresdk/azure-cli-python:2.0.18 az'
После этого, можно будет использовать Azure CLI так: az --version
. Далее будем использовать именно короткую запись.
Примечание: т.к. мы удаляем контейнер каждый раз (опция --rm
), то запустив однажды очистку томов Docker sudo docker volume prune
, наш том azure
удалится. Поэтому сделаем контейнер-хранилище для него:
sudo docker run -ti --name az_cli_storage -v azure:/root azuresdk/azure-cli-python:2.0.18 az --version
Теперь нужно залогиниться, либо под вашим пользователем, либо под service principal. Под пользователем: az login
и следовать инструкциям, которые распечатала команда.
Если вы уже создали Service Principal, то давайте залогинимся используя его. Для этого, нам сначала нужно залогиниться как пользователь, чтобы иметь возможность выполнять команды: az login
Получим список всех AD-приложений: az ad app list
Получим информацию об интересующем нас приложении по его id: az ad sp show --id 12345678-1234-1234-1234-1234567890123
Залогинимся под Service Principal: az login --service-principal -u 12345678-1234-1234-1234-1234567890123 --password {password} --tenant {tenant}
Создадим группу ресурсов (логическая группа, в которой выполняется развертывание и администрирование ресурсов Azure):
az group create --name DockerSwarmResourceGroup --location westeurope
Создаем кластер:
az acs create --name DockerSwarmCluster --orchestrator-type Swarm --resource-group DockerSwarmResourceGroup --generate-ssh-keys
В последующих инструкциях нужно будет заменить IPAddress на IP-адрес мастер-ноды Docker Swarm (в названии адреса будет swarm-master-ip
).
Получим необходимые IP-адреса:
az network public-ip list --resource-group DockerSwarmResourceGroup --query "[*].{Name:name,IPAddress:ipAddress}" -o table
Первый IP это адрес мастер-ноды, на которой будет установлен docker, а второй - это адрес пула (ingress-сети), на который мы будем слать запросы из внешнего мира.
Поднимем SSH-туннель к мастер-ноде кластера:
ssh -p 2200 -i /var/lib/docker/volumes/azure/_data/.ssh/id_rsa -fNL 2375:localhost:2375 azureuser@IPAddress
Пропишем переменную окружения DOCKER_HOST, которая будет направлять наши docker-команды на Azure Docker Swarm Cluster, вместо локального демона docker:
export DOCKER_HOST=:2375
Теперь можно разворачивать в Azure Docker Swarm Cluster свои приложения, используя docker-compose.yml
-файлы или просто docker
в командной строке. Обратите внимание, что для того чтобы эта переменная работала, нужно обязательно запускать docker
без sudo
. Тогда можно будет сочетать работу с локальным docker
(используя sudo
) и Azure Docker Swarm Cluster (без sudo
).
Удалим кластер:
az group delete --name DockerSwarmResourceGroup --no-wait
Развернем такой же кластер, как и выше, чтобы свободно экспериментировать с ним. Ключи ssh будем использовать от ранее созданного кластера.
az group create --name DockerSwarmTestNetResourceGroup --location eastus
az acs create --name DockerSwarmTestNetCluster --orchestrator-type Swarm --resource-group DockerSwarmTestNetResourceGroup
Посмотрим список всех кластеров:
az acs list --output table
Получим список всех кластеров внутри группы ресурсов DockerSwarmTestNetResourceGroup
az acs list -g DockerSwarmTestNetResourceGroup --output table
Отображение сведений о кластере DockerSwarmTestNetCluster
службы контейнеров внутри группы DockerSwarmTestNetResourceGroup
:
az acs show -g DockerSwarmTestNetResourceGroup -n DockerSwarmTestNetCluster --output list
Масштабирование кластера (увеличим количество агентов):
az acs scale -g DockerSwarmTestNetResourceGroup -n DockerSwarmTestNetCluster --new-agent-count 4
Посмотрим FQDN имена мастер-ноды кластера:
az acs list -g DockerSwarmTestNetResourceGroup --query '[*].{Master:masterProfile.fqdn,Agent:agentPoolProfiles[0].fqdn}' -o table
Создадим SSH-туннель к главному узлу кластера (замените MasterFQDN
на то что вам выдала предыдущая команда) (подробнее можно посмотреть на странице Создание удаленного подключения к кластеру Kubernetes, DC/OS или Docker Swarm):
sudo ssh -p 2200 -i /var/lib/docker/volumes/azure/_data/.ssh/id_rsa -fNL 2374:localhost:2375 azureuser@MasterFQDN
Установите переменную среды DOCKER_HOST. Так вы сможете выполнять команды Docker с Docker Swarm без указания имени узла:
export DOCKER_HOST=localhost:2374
Развернем тестовый Docker Stack azurevote:
docker-compose up -d -f docker-stack-azurevote.yaml
Откроем в браузере по домену агента, взятому из пункта про FQDN.
Получившийся кластер малополезен, без постоянного хранилища для stateful-контейнеров. Мы не можем управлять, на какой ноде будет развернут наш контейнер. Выход - использовать Docker Volume Driver for Azure File Storage, но по умолчанию этого плагина в кластере нет. Есть инструкция, как его установить на все ноды кластера: Installing Docker Volume Driver for Azure File Storage on Azure Container Services
Создаем общую папку для постоянного хранения данных контейнеров и подключаем ее к созданному ранее Docker Swarm
-
Сначала создадим Storage Account там же, где у нас группа ресурсов:
az storage account create -n dockerswarmtestnetdata -g DockerSwarmTestNetResourceGroup --sku Standard_LRS --encryption blob
-
Потом создадим общую папку:
az storage share create --name dockerswarmtestnetdata --quota 4096 --account-name dockerswarmtestnetdata
Обратите внимание, что Storage Account и общая папка называются одинаково.
-
Копируем приватный ключ на мастер-ноду (узнайте ваш MasterFQDN сначала):
sudo scp -i /var/lib/docker/volumes/azure/_data/.ssh/id_rsa /var/lib/docker/volumes/azure/_data/.ssh/id_rsa azureuser@MasterFQDN:~/.ssh/id_rsa
-
Зайдем по ssh на мастер-ноду:
sudo ssh -i /var/lib/docker/volumes/azure/_data/.ssh/id_rsa azureuser@MasterFQDN
-
Перейдем в папку
~/.ssh
:cd ~/.ssh
-
Изменим права на файл:
chmod 600 id_rsa
-
Установим unzip:
sudo apt-get install -y unzip
-
Перейдем в папку пользователя:
cd ~
-
Скачаем архив:
wget https://github.com/theonemule/azure-file-storage-on-acs/archive/master.zip
-
Распакуем архив:
unzip master.zip
-
Перейдем в папку со скриптами:
cd azure-file-storage-on-acs-master
-
Соберем драйвер из исходников:
sudo sh build.sh
-
Отредактируем install-local.sh:
nano install-local.sh
Нужно заменить "yourstorageaccount" и "yourkey" данными из вашего Storage Account. Кавычки оставить. Получить ключи для хранилища можно командой:
az storage account keys list -g DockerSwarmTestNetResourceGroup -n dockerswarmtestnetdata
-
Запишите изменения: Ctrl+O и выйдите из редактора nano: Ctrl+X
-
Запустите install-agents.sh:
sh install-agents.sh
-
Тестируем:
- Хранилище
- Создание полнофункциональной виртуальной машины Linux с помощью Azure CLI - хороший туториал, где объясняются все основные виды ресурсов и создается виртуальная машина.
- Build and deploy a container - как развернуть докер-контейнер в Azure, без всяких виртуалок. Можно подключить общую папку
Полное описание возможных команд доступно здесь: Azure CLI 2.0
-
Список всех поддерживаемых регионов:
az account list-locations
или
az account list-locations --query "[].{Region:name}" -o table
-
Создадим группу ресурсов (логический контейнер для ресурсов) в регионе
eastus
:az group create --name myResourceGroup --location eastus
-
Просмотреть список популярных образов виртуальных машин:
az vm image list -o table
подробнее см. Поиск образов виртуальных машин Linux в Azure Marketplace с помощью Azure CLI
-
Создать виртуальную машину:
az vm create -n myVM -g myResourceGroup --image UbuntuLTS --admin-username azureuser
-
Создать свой репозиторий Docker-образов Azure Container Registry:
az acr create --resource-group myResourceGroup --name mycontainerregistry082 --sku Basic --admin-enabled true
-
Создадим аккаунт хранения:
az storage account create -n mystorageaccount -g myResourceGroup --location eastus --sku Standard_LRS --encryption blob
-
Список всех Storage Accounts в виде удобной таблицы:
az storage account list --query "[].{ID:name,Loc:location,Group:resourceGroup,SKU:sku.name}" -o table
-
Список всех контейнеров (аналог папки) внутри заданного Storage Account:
az storage container list --account-name mystorageaccount
-
Список всех blobs (аналог файла) внутри контейнера
mystoragecontainer
и Storage Accountmystorageaccount
:az storage blob list --account-name mystorageaccount -c mystoragecontainer -o table
Полезные данные про это находятся здесь: Perform Blob storage operations with Azure CLI
-
Посмотреть свойства blob'а:
az storage blob show --account-name mystorageaccount -c mystoragecontainer -n blobName -o table
или
az storage blob metadata show --account-name mystorageaccount -c mystoragecontainer -n blobName -o table
-
Создадим управляемый диск (managed disk) и назовем его
data
:az disk create -n data -g myResourceGroup --size-gb 10
-
Узнаем идентификатор диска
data
(вообще он был показан при создании, так что это не обязательно):az disk show -g myResourceGroup -n data --query 'id' -o tsv
-
Присоединим диск
data
к виртуальной машинеmyVM
:az vm disk attach -g myResourceGroup --vm-name myVM --disk data
Дальнейшая работа с присоединенным диском показана здесь: Add a disk to a Linux VM
sudo fdisk /dev/sdc
sudo mkfs -t ext4 /dev/sdc1 && sudo aptitude purge docker-ce -y
# drwx--x--x 12 root root 4096 Oct 6 13:03 docker/
# Access: (0711/drwx--x--x) Uid: ( 0/ root) Gid: ( 0/ root)
# sudo mkdir /var/lib/docker
sudo mount /dev/sdc1 /var/lib/docker && sudo chmod go-wr+x /var/lib/docker && sudo -i blkid | grep sdc1
sudo vi /etc/fstab
# UUID=f97f11d0-8479-4250-98a8-da683c4f55a4 /var/lib/docker ext4 defaults,discard,nofail 1 2
sudo umount /var/lib/docker
sudo mount /var/lib/docker
sudo aptitude install docker-ce -y
sudo reboot
ifconfig
sudo docker swarm join --token SWMTKN-1-4cyzflewghgblqs4xfy5uztsq41u6zj4lmxacz5hmsrbci597l-4d7yuxaqedn1d0fg3ho1d2gx0 192.168.1.9:2377
Подробности здесь: Подключение диска данных к виртуальной машине Linux
-
Задеплоим шаблон:
az group deployment create -n ExampleDeployment -g ExampleGroup --template-file "azuredeploy.json"
-
Экспортируем группу
manual
в шаблон (все значения захардкожены, осторожно!)az group export -n manual
- https://docs.microsoft.com/en-us/azure/virtual-machines/windows/tutorial-load-balancer
- Optimize your Linux VM on Azure
- Create VM from existing VHDs and connect it to existingVNET
- Общие сведения о частных реестрах контейнеров Docker
- Подключение файлового ресурса Azure с помощью Экземпляров контейнеров Azure
- https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/101-aci-linuxcontainer-public-ip/azuredeploy.json
- https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/201-2-vms-internal-load-balancer/azuredeploy.json
- https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/docker-simple-on-ubuntu/azuredeploy.json
- https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/201-2-vms-loadbalancer-natrules/azuredeploy.json
- https://raw.githubusercontent.com/Azure/azure-quickstart-templates/875d139c16c9c023dce519e6dd48c707e3473346/201-vm-copy-index-loops/azuredeploy.json