Введение
Kubernetes - это мощная система оркестрации контейнеров, которая помогает управлять и автоматизировать развертывание, масштабирование и эксплуатацию контейнерных приложений. В этой статье мы рассмотрим основы Kubernetes и научимся работать с ним.
Что такое Kubernetes?
- Контейнерная оркестрация: Управление контейнерами
- Автоматизация: Автоматическое развертывание и масштабирование
- Отказоустойчивость: Автоматическое восстановление
- Масштабируемость: Легкое масштабирование приложений
Архитектура Kubernetes
1. Основные компоненты
Control Plane
- API Server: Точка входа для управления кластером
- Scheduler: Планировщик размещения подов
- Controller Manager: Управление контроллерами
- etcd: Хранилище состояния кластера
Worker Nodes
- kubelet: Агент на каждом узле
- Container Runtime: Запуск контейнеров
- kube-proxy: Сетевой прокси
2. Основные концепции
Pod
1
2
3
4
5
6
7
8
9
10
| apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
|
Deployment
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| 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:latest
ports:
- containerPort: 80
|
Установка и настройка
1. Minikube
Установка Minikube
1
2
3
4
5
6
7
8
9
| # Windows (Chocolatey)
choco install minikube
# Linux
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
# macOS (Homebrew)
brew install minikube
|
Запуск кластера
1
2
3
4
5
| # Запуск Minikube
minikube start
# Проверка статуса
minikube status
|
2. kubectl
Установка kubectl
1
2
3
4
5
6
7
8
9
| # Windows (Chocolatey)
choco install kubernetes-cli
# Linux
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
# macOS (Homebrew)
brew install kubectl
|
Работа с приложениями
1. Развертывание приложения
Создание Deployment
1
2
3
4
5
6
| # Создание deployment
kubectl create deployment nginx --image=nginx:latest
# Проверка статуса
kubectl get deployments
kubectl get pods
|
Создание Service
1
2
3
4
5
6
7
8
9
10
11
| apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- port: 80
targetPort: 80
type: LoadBalancer
|
2. Масштабирование
Масштабирование Deployment
1
2
3
4
5
| # Увеличение количества реплик
kubectl scale deployment nginx --replicas=5
# Проверка статуса
kubectl get pods
|
Управление ресурсами
1. Конфигурация ресурсов
Ограничение ресурсов
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| apiVersion: v1
kind: Pod
metadata:
name: resource-pod
spec:
containers:
- name: app
image: my-app:latest
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
|
2. ConfigMap и Secrets
Создание ConfigMap
1
2
3
4
5
6
7
| apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
database_url: "mongodb://localhost:27017"
api_key: "your-api-key"
|
Создание Secret
1
2
3
4
5
6
7
8
| apiVersion: v1
kind: Secret
metadata:
name: app-secrets
type: Opaque
data:
username: YWRtaW4= # admin в base64
password: cGFzc3dvcmQ= # password в base64
|
Мониторинг и логирование
1. Мониторинг
Установка Prometheus
1
2
3
4
5
6
| # Добавление репозитория
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
# Установка Prometheus
helm install prometheus prometheus-community/prometheus
|
2. Логирование
Установка ELK Stack
1
2
3
4
5
| # Установка Elasticsearch
helm install elasticsearch elastic/elasticsearch
# Установка Kibana
helm install kibana elastic/kibana
|
Сетевая политика
1. Network Policies
Создание Network Policy
1
2
3
4
5
6
7
8
9
| apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-all
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
|
2. Ingress
Настройка Ingress
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-ingress
spec:
rules:
- host: app.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: app-service
port:
number: 80
|
Безопасность
1. RBAC
Создание Role
1
2
3
4
5
6
7
8
| apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "watch"]
|
Создание RoleBinding
1
2
3
4
5
6
7
8
9
10
11
12
| apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-pods
subjects:
- kind: User
name: jane
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io
|
2. Pod Security Policies
Создание Pod Security Policy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: restricted
spec:
privileged: false
allowPrivilegeEscalation: false
requiredDropCapabilities:
- ALL
volumes:
- 'configMap'
- 'emptyDir'
- 'projected'
- 'secret'
- 'downwardAPI'
hostNetwork: false
hostIPC: false
hostPID: false
|
CI/CD интеграция
1. Jenkins
Jenkinsfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'docker build -t my-app .'
}
}
stage('Deploy') {
steps {
sh 'kubectl apply -f k8s/'
}
}
}
}
|
2. GitLab CI
.gitlab-ci.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
| stages:
- build
- deploy
build:
stage: build
script:
- docker build -t my-app .
deploy:
stage: deploy
script:
- kubectl apply -f k8s/
|
Заключение
Kubernetes - это мощный инструмент для управления контейнерными приложениями. Понимание основ Kubernetes и правильное использование его возможностей поможет создавать надежные и масштабируемые системы.