- Автоматизированные процессы создания и управления платформой
- Ресурсы Ya.cloud
- Инфраструктура для CI/CD
- Инфраструктура для сбора обратной связи
- Использование практики IaC (Infrastructure as Code) для управления конфигурацией и инфраструктурой
- Настроен процесс CI/CD
- Все, что имеет отношение к проекту хранится в Git
- Настроен процесс сбора обратной связи
- Мониторинг (сбор метрик, алертинг, визуализация)
- Логирование (опционально)
- Трейсинг (опционально)
- ChatOps (опционально)
- Документация
- README по работе с репозиторием
- Описание приложения и его архитектуры
- How to start?
- ScreenCast
- CHANGELOG с описанием выполненной работы
- Создать makefile для сборки образов
- Создать docker-compose.yml для сборки приложения
- Подготовить инфру для поднятия кубера и развертывания приложения в нем
- Развернуть инфру и GitLab в ней для CI/CD
cd ./docker
make
➜ docker git:(main) docker-compose up -d
➜ docker git:(main) curl http://localhost:8000
<!doctype html>
<html>
<head>
<title>Best search engine ever</title>
<style type="text/css">
body, html {
...
cd ./crawler/terraform-k8s/
terraform init
terraform apply --auto-approve
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm install ingress-nginx ingress-nginx/ingress-nginx
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install \
cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--set installCRDs=true \
--version v1.8.0 \
--set prometheus.enabled=false \
--set webhook.timeoutSeconds=4
kubectl --namespace default get services -o wide -w ingress-nginx-controller
spec:
tls:
- hosts:
- 51.250.82.190.nip.io
- grafana.51.250.82.190.nip.io
- prometheus.51.250.82.190.nip.io
secretName: letsencrypt
rules:
- host: 51.250.82.190.nip.io
...
- host: grafana.51.250.82.190.nip.io
...
- host: prometheus.51.250.82.190.nip.io
...
kubectl apply -f ../k8s/crawler/
Проверяем https://51.250.82.190.nip.io/?query=blog
4. Настройка CI/CD https://cloud.yandex.com/en-ru/docs/tutorials/infrastructure-management/gitlab-containers
cd crawler/gitlab-ci/terraform
terraform apply --auto-approve
crawler/gitlab-ci/ansible
➜ ansible git:(main) ✗ ansible-playbook playbook.yml
...
TASK [config-gitlab-ci : debug] **************************************************************************************************************************************************************************************************************************************************
ok: [gitlab-ci-vm-0] => {
"msg": "content of remote file /etc/gitlab/initial_root_password: z7M17GY5B4l259DH0HINubh8tVnzNRotf4E3jJ6nAC8="
}
...
Проверяем UI GitLab http://51.250.92.22/users/sign_in
Внесем endpoint инстанса GitLab и токен из http://51.250.92.22/search_engine/crawler/-/settings/ci_cd в crawler/k8s/gitlab-ci/values.yaml
gitlabUrl: http://51.250.92.22/
runnerRegistrationToken: "token"
helm repo add gitlab https://charts.gitlab.io
helm install --namespace default gitlab-runner -f values.yaml gitlab/gitlab-runner
# Проверим успешный запуск раннера
kubectl get pods -n default | grep gitlab-runner
cd crawler/k8s/gitlab-ci
kubectl apply -f gitlab-admin-service-account.yaml
kubectl -n kube-system get secrets -o json | jq -r '.items[] | select(.metadata.name | startswith("gitlab-admin")) | .data.token' | base64 --decode > token.txt
yc managed-kubernetes cluster get k8s-otus --format=json | jq -r .master.master_auth.cluster_ca_certificate
-----BEGIN CERTIFICATE-----
MIIC5zCCAc+gAwIBAgIBADANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDEwprdWJl
...
-----END CERTIFICATE-----
Создадим переменные окружения GitLab http://51.250.92.22/search_engine/crawler/-/settings/ci_cd
Подключим k8s для развертывания в нём проекта search_engine/crawler
к раннеру GitLab http://51.250.92.22/search_engine/crawler/-/clusters/2?tab=details
git remote add gitlab git@51.250.92.22:search_engine/crawler.git
git commit -am 'GitLab pipeline test'
git push gitlab
https://app.slack.com/client/T6HR0TUP3/C037903MQUC
cd crawler/k8s/monitoring/
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install prometheus prometheus-community/kube-prometheus-stack -f values.yml