Получим и сохраним в env переменную токен для работы с Yandex Cloud.
Кликнем на блок кода, ниже, чтобы его скопировать. Вставим в терминал, но не будем нажимать enter
:
# После символа '=' нужно будет вставить полученный токен
OAUTH_TOKEN=
Несколько приёмов использования командной строки которые будут встречаться далее:
- Получение значения переменной с добавлением
:?
к имени, вроде${VAR_NAME:?}
, требует чтобы переменная была выставлена ранее - Вызов
yc
CLI с флагом--format json
выводит объект в формате JSON | jq .id -r
возвращает JSON значение поляid
Работать с настройками yc
CLI будем
используя команды не интерактивной настройки
yc config
. Создадим профильyc
CLI в котором будем работать и выставим туда токен
yc config profile create workshop
yc config set token ${OAUTH_TOKEN:?}
echo "Token set to '$(yc config get token)'"
Проверим, что токен скопирован корректно, и появился доступ к Облаку в котором будем работать:
yc resource cloud list
Выставим ID Облака в конфиг yc
CLI
CLOUD_NAME=cloud-practicum-k8s
CLOUD_ID=$(yc resource cloud get --name ${CLOUD_NAME:?} --format json | jq .id -r)
yc config set cloud-id ${CLOUD_ID:?}
echo "В конфиг yc CLI добавлен ID Облака: '$(yc config get cloud-id)'"
Создаем каталог
echo "Ваш каталог:"
FOLDER=$(yc resource folder list --format json | jq '.[]' -c | grep <твоя папка>)
jq <<< "$FOLDER" '"Имя: " + .name + " " + "ID: " + .id' -r
Сохраним его ID в конфиг yc CLI:
yc config set folder-id $(jq -r <<< "$FOLDER" .id)
echo "В конфиг yc CLI добавлен ID каталога: '$(yc config get folder-id)'"
source ./set_tf_vars_from_yc_config.sh
Познакомимся с ресурсами в каталоге:
./show_resoursec.sh
Для этого, для каждого ресурса нужно выполнить команду terraform import
передав имя в terraform и идентификатор в
облаке:
# Сеть и подсети
terraform import 'yandex_vpc_network.default' "$(yc vpc network get default --format json | jq .id -r)"
terraform import 'yandex_vpc_subnet.default[0]' "$(yc vpc subnet get default-a --format json | jq .id -r)"
terraform import 'yandex_vpc_subnet.default[1]' "$(yc vpc subnet get default-b --format json | jq .id -r)"
terraform import 'yandex_vpc_subnet.default[2]' "$(yc vpc subnet get default-c --format json | jq .id -r)"
FOLDER_NAME="$(yc resource folder get "$(yc config get folder-id)" --format json | jq .name -r)"
# Сервисный аккаунт Kubernetes кластера и его биндинг роли
terraform import 'yandex_iam_service_account.k8s' "$(yc iam service-account get "${FOLDER_NAME:?}-k8s" --format json | jq .id -r)"
terraform import 'yandex_resourcemanager_folder_iam_binding.sa_k8s_editor' "$(yc config get folder-id) editor"
# Сервисный аккаунт Kubernetes узлов и его биндинг роли
terraform import 'yandex_iam_service_account.k8s_nodes' "$(yc iam service-account get "${FOLDER_NAME:?}-k8s-nodes" --format json | jq .id -r)"
terraform import 'yandex_resourcemanager_folder_iam_binding.sa_k8s_nodes_image_puller' "$(yc config get folder-id) container-registry.images.puller"
# KMS ключ шифрования секретов кластера Kubernetes
terraform import 'yandex_kms_symmetric_key.k8s_cluster_workshop' "$(yc kms symmetric-key --name k8s-cluster-workshop get --format json | jq .id -r)"
# Кластер Kubernetes
terraform import 'yandex_kubernetes_cluster.workshop' "$(yc k8s cluster get workshop --format json | jq .id -r)"
# Группа узлов Kubernetes
terraform import 'yandex_kubernetes_node_group.default' "$(yc k8s node-group get default --format json | jq .id -r)"
Актуальное состояние ресурсов:
terraform plan