You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@@ -596,19 +596,19 @@ Ctrl+C для остановки контейнера
596
596
Это платформа с открытым исходным кодом для развертывания, масштабирования, управления и контроля контейнеризованных приложений либо сервисов.
597
597
598
598
__Kubernetes делает следующее:__
599
-
+ Управляет и запускает контейнеры
600
-
+ Балансирует сетевой трафик между узлами кластера Kubernetes и количеством реплик контейнеров
601
-
+ Осуществляет контроль состояния, автоматические развертывания и откаты реплик контейнеров внутри узлов кластера Kubernetes
602
-
+ Осуществляет распределение нагрузки между узлами кластера Kubernetes
603
-
+ Предоставляет автоматическое монтирование систем хранения для контейнеров
599
+
+ Управляет и запускает контейнеры.
600
+
+ Балансирует сетевой трафик между узлами кластера Kubernetes и количеством реплик контейнеров. Можно раскатить один образ на несколько Воркер нодов, получив разные IP порты и DNS имя, а кубер сделает Load Balancing между этими контейнерами
601
+
+ Осуществляет контроль состояния, автоматические развертывания и откаты реплик контейнеров внутри узлов кластера Kubernetes.
602
+
+ Осуществляет распределение нагрузки между узлами кластера Kubernetes. Например управление ресурсами при развертывания нового контейнера
603
+
+ Предоставляет автоматическое монтирование систем хранения для контейнеров. Например прикрепить локальный или облачный диск к одному или нескольким докер контейнерам
604
604
+ Предоставляет декларативный API и CLI для управления
605
605
+ И еще множество полезных, и не очень, модулей и сервисов, которые можно развернуть для управления автоматизацией, инфраструктурой и контейнерами
606
606
607
607
__Kubernetes не делает следующее:__
608
608
+ Не собирает контейнеры с исходным кодом вашего приложения или сервиса
609
609
+ Не предоставляет процессы и решения непрерывной интеграции (CI)
610
610
+ Не включает в себя решения и системы сбора журналов и метрик
611
-
+ Не включает в себя решения и системы хранения данных
611
+
+ Не включает в себя решения и системы хранения данных. Только подключение сторонних
612
612
+ Не включает в себя решения и системы хранения контейнеров (registry)
613
613
+ Не включает в себя решения и системы от всех бед и болячек инфраструктуры
614
614
@@ -640,22 +640,28 @@ Kubernetes, так как он был реализован как облачно
640
640
641
641
Если вы решились ставить Kubernetes внутри, на своих собственных ресурсах, то вам придется позаботиться о развёртывании и обслуживании такой инфраструктуры вокруг кластера как: репозиторий для контейнеров, внешние или внутренние балансировщики, сетевые хранилища, хранилище секретов, решения для сбора логов и метрик. Также важна и внутренняя инфраструктура “кубера”: CertManager, Ingress, Istio и другие.
642
642
643
-
Сам кластер K8S состоит из рабочих узлов. В узлах или нодах (Nodes, Worker nodes), помимо контейнеров компонентов самого кластера, размещаются контейнеры наших проектов и сервисов.
643
+
1) Основной компонент K8S состоит из __Кластера (Cluster)__
644
644
645
-
__Worker nodes__ состоит из компонентов:
645
+
Сам кластер состоит из __узлов или нодах (Nodes)__, в которых помимо контейнеров компонентов самого кластера, размещаются контейнеры наших проектов и сервисов.
646
+
647
+
2)__Worker nodes__ - сервер, на котором запускаются и работают контейнеры
648
+
649
+
Состоит из компонентов:
646
650
647
651
+ kubelet - сервис или агент, который контролирует запуск компонентов (контейнеров) кластера
648
652
+ kube-proxy - конфигурирует правила сети на узлах
649
653
650
-
Плоскость управления (__Master nodes__) управляет рабочими узлами и подами в кластере. Там располагаются компоненты, которые управляют узлами кластера и предоставляют доступ к API.
654
+
3)Плоскость управления (__Master nodes__) управляет рабочими узлами и подами в кластере. Там располагаются компоненты, которые управляют узлами кластера и предоставляют доступ к API.
651
655
652
-
__Control plane__ состоит из компонентов:
656
+
__Control plane__или Kubernete Master, состоит из компонентов:
653
657
654
658
+ kube-apiserver - предоставляет API кубера
655
-
+ etcd - распределенное key-value хранилище для всех данных кластера. Необязательно располагается внутри мастера, может стоять как отдельный кластер
656
659
+ kube-scheduler - планирует размещение подов на узлах кластера
657
660
+ kube-controller-manager - запускает контроллеры
658
661
+ kubelet - сервис или агент, который контролирует запуск основных компонентов (контейнеров) кластер
662
+
+ etcd - распределенное key-value хранилище для всех данных кластера. Необязательно располагается внутри мастера, может стоять как отдельный кластер
663
+
664
+
Когда запускаем команды управления они всегда посылаются именно на Master nodes. С воркер нодами напрямую не работаем.
659
665
660
666
__Виды контроллеров__
661
667
+ Deployments - контроллер, который управляет состоянием развертывания подов, которое описывается в манифесте, следит за удалением и созданием экземпляров подов. Управляет контроллерами ReplicaSet.
@@ -667,6 +673,30 @@ __Виды контроллеров__
667
673
668
674
[к оглавлению](#Docker)
669
675
676
+
## Kubernet Cluster
677
+
678
+
Состоит минимум из одного (для непрерывной и безопасной работы может быть больше), Мастер нода. И минимум один Воркер нод (на практике их обычно больше)
679
+
680
+
В мастер ноде указываем откуда брать Docker Images (из Dockerhub, AWS Container Registry ECR, Google Container Registry, Azure Container Registry и тд). Контейнеры разворачиваются на воркер нодах, заполняя память и процессоры. Если ресурсов будет не хватать, кубер может предложить масштабироваться, добавив еще воркер нодов.
681
+
```java
682
+
//minikube исп для управления при локальном запуске. при работе с AWS, Google кластером и тд нужно использовать соответствующий кластер и систему управления
683
+
minikube start -p NAME- запустить с нашим именем
684
+
minikube start --cpus=2--memory=4gb/4000mb --disk-size=20gb - с конкретными ресурсами
685
+
minikube start --no-vtx-check - если ошибка и просить включить виртуализацию в биосе
686
+
minikube ssh - зайти внутрь виртуальной машины (можно через VirtualBox)
687
+
688
+
689
+
kubectl get componentstatuses - состояние кластера
690
+
kubectl cluster-info - инфа о кластере
691
+
kubectl get nodes
692
+
kubectl version --client
693
+
694
+
```
695
+
696
+
Чтобы загрузить Докер образ в кластер нужно
697
+
698
+
[к оглавлению](#Docker)
699
+
670
700
## Kubectl
671
701
При работе с кластером нам потребуется инструмент командной строки kubectl. https://Kubernetes.io/ru/docs/tasks/tools/install-kubectl/
672
702
@@ -704,10 +734,154 @@ kubectl apply -f https://K8S.io/manifest - создать ресурсы из UR
704
734
705
735
[к оглавлению](#Docker)
706
736
707
-
## Компоненты и архитектура Kubernetes
737
+
## Основные Обьекты Kubernetes
738
+
739
+
Контейнер не является обьектом K8S - это обьект Докера)
740
+
741
+
1) Pod - самый маленький обьект Кубера, который мы можем создать. Состоит из контейнера (обычно) или нескольких контейнеров (если надо). Чаще один, чтобы при масштабировании не плодить лишние копии
742
+
2) Deployment - состоит из одного или нескольких одинаковых Подов, даже если в разных Нодах
743
+
3) Service - дает доступ к Подам, которые в Деплое, через ClusterIP, NodePort, LoadBalancer, ExternalName
744
+
4) Nodes - сервера, где все это работает
745
+
5) Cluster - обьединение нодов
746
+
747
+
Т.е. расположены от меньше к большему и каждый следующий содержит предыдущие
708
748
709
749
[к оглавлению](#Docker)
710
750
711
-
## Компоненты и архитектура Kubernetes
751
+
## Kubernetes Pods
712
752
713
-
[к оглавлению](#Docker)
753
+
1) Запуск и управление из консоли
754
+
755
+
```java
756
+
kubectl run name --image=imageName --port=80- создание пода с именем name из образа imageName (если нет локально скачает с Докерхаба) на порту 80
757
+
kubectl get pods - список Подов
758
+
kubectl delete pods name - удалить Под с именем name
759
+
kubectl describe pods name - описание Пода name. Нода, на которой он развернут, его IP внутри кластера, контейнеры внутри Пода, Volums, последние Events и много другой инфы
760
+
kubectl exec name date - запустить команду в Поде, например date
761
+
kubectl exec -it name sh - запустить команду в Поде, например sh - консоль, и остаться внутри Пода
762
+
kubectl logs name - логи Пода name
763
+
kubectl port-forward name 7788:80- переносим с локального порта 7788 на порт 80 Пода name
764
+
Ctrl+C- выйти из Пода
765
+
```
766
+
2) Для запуска из YML файла
767
+
768
+
Сам файл, например простой pod-my-web-ver1.yaml:
769
+
```java
770
+
apiVersion : v1
771
+
kind:Pod
772
+
metadata:
773
+
name: my-web
774
+
labels:
775
+
env : prod
776
+
app : main
777
+
tier : fronted
778
+
owner :Shell26
779
+
spec:
780
+
containers:
781
+
- name : container-apache
782
+
image: httpd:latest
783
+
ports:
784
+
- containerPort:80
785
+
786
+
- name : container-api
787
+
image: tomcat:8.5.38
788
+
ports:
789
+
- containerPort:8080
790
+
```
791
+
И запускаем файл через консоль:
792
+
```java
793
+
kubectl apply -f ./pod-my-web-ver1.yaml
794
+
```
795
+
796
+
Если изменили файл, убиваем старый Под собранный из файла и запускаем новый:
797
+
```java
798
+
kubectl delete -f ./pod-my-web-ver1.yaml
799
+
kubectl apply -f ./pod-my-web-ver1.yaml
800
+
```
801
+
__Без удаления можно менять только поле image, иначе ошибка. Достаточно повторно запустить kubectl apply__
802
+
803
+
[к оглавлению](#Docker)
804
+
805
+
## Kubernetes Deployment
806
+
807
+
Если что-то случится с Кластером и Нода умерла, то Кластер перезапустит Ноды, но Поды автоматически не пересоберутся. Для этого Поды создают через Девелопмент, а он управляет Подами
808
+
809
+
1) Из консоли:
810
+
```java
811
+
kubectl create deployments name --image httpd:latest
812
+
kubectl get deploy
813
+
kubectl describe deployments name
814
+
kubectl scale deployment name --replicas 4- создаст 4 копии и ReplicaSet, раскидав копии по разным Нодам
815
+
kubectl get rs - покажет ReplicaSet
816
+
kubectl autoscale deployment name --min=4--max=6--cpu-percent=80- автоматически масштабирует для загрузки cpu на 80 и создаст обьект HorizontalPodAutoscaler
817
+
kubectl get hpa - покажет HorizontalPodAutoscaler
818
+
kubectl rollout status deployment/name
819
+
kubectl set image deployment/name oldimagename=newimagename - обновим в нашем Деплое контейнер oldimagename на новый newimagename
820
+
kubectl rollout undo deployment/name - откатит на прошлую версию
821
+
kubectl rollout history deployment/name - покажет историю обновлений
822
+
kubectl rollout undo deployment/name --to-revision=2- откатит на версию 2
823
+
kubectl rollout restart deployment/name - пересоберет текущую версию
824
+
```
825
+
826
+
2) Из файла-манифеста deployment-simple.yaml:
827
+
828
+
```java
829
+
apiVersion : apps/v1
830
+
kind:Deployment
831
+
metadata:
832
+
name: my-web-deployment
833
+
labels:
834
+
app : my-k8s-application
835
+
spec:
836
+
replicas:2//сколько реплик делать на Нодах, если надо
837
+
selector://с какими Подами будет работать Deployment
838
+
matchLabels://с Подами которые совпадают по Lables
839
+
project: shell //именно такой
840
+
template://тут часть с Подами
841
+
metadata:
842
+
labels:
843
+
project: shell
844
+
spec:
845
+
containers:
846
+
- name : shell-web
847
+
image: httpd:latest
848
+
ports:
849
+
- containerPort:80
850
+
...//можно в этом же файле разделим тремя точками, можно в отдельном файле
851
+
apiVersion: autoscaling/v2
852
+
kind:HorizontalPodAutoscaler
853
+
metadata:
854
+
name: my-autoscaling
855
+
spec:
856
+
scaleTargetRef://что он автоскейлит?
857
+
apiVersion: apps/v2
858
+
kind:Deployment//Деплоймент
859
+
name: my-web-deployment //конкретно этот Деплоймент
860
+
minReplicas:3
861
+
maxReplacas:5
862
+
metrics://как скейлит, основываясь на чем?
863
+
- type:Resource//либо такой вариант
864
+
resource:
865
+
name: cpu
866
+
target:
867
+
type:Utilization
868
+
averageUtilization:90
869
+
- type:Resource//либо такой вариант
870
+
resource:
871
+
name: memory
872
+
target:
873
+
type:Utilization
874
+
averageUtilization:70
875
+
```
876
+
877
+
Запускаем Манифест-файл:
878
+
```java
879
+
kubectl apply -f ./deployment-simple.yaml
880
+
```
881
+
В итоге создаст два обьекта, Deployment и HorizontalPodAutoscaler
0 commit comments