init
This commit is contained in:
123
01-introduction/02-installation/README.md
Normal file
123
01-introduction/02-installation/README.md
Normal file
@@ -0,0 +1,123 @@
|
||||
# Урок 1.2 — Установка и настройка Kyverno
|
||||
|
||||
## 1. Добавить Helm репозиторий
|
||||
|
||||
```bash
|
||||
helm repo add kyverno https://kyverno.github.io/kyverno/
|
||||
helm repo update
|
||||
|
||||
# Посмотреть доступные версии
|
||||
helm search repo kyverno/kyverno --versions | head -10
|
||||
```
|
||||
|
||||
## 2. Установка
|
||||
|
||||
### Development / Lab
|
||||
|
||||
```bash
|
||||
helm install kyverno kyverno/kyverno \
|
||||
--namespace kyverno \
|
||||
--create-namespace \
|
||||
--values values-development.yaml
|
||||
```
|
||||
|
||||
### Production
|
||||
|
||||
```bash
|
||||
helm install kyverno kyverno/kyverno \
|
||||
--namespace kyverno \
|
||||
--create-namespace \
|
||||
--values values-production.yaml
|
||||
```
|
||||
|
||||
## 3. Проверка установки
|
||||
|
||||
```bash
|
||||
# Статус подов
|
||||
kubectl get pods -n kyverno
|
||||
|
||||
# Все поды должны быть Running:
|
||||
# NAME READY STATUS RESTARTS
|
||||
# kyverno-admission-controller-xxx 1/1 Running 0
|
||||
# kyverno-background-controller-xxx 1/1 Running 0
|
||||
# kyverno-cleanup-controller-xxx 1/1 Running 0
|
||||
# kyverno-reports-controller-xxx 1/1 Running 0
|
||||
|
||||
# Проверить webhook конфигурации
|
||||
kubectl get validatingwebhookconfigurations | grep kyverno
|
||||
kubectl get mutatingwebhookconfigurations | grep kyverno
|
||||
|
||||
# Проверить что caBundle не пустой (признак корректной регистрации webhook)
|
||||
kubectl get validatingwebhookconfigurations \
|
||||
kyverno-resource-validating-webhook-cfg \
|
||||
-o jsonpath='{.webhooks[0].clientConfig.caBundle}' | wc -c
|
||||
|
||||
# Посмотреть события
|
||||
kubectl get events -n kyverno --sort-by='.lastTimestamp' | tail -20
|
||||
|
||||
# Логи admission controller
|
||||
kubectl logs -n kyverno \
|
||||
-l app.kubernetes.io/component=admission-controller \
|
||||
--tail=50
|
||||
```
|
||||
|
||||
## 4. Тестовая политика
|
||||
|
||||
```bash
|
||||
# Создать тестовую политику
|
||||
kubectl apply -f test-policy.yaml
|
||||
|
||||
# Попробовать создать ConfigMap без обязательного лейбла (должна быть ошибка)
|
||||
kubectl create configmap test-bad --from-literal=key=value -n default
|
||||
|
||||
# Создать правильный ConfigMap
|
||||
kubectl apply -f - <<EOF
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: test-good
|
||||
namespace: default
|
||||
labels:
|
||||
test: "true"
|
||||
data:
|
||||
key: value
|
||||
EOF
|
||||
|
||||
# Удалить тестовую политику
|
||||
kubectl delete -f test-policy.yaml
|
||||
kubectl delete configmap test-good -n default
|
||||
```
|
||||
|
||||
## 5. Обновление Kyverno
|
||||
|
||||
```bash
|
||||
# Обновить CRD отдельно (важно!)
|
||||
helm upgrade kyverno kyverno/kyverno \
|
||||
--namespace kyverno \
|
||||
--set crds.install=true \
|
||||
--values values-production.yaml
|
||||
|
||||
# Проверить статус политик после обновления
|
||||
kubectl get clusterpolicies -o wide
|
||||
```
|
||||
|
||||
## 6. Удаление Kyverno
|
||||
|
||||
```bash
|
||||
# ВНИМАНИЕ: сначала переведите критичные политики в Audit режим
|
||||
|
||||
# Удалить через Helm
|
||||
helm uninstall kyverno -n kyverno
|
||||
|
||||
# Удалить CRD
|
||||
kubectl delete crd $(kubectl get crd | grep kyverno | awk '{print $1}')
|
||||
|
||||
# Удалить webhook конфигурации (если остались)
|
||||
kubectl delete validatingwebhookconfigurations \
|
||||
$(kubectl get validatingwebhookconfigurations | grep kyverno | awk '{print $1}') \
|
||||
2>/dev/null || true
|
||||
|
||||
kubectl delete mutatingwebhookconfigurations \
|
||||
$(kubectl get mutatingwebhookconfigurations | grep kyverno | awk '{print $1}') \
|
||||
2>/dev/null || true
|
||||
```
|
||||
28
01-introduction/02-installation/test-policy.yaml
Normal file
28
01-introduction/02-installation/test-policy.yaml
Normal file
@@ -0,0 +1,28 @@
|
||||
apiVersion: kyverno.io/v1
|
||||
kind: ClusterPolicy
|
||||
metadata:
|
||||
name: test-installation-policy
|
||||
annotations:
|
||||
policies.kyverno.io/title: "Тестовая политика установки"
|
||||
policies.kyverno.io/description: >-
|
||||
Временная политика для проверки корректности установки Kyverno.
|
||||
Удалите после проверки.
|
||||
spec:
|
||||
validationFailureAction: Enforce
|
||||
background: false
|
||||
rules:
|
||||
- name: require-test-label
|
||||
match:
|
||||
resources:
|
||||
kinds:
|
||||
- ConfigMap
|
||||
namespaces:
|
||||
- default
|
||||
validate:
|
||||
message: >-
|
||||
ConfigMap в namespace default должен иметь лейбл test=true.
|
||||
Это тестовая политика для проверки установки Kyverno.
|
||||
pattern:
|
||||
metadata:
|
||||
labels:
|
||||
test: "?*"
|
||||
31
01-introduction/02-installation/values-development.yaml
Normal file
31
01-introduction/02-installation/values-development.yaml
Normal file
@@ -0,0 +1,31 @@
|
||||
# values-development.yaml
|
||||
# Минимальная конфигурация для dev/lab окружения
|
||||
|
||||
replicaCount: 1
|
||||
|
||||
admissionController:
|
||||
replicas: 1
|
||||
resources:
|
||||
limits:
|
||||
cpu: 500m
|
||||
memory: 256Mi
|
||||
requests:
|
||||
cpu: 100m
|
||||
memory: 128Mi
|
||||
|
||||
backgroundController:
|
||||
replicas: 1
|
||||
resources:
|
||||
limits:
|
||||
cpu: 200m
|
||||
memory: 128Mi
|
||||
|
||||
reportsController:
|
||||
replicas: 1
|
||||
|
||||
cleanupController:
|
||||
replicas: 1
|
||||
|
||||
config:
|
||||
webhooks:
|
||||
timeoutSeconds: 10
|
||||
73
01-introduction/02-installation/values-production.yaml
Normal file
73
01-introduction/02-installation/values-production.yaml
Normal file
@@ -0,0 +1,73 @@
|
||||
# values-production.yaml
|
||||
# Production-ready конфигурация с HA и мониторингом
|
||||
|
||||
replicaCount: 3
|
||||
|
||||
admissionController:
|
||||
replicas: 3
|
||||
|
||||
podDisruptionBudget:
|
||||
enabled: true
|
||||
minAvailable: 2
|
||||
|
||||
resources:
|
||||
limits:
|
||||
cpu: 1000m
|
||||
memory: 512Mi
|
||||
requests:
|
||||
cpu: 100m
|
||||
memory: 128Mi
|
||||
|
||||
# Распределение по разным нодам
|
||||
topologySpreadConstraints:
|
||||
- maxSkew: 1
|
||||
topologyKey: kubernetes.io/hostname
|
||||
whenUnsatisfiable: DoNotSchedule
|
||||
labelSelector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/component: admission-controller
|
||||
|
||||
# Метрики для Prometheus Operator
|
||||
serviceMonitor:
|
||||
enabled: true
|
||||
metricsService:
|
||||
create: true
|
||||
port: 8000
|
||||
|
||||
extraArgs:
|
||||
- --v=2
|
||||
- --loggingFormat=json
|
||||
|
||||
backgroundController:
|
||||
replicas: 2
|
||||
resources:
|
||||
limits:
|
||||
cpu: 500m
|
||||
memory: 256Mi
|
||||
requests:
|
||||
cpu: 100m
|
||||
memory: 128Mi
|
||||
extraArgs:
|
||||
- --v=2
|
||||
- --loggingFormat=json
|
||||
|
||||
reportsController:
|
||||
replicas: 2
|
||||
resources:
|
||||
limits:
|
||||
cpu: 200m
|
||||
memory: 128Mi
|
||||
extraArgs:
|
||||
- --v=2
|
||||
|
||||
cleanupController:
|
||||
replicas: 2
|
||||
|
||||
config:
|
||||
webhooks:
|
||||
# Если Kyverno не ответил за 10 секунд — API Server применяет failurePolicy
|
||||
timeoutSeconds: 10
|
||||
|
||||
# Автоматическая очистка webhook-конфигураций при удалении Kyverno
|
||||
webhooksCleanup:
|
||||
enabled: true
|
||||
Reference in New Issue
Block a user