Skip to content

netology-code/k8s-hw1-solution-part1

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 

Repository files navigation

Домашние задания по Kubernetes

Эта директория содержит манифесты для выполнения домашних заданий по курсу Kubernetes.

Файлы с конфигурациями

1. Redis Deployment и Service

Файл: redis-deployment.yaml

Описание: Конфигурация для развертывания Redis без пароля с фиксированной версией образа.

Особенности:

  • Redis запускается без пароля (используется переменная ALLOW_EMPTY_PASSWORD: "yes")
  • Фиксированная версия образа: bitnami/redis:6.0.13
  • Настроены resource limits для production-ready конфигурации
  • Service типа ClusterIP для внутреннего доступа

Применение:

kubectl apply -f redis-deployment.yaml

Проверка:

# Проверить Deployment
kubectl get deployment redis

# Проверить Pod
kubectl get pods -l app=redis

# Проверить Service
kubectl get service redis

# Проверить подключение
kubectl run redis-client --rm -it --restart=Never \
  --image=redis:6.0.13 -- redis-cli -h redis ping

2. Nginx с ConfigMap, Service и Ingress

Файл: nginx-complete.yaml

Описание: Полная конфигурация nginx с ConfigMap, Deployment, Service и Ingress для маршрутизации по префиксу /test.

Компоненты:

  • ConfigMap с конфигурацией nginx, возвращающей "Hello from k8s"
  • Deployment с 2 репликами и health probes
  • Service типа ClusterIP для внутреннего доступа
  • Ingress для маршрутизации запросов с префиксом /test

Особенности:

  • ConfigMap подключен как volume в /etc/nginx/conf.d
  • Настроены liveness и readiness probes
  • Ingress использует rewrite-target для удаления префикса /test
  • Resource limits для production-ready конфигурации

Применение:

kubectl apply -f nginx-complete.yaml

Проверка:

# Проверить все ресурсы
kubectl get configmap nginx-config
kubectl get deployment nginx
kubectl get service nginx
kubectl get ingress nginx-ingress

# Локальная проверка через port-forward
kubectl port-forward service/nginx 8080:80
curl http://localhost:8080

# Проверка через Ingress (если настроен ingress controller)
kubectl get ingress nginx-ingress
curl http://<ingress-ip>/test

Установка Ingress Controller

Для minikube:

minikube addons enable ingress
kubectl get pods -n ingress-nginx

Для kind:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml
kubectl wait --namespace ingress-nginx \
  --for=condition=ready pod \
  --selector=app.kubernetes.io/component=controller \
  --timeout=90s

Для k3s:

# Ingress уже встроен (traefik)
kubectl get svc -n kube-system traefik

Задания

Задание 3: Команды kubectl для работы с контейнерами

Цель: Написать команды kubectl для контейнера Redis из предыдущего задания.

1. Выполнение команды ps aux внутри контейнера

# Вариант 1: Через Deployment
kubectl exec deployment/redis -- ps aux

# Вариант 2: Через конкретный Pod (сначала получить имя)
kubectl get pods -l app=redis
kubectl exec redis-<pod-id> -- ps aux

# Вариант 3: Интерактивный режим
kubectl exec -it deployment/redis -- ps aux

Ожидаемый вывод:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
1001         1  0.1  0.1  51728  8192 ?        Ssl  10:00   0:01 redis-server

2. Просмотр логов контейнера за последние 5 минут

# Вариант 1: За последние 5 минут
kubectl logs deployment/redis --since=5m

# Вариант 2: С follow (в реальном времени)
kubectl logs deployment/redis --since=5m -f

# Вариант 3: Для конкретного пода
kubectl logs redis-<pod-id> --since=5m

# Вариант 4: Последние 100 строк + 5 минут
kubectl logs deployment/redis --since=5m --tail=100

Дополнительные варианты:

# Логи за последний час
kubectl logs deployment/redis --since=1h

# Логи за определенное время
kubectl logs deployment/redis --since-time=2025-01-20T10:00:00Z

# Все логи с начала
kubectl logs deployment/redis

3. Удаление контейнера (пода)

# Вариант 1: Удаление конкретного пода (Deployment создаст новый)
kubectl delete pod redis-<pod-id>

