Для следующей секции воркшопа нам понадобится установленный Kubernetes. Мы развернём его с помощью управляемого сервиса Amazon EKS полностью на спотах через Terraform из терминала Cloud9. В зависимости от вашего сценария, вы можете также это делать прямо в GitLab CI/CD.
- Вернитесь на вкладку браузера с Cloud9 и выполните следующие команды в терминале, чтобы установить
kubectl
:
sudo curl -sLo /usr/local/bin/kubectl "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo chmod +x /usr/local/bin/kubectl
- Инициализируйте шаблон Terraform для кластера Amazon EKS на спотах и разверните его:
cd ~/environment/devopsconf2021/eks-cluster/
terraform init
terraform apply
- При запросе параметров, введите регион
eu-central-1
и название VPC из Outputs стека CloudFormation в первой секции (форматаvpc-...
) соответственно:
- После отображения проверьте список планируемых действий и введите
yes
, затем нажмите Enter.
Создание кластера займёт около 10-15 минут: если всё идёт по плану, то сейчас как раз будет перерыв в воркшопе, после которого мы продолжим.
- После завершения выполнения
terraform apply
в терминале Cloud9 выполните следующую команду, чтобы обновитьkubeconfig
, используя данные Amazon EKS:
aws eks update-kubeconfig --region eu-central-1 --name eks-spot-workshop
- Теперь вы можете проверить работу кластера, например, используя следующие команды:
kubectl get all -A
kubectl get nodes
- Вернитесь на вкладку браузера с консолью EC2, страницей Instances и убедитесь, что ноды используют спотовые инстансы: например, вы можете посмотреть значение Lifecycle для каждого инстанса, как мы делали в предыдущей секции, либо включить отображение соответствующего поля в списке всех инстансов, нажав на знак шестерёнки, а затем введя в поле Attribute columns слова
Instance lifecycle
:
- Чтобы разрешить GitLab доступ к API кластера Kubernetes, необходимо добавить его роль в RBAC, используя ConfigMap
aws-auth
. Это можно было сделать через Terraform, но мы специально делаем вручную, чтобы подробно понять, как это работает. Чтобы получить строки, которые вам нужно будет добавить, вернитесь на вкладку браузера с Cloud9 и выполните следующие команды в терминале:
kubectl get configmap -n kube-system aws-auth -o yaml > aws-auth.yaml
export ACCOUNT_ID=$(aws sts get-caller-identity --output text --query Account)
cat << EoF
- rolearn: arn:aws:iam::${ACCOUNT_ID}:role/GitLabRunner
groups:
- system:masters
username: gitlab-runner
EoF
- Теперь откройте файл
~/environment/devopsconf2021/eks-cluster/aws-auth.yaml
(например, кликнув по нему два раза в меню слева) и добавьте текст из вывода предыдущей команды в секциюmapRoles
(не забудьте сохранить файл, используя Ctrl + S или Cmd + S в зависимости от операционной системы, либо нажав File > Save). В итоге должно получиться примерно следующее:
- Закройте файл и примените его, выполнив следующую команду в терминале Cloud9 (возникающий в процессе warning можно игнорировать):
kubectl apply -f aws-auth.yaml