Зам. руководителя отдела программирования АО "Калуга Астрал"
Backend Team Lead
DevOps специалист
telegram: @oleg_ovsienko
email: ovsienko@astral.ru
Почему Kubernetes?
Модули Kubernetes.
Компоненты Kubernetes.
Архитектура проекта АО5.
Мониторинг кластера.
Проблемы эксплуатации.
С чего начать?
Kubernetes (K8s)
Kubernetes - это система с открытым исходным кодом предназначенная для автоматизации развертывания, масштабирования и управления контейнеризованными приложениями.
master
node 1
node 2
...
Docker
kubelet
kube-proxu
Docker
kubelet
kube-proxy
etcd
API
Server
Controller
-manager
Scheduler
kubectl
YAML (Declarative DSL)
apiVersion: v1
kind: Pod
metadata:
name: abonents-app
labels:
tier: backend
spec:
containers:
- name: abonents-app
image: dockerhub/abonents.app:24018
ports:
- containerPort: 80apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: abonents-app
labels:
app: web-report
tier: backend
spec:
replicas: 3
selector:
matchLabels:
tier: backend
template:
metadata:
labels:
tier: backend
spec:
containers:
- name: abonents-app
image: dockerhub/abonents.app:24018apiVersion: apps/v1
kind: Deployment
metadata:
name: abonents-app
labels:
app: web-report
tier: backend
spec:
replicas: 3
selector:
matchLabels:
tier: backend
template:
metadata:
labels:
tier: backend
spec:
containers:
- name: abonents-app
image: dockerhub/abonents.app:24018apiVersion: v1
kind: Service
metadata:
name: abonents-app
spec:
selector:
tier: back
v: 1.2
ports:
- protocol: TCP
port: 80
targetPort: 8080Job = Pod +
Successful Completion
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
args:
- /bin/sh
- -c
- date; echo Hello from the Kubernetes
restartPolicy: OnFailure1. awsElasticBlockStore
2. azureDisk
3. azureFile
4. cephfs
5. cinder
6. configMap
7. csi
8. downwardAPI
9. emptyDir
10. fc (fibre channel)
11. flexVolume
12. flocker
13. gcePersistentDisk
14. gitRepo (deprecated)
15. glusterfs
16. hostPath
17. iscsi
18. local
19. nfs
20. persistentVolumeClaim
21. projected
22. portworxVolume
23. quobyte
24. rbd
25. scaleIO
26. secret
27. storageos
28. vsphereVolume
Types of Volumes
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
username: YWRtaW4= #base64 'admin'
password: MWYyZDFlMmU2N2Rm #base64 '1f2d1e2e67df'apiVersion: v1
kind: Pod
metadata:
name: secret-env-pod
spec:
containers:
- name: mycontainer
image: redis
env:
- name: SECRET_USERNAME
valueFrom:
secretKeyRef:
name: mysecret
key: username
- name: SECRET_PASSWORD
valueFrom:
secretKeyRef:
name: mysecret
key: password
restartPolicy: NeverapiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
labels:
app: nginx
spec:
serviceName: "nginx"
selector:
matchLabels:
app: nginx
replicas: 14
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: k8s.gcr.io/nginx-slim:0.8
ports:
- containerPort: 80
name: web
volumeMounts:
- name: www
mountPath: /usr/share/nginx/htmlapiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
labels:
app: nginx
name: nginx-daemon-set
spec:
template:
labels:
name: nginx-daemon-set
scheduler: poseidon
spec:
containers:
containers:
- name: nginx
image: "nginx:1.11.1-alpine"
ports:
- containerPort: 80apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: back-ingress
spec:
rules:
- host: my.app.com
- http:
paths:
- path: /backend
backend:
serviceName: back
servicePort: 80Kubernetes
nodes
Prometheus
Graphana
Telegram
1. Интеграция с системами CI/CD.
GitLab + K8s; Azure DevOps (TFS) + K8s
2. Смена IP адресов для nodes кластера k8s.
192.168.1.* -> 10.0.2.*
3. Использование тега latest для обозначения версий контейнеров.
image: postgres:latest
4. Чувствительность к версиям ядра Linux.
4.15.0-54-generic -> 5.0.2-050002-generic
5. Балансировка подов по worker nodes кластера.
6. Внезапное отключение nodes кластера.
7. PKI сертификаты
resources:
limits:
memory: 512Mi
requests:
memory: 256MiKUBELET_EXTRA_ARGS=" --event-qps=30 --event-burst=40 --kube-api-qps=30 --kube-api-burst=40 --registry-qps=20 --registry-burst=30 --system-reserved=cpu=500m,memory=1Gi,ephemeral-storage=1Gi "
master
node 1
node 2
...
Docker
kubelet
kube-proxu
Docker
kubelet
kube-proxy
etcd
API
Server
Controller
-manager
Scheduler
kubectl
+
Kubernetes Interactive Tutorial
telegram: @oleg_ovsienko
email: ovsienko@astral.ru