Some checks failed
Ansible Testing / lint (push) Has been cancelled
Ansible Testing / test (default) (push) Has been cancelled
Ansible Testing / test (minimal) (push) Has been cancelled
Ansible Testing / test (performance) (push) Has been cancelled
Ansible Testing / deploy-check (push) Has been cancelled
- Создано подробное руководство docs/kubernetes-full-guide.md - Описаны все аспекты работы с Kubernetes кластерами - Добавлены примеры использования манифестов, Helm, Ingress - Подробно описана работа с мониторингом (Prometheus, Grafana) - Документирована работа с Service Mesh (Istio, Kiali) - Добавлены примеры полных развертываний - Включены разделы по безопасности и отладке - Документация на русском языке с большим количеством примеров
907 lines
23 KiB
Markdown
907 lines
23 KiB
Markdown
# Полное руководство по работе с Kubernetes кластерами
|
||
|
||
Автор: Сергей Антропов
|
||
Сайт: https://devops.org.ru
|
||
|
||
## Содержание
|
||
|
||
- [Введение](#введение)
|
||
- [Создание кластера](#создание-кластера)
|
||
- [Управление кластером](#управление-кластером)
|
||
- [Работа с манифестами](#работа-с-манифестами)
|
||
- [Работа с Helm](#работа-с-helm)
|
||
- [Настройка Ingress](#настройка-ingress)
|
||
- [Мониторинг и аддоны](#мониторинг-и-аддоны)
|
||
- [Service Mesh с Istio](#service-mesh-с-istio)
|
||
- [Примеры полных развертываний](#примеры-полных-развертываний)
|
||
|
||
## Введение
|
||
|
||
AnsibleLab предоставляет полную поддержку создания и управления локальными Kubernetes кластерами на основе Kind (Kubernetes in Docker). Kind позволяет запускать Kubernetes кластеры внутри Docker контейнеров, что идеально подходит для разработки, тестирования и обучения.
|
||
|
||
### Основные возможности
|
||
|
||
- Создание многоузловых Kubernetes кластеров
|
||
- Установка и управление Helm чартами
|
||
- Работа с манифестами YAML
|
||
- Настройка Ingress контроллеров
|
||
- Установка систем мониторинга (Prometheus, Grafana)
|
||
- Развертывание Service Mesh (Istio, Kiali)
|
||
- Изоляция сети и безопасность
|
||
|
||
### Преимущества
|
||
|
||
- Не требует установки локального Kubernetes
|
||
- Быстрое создание и удаление кластеров
|
||
- Поддержка многоузловых конфигураций
|
||
- Полная совместимость с production окружениями
|
||
- Контейнеризация всех инструментов
|
||
|
||
## Создание кластера
|
||
|
||
### Базовое создание
|
||
|
||
Простое создание минимального кластера без дополнительных компонентов:
|
||
|
||
```bash
|
||
make k8s create
|
||
```
|
||
|
||
Создаст кластер с пресетом `k8s-minimal` - один control-plane узел без дополнительных компонентов.
|
||
|
||
### Создание полнофункционального кластера
|
||
|
||
Создание кластера с предустановленными компонентами:
|
||
|
||
```bash
|
||
make k8s create kubernetes
|
||
```
|
||
|
||
Этот пресет создает кластер со следующими компонентами:
|
||
- 1 control-plane узел
|
||
- 2 worker узла
|
||
- Ingress NGINX Controller
|
||
- Metrics Server
|
||
- Istio Service Mesh
|
||
- Kiali для визуализации Istio
|
||
- Prometheus Stack (Prometheus + Grafana)
|
||
|
||
### Конфигурация пресета
|
||
|
||
Пресеты находятся в `molecule/presets/k8s/`. Пример конфигурации:
|
||
|
||
```yaml
|
||
kind_clusters:
|
||
- name: lab
|
||
workers: 2
|
||
api_port: 6443
|
||
addons:
|
||
ingress_nginx: true
|
||
metrics_server: true
|
||
istio: true
|
||
kiali: true
|
||
prometheus_stack: true
|
||
ingress_host_http_port: 8081
|
||
ingress_host_https_port: 8443
|
||
addon_ports:
|
||
prometheus: 9090
|
||
grafana: 3000
|
||
kiali: 20001
|
||
```
|
||
|
||
### Проверка статуса кластера
|
||
|
||
```bash
|
||
# Показать узлы кластера
|
||
make k8s nodes kubernetes
|
||
|
||
# Вывод:
|
||
# NAME STATUS ROLES AGE VERSION
|
||
# lab-control-plane Ready control-plane 5m v1.34.0
|
||
# lab-worker Ready <none> 4m v1.34.0
|
||
# lab-worker2 Ready <none> 4m v1.34.0
|
||
|
||
# Показать подробный статус
|
||
make k8s status kubernetes
|
||
```
|
||
|
||
### Подключение к кластеру
|
||
|
||
```bash
|
||
# Получить kubeconfig
|
||
make k8s config kubernetes
|
||
|
||
# Использовать kubeconfig
|
||
export KUBECONFIG=$(pwd)/kubeconfig
|
||
kubectl get nodes
|
||
```
|
||
|
||
## Управление кластером
|
||
|
||
### Остановка и запуск
|
||
|
||
```bash
|
||
# Остановить кластер (без удаления)
|
||
make k8s stop kubernetes
|
||
|
||
# Запустить остановленный кластер
|
||
make k8s start kubernetes
|
||
|
||
# Перезапустить кластер
|
||
make k8s stop kubernetes && make k8s start kubernetes
|
||
```
|
||
|
||
### Удаление кластера
|
||
|
||
```bash
|
||
# Полное удаление кластера и контейнера
|
||
make k8s destroy kubernetes
|
||
```
|
||
|
||
### Получение shell в контейнере
|
||
|
||
```bash
|
||
# Открыть интерактивный shell
|
||
make k8s shell kubernetes
|
||
|
||
# Теперь доступны все команды kubectl, helm, kind внутри контейнера
|
||
kubectl get nodes
|
||
helm list
|
||
kind get clusters
|
||
```
|
||
|
||
## Работа с манифестами
|
||
|
||
### Применение манифеста
|
||
|
||
Применение манифеста из URL:
|
||
|
||
```bash
|
||
make k8s manifest apply kubernetes https://example.com/deploy.yaml
|
||
```
|
||
|
||
Применение локального манифеста:
|
||
|
||
```bash
|
||
# Создайте файл example-deployment.yaml
|
||
cat > example-deployment.yaml <<EOF
|
||
apiVersion: apps/v1
|
||
kind: Deployment
|
||
metadata:
|
||
name: nginx-deployment
|
||
spec:
|
||
replicas: 3
|
||
selector:
|
||
matchLabels:
|
||
app: nginx
|
||
template:
|
||
metadata:
|
||
labels:
|
||
app: nginx
|
||
spec:
|
||
containers:
|
||
- name: nginx
|
||
image: nginx:1.21
|
||
ports:
|
||
- containerPort: 80
|
||
---
|
||
apiVersion: v1
|
||
kind: Service
|
||
metadata:
|
||
name: nginx-service
|
||
spec:
|
||
selector:
|
||
app: nginx
|
||
ports:
|
||
- protocol: TCP
|
||
port: 80
|
||
targetPort: 80
|
||
type: NodePort
|
||
EOF
|
||
|
||
# Применить манифест
|
||
make k8s manifest apply kubernetes ./example-deployment.yaml
|
||
```
|
||
|
||
### Удаление ресурсов
|
||
|
||
```bash
|
||
make k8s manifest delete kubernetes https://example.com/deploy.yaml
|
||
```
|
||
|
||
### Обновление ресурсов
|
||
|
||
```bash
|
||
make k8s manifest update kubernetes https://example.com/deploy.yaml
|
||
```
|
||
|
||
## Работа с Helm
|
||
|
||
### Добавление Helm репозиториев
|
||
|
||
Список популярных репозиториев:
|
||
|
||
```bash
|
||
# Официальный Helm репозиторий
|
||
make k8s helmrepo add kubernetes stable https://charts.helm.sh/stable
|
||
|
||
# Bitnami (большая коллекция чартов)
|
||
make k8s helmrepo add kubernetes bitnami https://charts.bitnami.com/bitnami
|
||
|
||
# NGINX Inc
|
||
make k8s helmrepo add kubernetes nginx https://helm.nginx.com/stable
|
||
|
||
# Prometheus Community
|
||
make k8s helmrepo add kubernetes prometheus-community https://prometheus-community.github.io/helm-charts
|
||
|
||
# Istio
|
||
make k8s helmrepo add kubernetes istio https://istio-release.storage.googleapis.com/charts
|
||
|
||
# Информация о репозиториях
|
||
make k8s helmrepo list kubernetes
|
||
```
|
||
|
||
### Обновление репозиториев
|
||
|
||
```bash
|
||
make k8s helmrepo update kubernetes
|
||
```
|
||
|
||
### Поиск чартов
|
||
|
||
```bash
|
||
# Просмотр всех чартов в репозитории
|
||
make k8s helmrepo packages kubernetes bitnami
|
||
|
||
# Поиск конкретного чарта
|
||
make k8s helmrepo packages kubernetes bitnami | grep nginx
|
||
|
||
# Поиск в нескольких репозиториях
|
||
make k8s helmrepo packages kubernetes bitnami | grep redis
|
||
make k8s helmrepo packages kubernetes stable | grep postgresql
|
||
```
|
||
|
||
### Установка Helm чартов
|
||
|
||
#### Пример 1: Установка Redis
|
||
|
||
```bash
|
||
# Добавить репозиторий
|
||
make k8s helmrepo add kubernetes bitnami https://charts.bitnami.com/bitnami
|
||
|
||
# Обновить индекс
|
||
make k8s helmrepo update kubernetes
|
||
|
||
# Установить Redis
|
||
make k8s helm apply kubernetes redis bitnami/redis
|
||
|
||
# Проверить статус
|
||
make k8s helm status kubernetes redis
|
||
|
||
# Посмотреть список релизов
|
||
make k8s helm list kubernetes
|
||
```
|
||
|
||
#### Пример 2: Установка PostgreSQL
|
||
|
||
```bash
|
||
make k8s helm apply kubernetes postgres bitnami/postgresql
|
||
make k8s helm status kubernetes postgres
|
||
```
|
||
|
||
#### Пример 3: Установка Nginx Ingress через Helm
|
||
|
||
```bash
|
||
# Добавить репозиторий (если еще не добавлен)
|
||
make k8s helmrepo add kubernetes nginx https://helm.nginx.com/stable
|
||
|
||
# Обновить индекс
|
||
make k8s helmrepo update kubernetes
|
||
|
||
# Установить NGINX Ingress
|
||
make k8s helm apply kubernetes nginx-ingress nginx/nginx-ingress-controller
|
||
|
||
# Проверить
|
||
make k8s helm status kubernetes nginx-ingress
|
||
```
|
||
|
||
### Обновление Helm релизов
|
||
|
||
```bash
|
||
# Обновить релиз до последней версии
|
||
make k8s helm update kubernetes redis bitnami/redis
|
||
|
||
# Проверить после обновления
|
||
make k8s helm status kubernetes redis
|
||
```
|
||
|
||
### Откат Helm релизов
|
||
|
||
```bash
|
||
# Откатить к предыдущей версии
|
||
make k8s helm rollback kubernetes redis
|
||
|
||
# Проверить статус после отката
|
||
make k8s helm status kubernetes redis
|
||
```
|
||
|
||
### Удаление Helm релизов
|
||
|
||
```bash
|
||
# Удалить релиз
|
||
make k8s helm delete kubernetes redis
|
||
make k8s helm delete kubernetes postgres
|
||
```
|
||
|
||
## Настройка Ingress
|
||
|
||
### Установка NGINX Ingress Controller
|
||
|
||
Ingress контроллер обычно устанавливается при создании кластера с пресетом `kubernetes`. Если нужна переустановка:
|
||
|
||
```bash
|
||
# Через манифест
|
||
make k8s manifest apply kubernetes \
|
||
https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml
|
||
|
||
# Или через Helm
|
||
make k8s helmrepo add kubernetes nginx https://helm.nginx.com/stable
|
||
make k8s helm apply kubernetes nginx-ingress nginx/nginx-ingress-controller
|
||
```
|
||
|
||
### Создание Ingress ресурса
|
||
|
||
Создайте файл `example-ingress.yaml`:
|
||
|
||
```yaml
|
||
apiVersion: v1
|
||
kind: Service
|
||
metadata:
|
||
name: hello-service
|
||
spec:
|
||
selector:
|
||
app: hello
|
||
ports:
|
||
- port: 80
|
||
targetPort: 8080
|
||
---
|
||
apiVersion: apps/v1
|
||
kind: Deployment
|
||
metadata:
|
||
name: hello-deployment
|
||
spec:
|
||
replicas: 2
|
||
selector:
|
||
matchLabels:
|
||
app: hello
|
||
template:
|
||
metadata:
|
||
labels:
|
||
app: hello
|
||
spec:
|
||
containers:
|
||
- name: hello
|
||
image: hashicorp/http-echo:latest
|
||
args:
|
||
- "-text=Hello from Kubernetes!"
|
||
ports:
|
||
- containerPort: 8080
|
||
---
|
||
apiVersion: networking.k8s.io/v1
|
||
kind: Ingress
|
||
metadata:
|
||
name: hello-ingress
|
||
annotations:
|
||
nginx.ingress.kubernetes.io/rewrite-target: /
|
||
spec:
|
||
rules:
|
||
- host: hello.local
|
||
http:
|
||
paths:
|
||
- path: /
|
||
pathType: Prefix
|
||
backend:
|
||
service:
|
||
name: hello-service
|
||
port:
|
||
number: 80
|
||
```
|
||
|
||
Примените манифест:
|
||
|
||
```bash
|
||
make k8s manifest apply kubernetes ./example-ingress.yaml
|
||
```
|
||
|
||
Проверьте доступность:
|
||
|
||
```bash
|
||
# Добавьте запись в /etc/hosts
|
||
echo "127.0.0.1 hello.local" | sudo tee -a /etc/hosts
|
||
|
||
# Откройте в браузере или проверьте через curl
|
||
curl http://hello.local:8081
|
||
```
|
||
|
||
### TLS Ingress
|
||
|
||
Создайте TLS сертификат и добавьте в Ingress:
|
||
|
||
```yaml
|
||
apiVersion: networking.k8s.io/v1
|
||
kind: Ingress
|
||
metadata:
|
||
name: hello-tls-ingress
|
||
annotations:
|
||
nginx.ingress.kubernetes.io/rewrite-target: /
|
||
spec:
|
||
tls:
|
||
- hosts:
|
||
- hello.local
|
||
secretName: tls-secret
|
||
rules:
|
||
- host: hello.local
|
||
http:
|
||
paths:
|
||
- path: /
|
||
pathType: Prefix
|
||
backend:
|
||
service:
|
||
name: hello-service
|
||
port:
|
||
number: 80
|
||
```
|
||
|
||
## Мониторинг и аддоны
|
||
|
||
### Prometheus Stack
|
||
|
||
Prometheus Stack устанавливается автоматически при создании кластера с пресетом `kubernetes`.
|
||
|
||
#### Доступ к Grafana
|
||
|
||
```bash
|
||
# 1. Получите пароль администратора
|
||
kubectl --kubeconfig kubeconfig get secret monitoring-grafana \
|
||
-n monitoring -o jsonpath="{.data.admin-password}" | base64 -d
|
||
|
||
# 2. Откройте браузер
|
||
# URL: http://localhost:3000
|
||
# Username: admin
|
||
# Password: [результат из команды выше]
|
||
```
|
||
|
||
#### Доступ к Prometheus
|
||
|
||
```bash
|
||
# URL: http://localhost:9090
|
||
# Откройте в браузере для просмотра метрик
|
||
```
|
||
|
||
#### Просмотр метрик
|
||
|
||
```bash
|
||
# Получить список метрик
|
||
curl http://localhost:9090/api/v1/label/__name__/values
|
||
|
||
# Запрос конкретной метрики
|
||
curl 'http://localhost:9090/api/v1/query?query=up'
|
||
```
|
||
|
||
### Установка дополнительных инструментов мониторинга
|
||
|
||
#### Loki для логов
|
||
|
||
```bash
|
||
# Добавить репозиторий Grafana
|
||
make k8s helmrepo add kubernetes grafana https://grafana.github.io/helm-charts
|
||
|
||
# Установить Loki
|
||
make k8s helm apply kubernetes loki grafana/loki-stack
|
||
|
||
# Проверить статус
|
||
make k8s helm status kubernetes loki
|
||
```
|
||
|
||
#### Jaeger для трейсинга
|
||
|
||
```bash
|
||
# Добавить репозиторий Jaeger
|
||
make k8s helmrepo add kubernetes jaegertracing https://jaegertracing.github.io/helm-charts
|
||
|
||
# Установить Jaeger
|
||
make k8s helm apply kubernetes jaeger jaegertracing/jaeger
|
||
|
||
# Проверить статус
|
||
make k8s helm status kubernetes jaeger
|
||
```
|
||
|
||
## Service Mesh с Istio
|
||
|
||
### Установка Istio
|
||
|
||
Istio устанавливается автоматически при создании кластера с пресетом `kubernetes`.
|
||
|
||
### Ручная установка Istio
|
||
|
||
```bash
|
||
# Добавить репозиторий Istio
|
||
make k8s helmrepo add kubernetes istio https://istio-release.storage.googleapis.com/charts
|
||
|
||
# Установить Istio base
|
||
make k8s helm apply kubernetes istio-base istio/base
|
||
|
||
# Установить Istiod (control plane)
|
||
make k8s helm apply kubernetes istiod istio/istiod \
|
||
--set values.global.istiod.enableAnalysis=true
|
||
|
||
# Установить Istio Ingress Gateway
|
||
make k8s helm apply kubernetes istio-ingress istio/gateway
|
||
```
|
||
|
||
### Kiali для визуализации Istio
|
||
|
||
Kiali устанавливается автоматически с пресетом `kubernetes`.
|
||
|
||
#### Доступ к Kiali
|
||
|
||
```bash
|
||
# URL: http://localhost:20001
|
||
# Откройте в браузере для визуализации Service Mesh
|
||
|
||
# Настройки доступа
|
||
# Username: admin
|
||
# Password: admin (если используется анонимный доступ)
|
||
```
|
||
|
||
#### Ручная установка Kiali
|
||
|
||
```bash
|
||
# Добавить репозиторий Kiali
|
||
make k8s helmrepo add kubernetes kiali https://kiali.org/helm-charts
|
||
|
||
# Установить Kiali
|
||
make k8s helm apply kubernetes kiali-server kiali/kiali-server \
|
||
--set auth.strategy=anonymous \
|
||
--set deployment.ingress.enabled=true \
|
||
--set server.web_root="/"
|
||
|
||
# Проверить статус
|
||
make k8s helm status kubernetes kiali-server
|
||
```
|
||
|
||
### Пример приложения с Istio
|
||
|
||
Создайте файл `istio-app.yaml`:
|
||
|
||
```yaml
|
||
apiVersion: v1
|
||
kind: Namespace
|
||
metadata:
|
||
name: bookinfo
|
||
labels:
|
||
istio-injection: enabled
|
||
---
|
||
apiVersion: v1
|
||
kind: Service
|
||
metadata:
|
||
name: productpage
|
||
namespace: bookinfo
|
||
spec:
|
||
ports:
|
||
- port: 9080
|
||
name: http
|
||
targetPort: 9080
|
||
selector:
|
||
app: productpage
|
||
---
|
||
apiVersion: apps/v1
|
||
kind: Deployment
|
||
metadata:
|
||
name: productpage
|
||
namespace: bookinfo
|
||
spec:
|
||
replicas: 1
|
||
selector:
|
||
matchLabels:
|
||
app: productpage
|
||
template:
|
||
metadata:
|
||
labels:
|
||
app: productpage
|
||
spec:
|
||
containers:
|
||
- name: productpage
|
||
image: istio/examples-bookinfo-productpage-v1:latest
|
||
ports:
|
||
- containerPort: 9080
|
||
```
|
||
|
||
Примените:
|
||
|
||
```bash
|
||
make k8s manifest apply kubernetes ./istio-app.yaml
|
||
```
|
||
|
||
## Примеры полных развертываний
|
||
|
||
### Пример 1: WordPress с MySQL
|
||
|
||
```bash
|
||
# 1. Установить MySQL через Helm
|
||
make k8s helmrepo add kubernetes bitnami https://charts.bitnami.com/bitnami
|
||
make k8s helm apply kubernetes mysql bitnami/mysql \
|
||
--set auth.rootPassword=secretpassword
|
||
|
||
# 2. Создать манифест для WordPress
|
||
cat > wordpress.yaml <<EOF
|
||
apiVersion: apps/v1
|
||
kind: Deployment
|
||
metadata:
|
||
name: wordpress
|
||
spec:
|
||
replicas: 2
|
||
selector:
|
||
matchLabels:
|
||
app: wordpress
|
||
template:
|
||
metadata:
|
||
labels:
|
||
app: wordpress
|
||
spec:
|
||
containers:
|
||
- name: wordpress
|
||
image: wordpress:latest
|
||
env:
|
||
- name: WORDPRESS_DB_HOST
|
||
value: mysql.default.svc.cluster.local
|
||
- name: WORDPRESS_DB_USER
|
||
value: root
|
||
- name: WORDPRESS_DB_PASSWORD
|
||
value: secretpassword
|
||
ports:
|
||
- containerPort: 80
|
||
---
|
||
apiVersion: v1
|
||
kind: Service
|
||
metadata:
|
||
name: wordpress
|
||
spec:
|
||
selector:
|
||
app: wordpress
|
||
ports:
|
||
- port: 80
|
||
---
|
||
apiVersion: networking.k8s.io/v1
|
||
kind: Ingress
|
||
metadata:
|
||
name: wordpress-ingress
|
||
spec:
|
||
rules:
|
||
- host: wordpress.local
|
||
http:
|
||
paths:
|
||
- path: /
|
||
pathType: Prefix
|
||
backend:
|
||
service:
|
||
name: wordpress
|
||
port:
|
||
number: 80
|
||
EOF
|
||
|
||
# 3. Применить манифест
|
||
make k8s manifest apply kubernetes ./wordpress.yaml
|
||
```
|
||
|
||
### Пример 2: Многоуровневое приложение с мониторингом
|
||
|
||
```bash
|
||
# 1. Установить Redis
|
||
make k8s helmrepo add kubernetes bitnami https://charts.bitnami.com/bitnami
|
||
make k8s helm apply kubernetes redis bitnami/redis
|
||
|
||
# 2. Установить PostgreSQL
|
||
make k8s helm apply kubernetes postgres bitnami/postgresql
|
||
|
||
# 3. Создать приложение
|
||
cat > app.yaml <<EOF
|
||
apiVersion: apps/v1
|
||
kind: Deployment
|
||
metadata:
|
||
name: api-server
|
||
spec:
|
||
replicas: 3
|
||
selector:
|
||
matchLabels:
|
||
app: api
|
||
template:
|
||
metadata:
|
||
labels:
|
||
app: api
|
||
version: v1
|
||
spec:
|
||
containers:
|
||
- name: api
|
||
image: nginx:alpine
|
||
ports:
|
||
- containerPort: 80
|
||
env:
|
||
- name: REDIS_HOST
|
||
value: redis-master.default.svc.cluster.local
|
||
- name: POSTGRES_HOST
|
||
value: postgresql-postgresql.default.svc.cluster.local
|
||
---
|
||
apiVersion: v1
|
||
kind: Service
|
||
metadata:
|
||
name: api-service
|
||
spec:
|
||
selector:
|
||
app: api
|
||
ports:
|
||
- port: 80
|
||
---
|
||
apiVersion: networking.k8s.io/v1
|
||
kind: Ingress
|
||
metadata:
|
||
name: api-ingress
|
||
spec:
|
||
rules:
|
||
- host: api.local
|
||
http:
|
||
paths:
|
||
- path: /
|
||
pathType: Prefix
|
||
backend:
|
||
service:
|
||
name: api-service
|
||
port:
|
||
number: 80
|
||
EOF
|
||
|
||
# 4. Применить
|
||
make k8s manifest apply kubernetes ./app.yaml
|
||
```
|
||
|
||
### Пример 3: CI/CD с Jenkins в Kubernetes
|
||
|
||
```bash
|
||
# 1. Установить Jenkins
|
||
make k8s helmrepo add kubernetes jenkins https://charts.jenkins.io
|
||
make k8s helm apply kubernetes jenkins jenkins/jenkins \
|
||
--set persistence.enabled=true \
|
||
--set controller.installPlugins.enabled=true
|
||
|
||
# 2. Получить пароль администратора
|
||
kubectl --kubeconfig kubeconfig exec \
|
||
-n default svc/jenkins -c jenkins -- \
|
||
cat /run/secrets/additional/chart-admin-password
|
||
```
|
||
|
||
## Полезные команды и советы
|
||
|
||
### Мониторинг ресурсов
|
||
|
||
```bash
|
||
# Просмотр использования ресурсов узлами
|
||
kubectl --kubeconfig kubeconfig top nodes
|
||
|
||
# Просмотр использования ресурсов подами
|
||
kubectl --kubeconfig kubeconfig top pods
|
||
|
||
# Детальная информация о узле
|
||
kubectl --kubeconfig kubeconfig describe node lab-control-plane
|
||
```
|
||
|
||
### Отладка
|
||
|
||
```bash
|
||
# Просмотр логов пода
|
||
kubectl --kubeconfig kubeconfig logs <pod-name>
|
||
|
||
# Просмотр логов с follow
|
||
kubectl --kubeconfig kubeconfig logs -f <pod-name>
|
||
|
||
# Выполнить команду в поде
|
||
kubectl --kubeconfig kubeconfig exec -it <pod-name> -- /bin/sh
|
||
|
||
# Описание ресурса
|
||
kubectl --kubeconfig kubeconfig describe pod <pod-name>
|
||
kubectl --kubeconfig kubeconfig describe service <service-name>
|
||
```
|
||
|
||
### Масштабирование
|
||
|
||
```bash
|
||
# Масштабировать Deployment
|
||
kubectl --kubeconfig kubeconfig scale deployment <deployment-name> --replicas=5
|
||
|
||
# Автомасштабирование (требует metrics-server)
|
||
kubectl --kubeconfig kubeconfig autoscale deployment <deployment-name> \
|
||
--cpu-percent=70 --min=2 --max=10
|
||
```
|
||
|
||
### Экспорт конфигурации
|
||
|
||
```bash
|
||
# Экспортировать ресурс в YAML
|
||
kubectl --kubeconfig kubeconfig get deployment <name> -o yaml > exported.yaml
|
||
|
||
# Экспортировать все ресурсы namespace
|
||
kubectl --kubeconfig kubeconfig get all -n <namespace> -o yaml > all-resources.yaml
|
||
```
|
||
|
||
## Безопасность
|
||
|
||
### Использование Secrets
|
||
|
||
```bash
|
||
# Создать Secret из файла
|
||
kubectl --kubeconfig kubeconfig create secret generic my-secret \
|
||
--from-file=username=./username.txt \
|
||
--from-file=password=./password.txt
|
||
|
||
# Создать Secret из литерала
|
||
kubectl --kubeconfig kubeconfig create secret generic my-secret \
|
||
--from-literal=username=admin \
|
||
--from-literal=password=secret123
|
||
```
|
||
|
||
### Network Policies
|
||
|
||
Создайте файл `network-policy.yaml`:
|
||
|
||
```yaml
|
||
apiVersion: networking.k8s.io/v1
|
||
kind: NetworkPolicy
|
||
metadata:
|
||
name: test-network-policy
|
||
namespace: default
|
||
spec:
|
||
podSelector:
|
||
matchLabels:
|
||
role: db
|
||
policyTypes:
|
||
- Ingress
|
||
- Egress
|
||
ingress:
|
||
- from:
|
||
- podSelector:
|
||
matchLabels:
|
||
role: api
|
||
ports:
|
||
- protocol: TCP
|
||
port: 5432
|
||
egress:
|
||
- to:
|
||
- podSelector:
|
||
matchLabels:
|
||
role: api
|
||
ports:
|
||
- protocol: TCP
|
||
port: 5432
|
||
```
|
||
|
||
Примените:
|
||
|
||
```bash
|
||
make k8s manifest apply kubernetes ./network-policy.yaml
|
||
```
|
||
|
||
## Заключение
|
||
|
||
AnsibleLab предоставляет полный набор инструментов для работы с Kubernetes кластерами локально. Вы можете:
|
||
|
||
- Создавать и управлять кластерами
|
||
- Устанавливать и настраивать приложения
|
||
- Работать с мониторингом и Service Mesh
|
||
- Тестировать перед развертыванием в production
|
||
|
||
Все инструменты работают внутри Docker контейнеров, что обеспечивает изоляцию и переносимость.
|
||
|
||
## Автор
|
||
|
||
Сергей Антропов
|
||
Сайт: https://devops.org.ru
|