Видео может быть заблокировано из-за расширений браузера. В статье вы найдете решение этой проблемы.
- Пример файла ansible/monitoring.yml
- Пример файла ansible/requirements.yml
- Пример файла ansible/monitoring.ini
- Пример файла k8s/app-deployment.yaml
- Пример файла k8s/app-service.yaml
- Пример файла k8s/env-configmap.yaml
- Примеры команд
Ниже приведён пример реализации zero-downtime deployment с помощью Kubernetes по стратегии Rolling Update
Пример файла ansible/monitoring.yml
---
- name: Setting up monitoring server
hosts: monitoring # Хосты для которых выполняется ansible
remote_user: root
vars:
# Тут мы используем значение зашифрованной с помощью vault переменной
datadog_api_key: !vault |
$ANSIBLE_VAULT;1.1;AES256
35613834616138663862363936636531633138363139656164316130346237303331353633396237
6433336231663931653738623830386630326132343935370a326237393064633433643333643531
33663630323036666536613936343431343637353436326463643531653163336333333366303261
6265383336343637611a616166373733336135613632613136633064623562653166353862383330
64636236613539666666383964633264393633653532346362393039313439636564376338353838
3166313532303561663164646363373439643138373864616362
datadog_site: "datadoghq.eu"
datadog_checks:
# Добавляем хелфчек, который запрашивает внешний адрес приложения,
# которое находится в кластере Kubernetes
http_check:
init_config:
instances:
- name: K8S app status
url: http://k8s.devops.club
timeout: 5
method: GET
http_response_status_code: 200
roles:
- datadog.datadog
Пример файла ansible/requirements.yml
roles:
- name: datadog.datadog
Пример файла ansible/monitoring.ini
; определяем один хост с именем monitoring
[monitoring]
64.225.78.51
Пример файла k8s/app-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
kompose.cmd: kompose convert
kompose.version: 1.21.0 (992df58d8)
creationTimestamp: null
labels:
io.kompose.service: app
name: app
spec:
# Устанавливаем количество реплик
replicas: 5
selector:
matchLabels:
io.kompose.service: app
strategy: {}
template:
metadata:
annotations:
kompose.cmd: kompose convert
kompose.version: 1.21.0 (992df58d8)
creationTimestamp: null
labels:
io.kompose.service: app
spec:
containers:
- env:
- name: ROLLBAR_TOKEN
valueFrom:
# Указываем, что данную переменную нужно брать из секретов
secretKeyRef:
key: ROLLBAR_TOKEN
name: app-secret
- name: SERVER_MESSAGE
valueFrom:
configMapKeyRef:
key: SERVER_MESSAGE
name: env
image: hexlet/hexlet-app
imagePullPolicy: ""
name: hexlet-app
ports:
- containerPort: 3000
resources: {}
restartPolicy: Always
serviceAccountName: ""
volumes: null
status: {}
Пример файла k8s/app-service.yaml
apiVersion: v1
kind: Service
metadata:
annotations:
kompose.cmd: kompose convert
kompose.version: 1.21.0 (992df58d8)
creationTimestamp: null
labels:
io.kompose.service: app
name: app
spec:
# Указываем тип балансера
type: LoadBalancer
ports:
- name: "80"
port: 80
targetPort: 5000
selector:
io.kompose.service: app
status:
loadBalancer: {}
Пример файла k8s/env-configmap.yaml
apiVersion: v1
data:
SERVER_MESSAGE: Hello from Kubernetes
kind: ConfigMap
metadata:
creationTimestamp: null
labels:
io.kompose.service: app-env
name: env
Примеры команд
# Перезапуск подов приложения
kubectl -n service rollout restart deployment app
# Таким образом можно вывести все поды кластера
kubectl --kubeconfig ~/hexlet-k8s-homework-kubeconfig.yaml get pods
# Применяем изменения к кластеру передавая kubectl файлы конфигурации
kubectl --kubeconfig ~/hexlet-k8s-homework-kubeconfig.yaml apply -f k8s/app-deployment.yaml,k8s/app-service.yaml,k8s/env-configmap.yaml,secret.yml
# Вывести все поды кластера с подробностями
kubectl get pods -o wide
# Вывести все сервисы кластера
kubectl --kubeconfig ~/hexlet-k8s-homework-kubeconfig.yaml get services
# Таким образом можно зашифровать значение hexlet в переменную the_secret
# с помощью пароля в файле vault-password
ansible-vault encrypt_string --vault-password-file vault-password 'hexlet' --name 'the_secret'
# Чтобы расшифровать зашифрованные с помощью Ansible Vault переменные
# если пароль хранится в файле, используется флаг --vault-password-file
ansible-playbook -v --vault-password-file vault-password ansible/monitoring.yml
# Устанавливаем коллекции определённые в файле requirements.yml
ansible-galaxy collection install -r ansible/requirements.yml
# Деплоим приложение
ansible-playbook -v ansible/monitoring.yml
# Подключаемся по ssh к хосту с IP 192.168.0.2
ssh username@192.168.0.2
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты