Список задач практического задания:
Развернуть Crossplane с помощью Helm:
NS=crossplane-system
kubectl create namespace $NS
helm repo add crossplane-stable https://charts.crossplane.io/stable
helm repo update
helm install crossplane --namespace $NS crossplane-stable/crossplane
# Install Crossplane CLI
curl -sL https://raw.githubusercontent.com/crossplane/crossplane/master/install.sh | sh
sudo mv kubectl-crossplane $(dirname $(which kubectl))
Проверить состояние Crossplane после развёртывания:
helm list -n $NS
kubectl get all -n $NS
Установить Crossplane Provider:
kubectl crossplane install provider cr.yandex/crp0kch415f0lke009ft/crossplane/provider-jet-yc:v0.1.37
Создать ключи для работы Crossplane Provider:
SA_NAME=webinar-sa
SA_ID=$(yc iam service-account list --format=json | jq -r '.[] | select(.name == ('\"$SA_NAME\"')) | .id')
yc iam key create --service-account-id $SA_ID --output key.json
Создать в кластере Secret для Crossplane Provider:
kubectl create secret generic yc-creds -n $NS --from-file=credentials=./key.json
Создать в кластере Crossplane ProviderConfig:
cd ~/labs/lab-04-crossplane/
kubectl apply -f providerconfig.yml
Подготовить входные данные для развёртывания ВМ:
export ZONE_ID="ru-central1-b"
export VM_NAME="crossplane-vm"
export SUBNET_NAME=$NET_NAME-$ZONE_ID
export NET_NAME=$(yc vpc network list --limit=1 --format=json | jq -r .[0].name)
export SUBNET_ID=$(yc vpc subnet get --name=$SUBNET_NAME --format=json | jq -r .id)
export NET_ID=$(yc vpc subnet get $SUBNET_ID --format=json | jq -r .network_id)
export SUBNET_PREFIX=$(yc vpc subnet get $SUBNET_ID --format=json | jq -r .v4_cidr_blocks[0])
export FOLDER_ID=$(yc config get folder-id)
export IMAGE_ID=$(yc compute image get --folder-id standard-images --name=lemp-v20220606 --format=json | jq -r .id)
Заполнить шаблон манифеста crossplane для создания ВМ нужными значениями из исходных данных:
envsubst < vm-instance.tpl > vm-instance.yml
Проверить полученный манифест для создания ВМ перед его применением:
cat vm-instance.yml
Создать ВМ с веб-сервером из подготовленного манифеста ВМ:
kubectl apply -f vm-instance.yml
Проверить состояния созданных в кластере Kubernetes объектов под управлением Crossplane:
kubectl get network
kubectl get subnet
kubectl get instance
yc compute instance list
Проверить работоспособность развёрнутой ВМ:
LEMP_IP=$(yc compute instance get --name=$VM_NAME --format=json | jq -r .network_interfaces[0].primary_v4_address.address)
ping -c 3 $LEMP_IP
curl http://$LEMP_IP
Удалить ВМ с помощью Crossplane:
kubectl delete instance $VM_NAME
Убедиться, что ВМ удалена
kubectl get instance
yc compute instance list
Поздравляем! Вы успешно справились с заданием!