Пост

Kubernetes для начинающих: основы контейнерной оркестрации

Подробное руководство по Kubernetes для начинающих. Изучите основы Kubernetes, развертывание приложений, управление кластером и лучшие практики контейнерной оркестрации.

Kubernetes для начинающих: основы контейнерной оркестрации

Введение

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 и правильное использование его возможностей поможет создавать надежные и масштабируемые системы.

Авторский пост защищен лицензией CC BY 4.0 .