# Вариант 2: Удаление пода по label
kubectl delete pod -l app=redis

# Вариант 3: Удаление всего Deployment (удалит и поды)
kubectl delete deployment redis

# Вариант 4: Удаление Deployment и Service
kubectl delete deployment redis
kubectl delete service redis

# Вариант 5: Удаление через файл
kubectl delete -f redis-deployment.yaml

# Вариант 6: Проверка удаления
kubectl get pods -l app=redis -w

Примечание: При удалении только пода Deployment автоматически создаст новый под для поддержания желаемого количества реплик.

4. Проброс порта локальной машины в контейнер для отладки

# Вариант 1: Проброс через Deployment
kubectl port-forward deployment/redis 6379:6379

# Вариант 2: Проброс через конкретный Pod
kubectl port-forward pod/redis-<pod-id> 6379:6379

# Вариант 3: Проброс через Service
kubectl port-forward service/redis 6379:6379

# Вариант 4: Проброс на другой локальный порт
kubectl port-forward deployment/redis 16379:6379

# Вариант 5: Проброс на все интерфейсы
kubectl port-forward --address 0.0.0.0 deployment/redis 6379:6379

# Вариант 6: В фоновом режиме
kubectl port-forward deployment/redis 6379:6379 &

Проверка после проброса:

# В другом терминале проверить подключение
redis-cli -h localhost -p 6379 ping
# Ожидаемый вывод: PONG

# Или через telnet
telnet localhost 6379

# Или через curl (для HTTP сервисов)
curl localhost:6379

Остановка проброса:

# Нажать Ctrl+C в терминале с port-forward

# Или если в фоне, найти процесс
ps aux | grep port-forward
kill <PID>

Полный пример проверки всех команд:

# 1. Выполнить команду в контейнере
kubectl exec deployment/redis -- ps aux

# 2. Посмотреть логи
kubectl logs deployment/redis --since=5m

# 3. В одном терминале запустить проброс
kubectl port-forward deployment/redis 6379:6379

# 4. В другом терминале проверить подключение
redis-cli -h localhost -p 6379 ping

# 5. Удалить под и проследить создание нового
kubectl get pods -l app=redis -w &
kubectl delete pod -l app=redis

# Вы увидите, как старый под удаляется и создается новый

Задание 4*: Nginx с ConfigMap, Service и Ingress (дополнительное)

Цель: Создать yaml-файлы для развёртки nginx с ConfigMap, Deployment, Service и Ingress.

Исходная конфигурация nginx:

location / {
    add_header Content-Type text/plain;
    return 200 'Hello from k8s';
}

Требования:

  1. ConfigMap с конфигом nginx
  2. Deployment, который подключает этот ConfigMap
  3. Service для доступа
  4. Ingress, который направляет запросы по префиксу /test на наш сервис

Решение: Используйте файл nginx-complete.yaml, который содержит все необходимые компоненты.

Критерии оценки:

  • ✅ ConfigMap содержит корректную конфигурацию nginx
  • ✅ Deployment подключает ConfigMap как volume
  • ✅ Service направляет трафик на Deployment
  • ✅ Ingress маршрутизирует по префиксу /test

Полезные команды kubectl

Работа с Redis:

# Выполнить команду в контейнере
kubectl exec deployment/redis -- ps aux

# Просмотр логов за последние 5 минут
kubectl logs deployment/redis --since=5m

# Проброс порта для отладки
kubectl port-forward deployment/redis 6379:6379

# Удаление пода (Deployment создаст новый)
kubectl delete pod -l app=redis

Работа с nginx:

# Просмотр содержимого ConfigMap
kubectl describe configmap nginx-config

# Проверка логов nginx
kubectl logs deployment/nginx

# Проброс порта для тестирования
kubectl port-forward service/nginx 8080:80

Очистка ресурсов

# Удалить все ресурсы Redis
kubectl delete -f redis-deployment.yaml

# Удалить все ресурсы nginx
kubectl delete -f nginx-complete.yaml

# Или удалить по отдельности
kubectl delete deployment redis
kubectl delete service redis
kubectl delete deployment nginx
kubectl delete service nginx
kubectl delete configmap nginx-config
kubectl delete ingress nginx-ingress

About

Эталонное решение к заданию по теме "Kubernetes" модуля svirt.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published