ссылки:
|
1 2 3 4 5 6 7 8 |
www.youtube.com/watch?v=TwyhnBDOHPw https://minikube.sigs.k8s.io/docs/handbook/ https://helm.sh/ru/docs/intro/install/ Примеры от selectel: https://docs.selectel.ru/managed-kubernetes/clusters/connect-to-cluster/ https://docs.selectel.ru/managed-kubernetes/networks/set-up-ingress/ https://docs.selectel.ru/managed-kubernetes/networks/set-up-ingress/?install-ingress-controller=with-configuring-loadbalancer |
Задачи Kubernetes:
|
1 2 3 4 5 |
0. Деплоймент 1. Самовосстановление 2. Управление 3. Масштабирование 4. Баланс трафика |
Не задачи kubernetes:
|
1 2 3 4 |
Хранение данных Хранение образов (registry) Сборка образов Сбор журналов и метрик |
Общие понятия kubernetes:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
master node - сервер или вм машина - головной центр управления - центр принятия решений worker node - сервера или машины на которых запущены приложения, которыми управляет master noda master master master | | | --------------------------|-------------------------- | | | worker worker worker В свою очередь в master node: kubectl | api server --|-------------> scheduler | | -----> etcd | controller manager api server - именно с этим сервером абсолютно все общаются (you, etcd, scheduler, controller manager, node, pode, все и все) - etcd - это база данных, ключ значение, в этой базе хранится все значения что мы делаем с kubernetes scheduler - планировщик, тут принимается решения что куда деплоить controller manager - запущенный процесс, который следит за тем что бы kubernetes это сделал kubectl - через эту программу мы общаемся с "api server" (все управление kubernetes делается через нее) controle plane - это общее название api server + etcd + scheduler + control manager Deployment - это yaml файл в котором мы описывает что нам требуется от kubernetes ReplacaSet - подымает, следит за Pod (количество экземпляров, самовосстановление, желаемое состояние и т.д.) Pod - собственно наши приложение (doker контейнер или контейнеры) Трафик -> ingress controller -> node -> kube-proxy (service.yaml) / kubelet -> pod ingress - внешний трафик ingress controller - чаще всего это nginx, но также это может быть и haproxy и другое похожее ПО service.yaml - собственно управляет как подключится к pod (настройки для kube-proxy) Просто файлы настроек: deployment.yaml - для вашего приложения которое выбудете запускать в kubernetes service.yaml - файл с настройками для вашего приложения которое задает настройки для вашего приложения в kube-proxy kubelet - программа которая отвечает за разворачивание pod StatefulSet - это приложения, которые не живут в контейнерах, например базы данных (postgres, kafka, redis, etc..) DaemonSet - это приложения которое будет жить на каждой nod (например fluentd - сбор логов) |
minikube
|
1 2 3 4 5 6 7 |
https://minikube.sigs.k8s.io/docs/start/?arch=%2Flinux%2Fx86-64%2Fstable%2Fbinary+download curl -LO https://github.com/kubernetes/minikube/releases/latest/download/minikube-linux-amd64 sudo install minikube-linux-amd64 /usr/local/bin/minikube && rm minikube-linux-amd64 minikube start - запуск kubernetes minikube minikube dashboard - открыть дашборд minikube |
kubectl
|
1 2 3 |
kubectl get nodes - показать доступные nod kubectl get pods - показать запущенные pod kubectl apply -f deployment.yaml - пример запуска приложения (в файле deployment.yaml настройки для нашего приложения для kubernetes) |
Внешний kubernets:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
0. Для внешних подключений к kubernetes: export KUBECONFIG=$HOME/путь_до_конфига.yaml 1. helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx helm inspect values ingress-nginx/ingress-nginx > values.yaml 2. Фрагмент манифеста с блоком annotations: metadata: name: loadbalancer-name labels: app: nginx annotations: service.beta.kubernetes.io/openstack-internal-load-balancer: "true" 3. helm install ingress-nginx/ingress-nginx --generate-name -f values.yaml |
Примеры файлов:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
0. Создаем файл dokerfile, index.html, deployment.yaml, service.yaml: cat > dockerfile << "EOF" FROM nginx:alpine # Копируем простую HTML страницу COPY index.html /usr/share/nginx/html/ EXPOSE 80 EOF cat > index.html << "EOF" <!DOCTYPE html> <html> <head> <title>Hello World</title> </head> <body> <h1>Hello World from Kubernetes!</h1> <p>This is a simple web server running in a Docker container</p> <p>Server: <span id="server-info">Nginx</span></p> <p>Port: 80</p> </body> </html> EOF cat > deployment.yaml << "EOF" apiVersion: apps/v1 kind: Deployment metadata: name: hello-world-app labels: app: hello-world spec: replicas: 3 selector: matchLabels: app: hello-world template: metadata: labels: app: hello-world spec: containers: - name: hello-world-container image: hello-world-app:latest ports: - containerPort: 80 resources: requests: memory: "64Mi" cpu: "50m" limits: memory: "128Mi" cpu: "100m" EOF cat > service.yaml << "EOF" apiVersion: v1 kind: Service metadata: name: hello-world-service spec: selector: app: hello-world ports: - protocol: TCP port: 8080 targetPort: 80 type: LoadBalancer EOF Запуску: docker build -t hello-world-app:latest . kubectl apply -f deployment.yaml kubectl apply -f service.yaml kubectl get pods |