You are here

Kubernetes глазами новичка

Kubernetes - открытое программное обеспечение для автоматизации развёртывания, масштабирования контейнеризированных приложений и управления ими. Оригинальная версия была разработана компанией Google для внутренних нужд, впоследствии система передана под управление Cloud Native Computing Foundation. В Kubernetes все описывается при помощи yaml-файлов.

Концепции Kubernetes:

  • Nodes (node.md): Нода это машина в кластере Kubernetes.
  • Pods (pods.md): Pod это группа контейнеров с общими разделами, запускаемых как единое целое.
  • Replication Controllers (replication-controller.md): replication controller гарантирует, что определенное количество «реплик» pod'ы будут запущены в любой момент времени.
  • Services (services.md): Сервис в Kubernetes это абстракция которая определяет логический объединённый набор pod и политику доступа к ним.
  • Volumes (volumes.md): Volume(раздел) это директория, возможно, с данными в ней, которая доступна в контейнере.
  • Labels (labels.md): Label'ы это пары ключ/значение которые прикрепляются к объектам, например pod'ам. Label'ы могут быть использованы для создания и выбора наборов объектов.
  • Kubectl Command Line Interface (kubectl.md): kubectl интерфейс командной строки для управления Kubernetes.

Контроллер (controller) — это процесс, который управляет состоянием кластера, пытаясь привести его от фактического к желаемому; он делает это, оперируя набором подов, который определяется с помощью селекторов меток, являющихся частью определения контроллера[20]. Выполнение контроллеров обеспечивается компонентом Kubernetes Controller Manager. Один из типов контроллеров, самый известный — это контроллер репликации (Replication Controller), который обеспечивает масштабирование, запустив указанное количество копий пода в кластере. Он также обеспечивает запуск новых экземпляров пода, в том случае если узел, на котором работает управляемый этим контроллером под, выходит из строя. Другие контроллеры, входящие в основную систему Kubernetes, включают в себя «DaemonSet Controller», который обеспечивает запуск пода на каждой машине (или подмножеством машин) и «Job Controller» для запуска подов, которые выполняются до завершения, например, как часть пакетного задания.

Kubernetes предоставляет ряд средств для интеграции процессов разработки и развёртывания программного обеспечения, работающего под управлением этой системы. Среди наиболее часто используемых в этих целях инструментов:

  • Minikube — специализированная конфигурация Kubernetes, предназначенная для развёртывания на локальной машине, например, компьютере разработчика, применяется для изучения и локальных экспериментов над Kubernetes;
  • Helm — официальный менеджер пакетов Kubernetes, функциональный эквивалент apt-get и yum];
  • Monocular — веб-интерфейс для управления пакетами, упакованными в соответствии со стандартами Helm.

Команды kubectl:

  1. # Отразить api-resources
  2. kubectl api-resources
  3.  
  4. # отразить запущенные nodes
  5. kubectl get nodes
  6.  
  7. # отразить deployments
  8. kubectl get deployments
  9.  
  10. # отразить services
  11. kubectl get services
  12.  
  13. # отразить запущенные pods
  14. kubectl get pods
  15. # Подробнее
  16. kubectl describe pod/[namesPOD]
  17.  
  18. # запустить образ на порту 8080
  19. kubectl run hello-minikube --image=gcr.io/google_containers/echoserver:1.4 --port=8080
  20.  
  21. # открыть внешний IP для hello-minikube
  22. kubectl expose deployment hello-minikube --type=NodePort
  23. # delete service,deployment hello-minikube
  24. kubectl delete service,deployment hello-minikube
  25.  
  26. # Работа с configmaps:
  27. kubectl get configmaps
  28. kubectl get configmap {имя карты конфигурации} -o yaml
  29. kubectl edit configmap {имя конфигурации карты}
  30.  
  31. kubectl get cm {имя карты конфигурации} -o = yaml --export> filename.yaml
  32. # manifests:
  33. kubectl create -f deploy/kubernetes/manifests-logging (тут YML файлы)
  34.  
  35. kubectl --namespace=kube-system get pods
  36.  
  37. kubectl --namespace=kube-system get deploy,rs,pods

Разбираем namespaces:

  1. kubectl get namespaces
  2. NAME STATUS AGE
  3. default Active 39m
  4. kube-node-lease Active 39m
  5. kube-public Active 39m
  6. kube-system Active 39m
  7. kubernetes-dashboard Active 39m

Чтобы создать отдельный namespaces, создадим файл json "namespace-dev.json и namespace-prod.json":

  1. # nano namespace-dev.json
  2. # nano namespace-prod.json
  3. {
  4. "kind": "Namespace",
  5. "apiVersion": "v1",
  6. "metadata": {
  7. "name": "development",
  8. "labels": {
  9. "name": "development"
  10. }
  11. }
  12. }

запускаем:

  1. kubectl apply -f namespace-dev.json
  2. namespace/development created
  3.  
  4. kubectl get namespaces --show-labels
  5. NAME STATUS AGE LABELS
  6. default Active 20m <none>
  7. development Active 14m name=development
  8. kube-node-lease Active 20m <none>
  9. kube-public Active 20m <none>
  10. kube-system Active 20m <none>
  11. kubernetes-dashboard Active 20m addonmanager.kubernetes.io/mode=Reconcile,kubernetes.io/minikube-addons=dashboard

Аналогично можно создать Prod намеспейс "production".

Проверим текущий конфиг (nano ~/.kube/config):

  1. kubectl config view
  2.  
  3. apiVersion: v1
  4. clusters:
  5. - cluster:
  6. certificate-authority: /home/debuser/.minikube/ca.crt
  7. server: https://192.168.99.105:8443
  8. name: minikube
  9. contexts:
  10. - context:
  11. cluster: minikube
  12. user: minikube
  13. name: minikube
  14. current-context: minikube
  15. kind: Config
  16. preferences: {}
  17. users:
  18. - name: minikube
  19. user:
  20. client-certificate: /home/debuser/.minikube/client.crt
  21. client-key: /home/debuser/.minikube/client.key

Для создания контекста, проверяем текущий:

  1. kubectl config current-context
  2. minikube

Создаем context, данные "cluster и user" взяты из вывода выше (стандартные):

  1. kubectl config set-context dev --namespace=development \
  2. --cluster=minikube \
  3. --user=minikube

Переключиться на нужный:

  1. kubectl config use-context dev
  2. Switched to context "dev".

Чтобы делать какие-то действия с конкретным namespaces:

  1. kubectl --namespace=dev get pods
  2. или
  3. kubectl --namespace=prod run nginx --image=nginx

* При создании "Service" создаеться DNS запись, нужно использовать полное доменное имя, иначе достучаться можно только в рамках неймспейса.

  1. kubectl --namespace=kube-system get deployments
  2. NAME READY UP-TO-DATE AVAILABLE AGE
  3. coredns 2/2 2 2 18m
  4. elasticsearch 0/1 1 0 3m16s
  5. kibana 1/1 1 1 3m16s
  6. nginx-ingress-controller 1/1 1 1 17m
  7.  
  8. kubectl --namespace=kube-system get rs
  9. NAME DESIRED CURRENT READY AGE
  10. coredns-5644d7b6d9 2 2 2 17m
  11. elasticsearch-8476b9f4c6 1 1 0 2m41s
  12. kibana-5dd9f95469 1 1 0 2m41s
  13. nginx-ingress-controller-6fc5bcc8c9 1 1 1 17m
  14.  
  15. kubectl --namespace=kube-system get nodes
  16. NAME STATUS ROLES AGE VERSION
  17. minikube Ready master 17m v1.16.2

API versioning

  • Alpha level: The version names contain alpha (e.g. v1alpha1).
  • Beta level: The version names contain beta (e.g. v2beta3).
  • Stable level: The version name is vX where X is an integer.

* Подробнее: kubernetes.io/docs/concepts/overview/kubernetes-api/

  1. # отразить api-resources
  2. kubectl api-resources
  3. NAME SHORTNAMES APIGROUP NAMESPACED KIND
  4. ...
  5. configmaps cm true ConfigMap
  6. namespaces ns false Namespace
  7. pods po true Pod
  8. daemonsets ds apps true DaemonSet
  9. deployments deploy apps true Deployment
  10. replicasets rs apps true ReplicaSet
  11. ingresses ing extensions true Ingress
  12. ingresses ing networking.k8s.io true Ingress

Заголовки:

  1. kubectl api-versions
  2. apps/v1
  3. batch/v1
  4. extensions/v1beta1
  5. rbac.authorization.k8s.io/v1
  6. scheduling.k8s.io/v1beta1
  7. ...

Команды для minikube:

  1. minikube start
  2. minikube stop
  3. minikube config set memory 6144
  4. minikube start --memory 8192 --cpus 4
  5. minikube start -p <name>
  6. minikube ssh
  7. minikube status
  8. minikube ip
  9. minikube service hello-minikube --url
  10. curl $(minikube service hello-minikube --url)
  11. # addons minikube:
  12. minikube addons list
  13. minikube addons enable <name>
  14. minikube addons disable <name>

* Настройка minikube: habr.com/ru/company/flant/blog/333470
* addons minikube: minikube.sigs.k8s.io/docs/tasks/addons/

Пример запуска minikube:

  1. minikube start
  2. * minikube v1.5.2 on Debian 10.1
  3. * Tip: Use 'minikube start -p <name>' to create a new cluster, or 'minikube delete' to delete this one.
  4. * Starting existing virtualbox VM for "minikube" ...
  5. * Waiting for the host to be provisioned ...
  6. * Preparing Kubernetes v1.16.2 on Docker '18.09.9' ...
  7. * Relaunching Kubernetes using kubeadm ...
  8. * Waiting for: apiserver
  9. * Done! kubectl is now configured to use "minikube"

Типичные ошибки minikube:

Ошибка №1:
unable to recognize "deploy/kubernetes/manifests-logging/elasticsearch.yml": no matches for kind "Deployment" in version "extensions/v1beta1"
Ответ: в YML файле стоит "apiVersion: extensions/v1beta1", а надо "apiVersion: apps/v1". Нужно исправить в заголовке файла.

Ошибка №2:
serviceaccounts "fluentd" already exists
[error validating "deploy/kubernetes/manifests-logging/elasticsearch.yml": error validating data: ValidationError(Deployment.spec): missing required field "selector" in io.k8s.api.apps.v1.DeploymentSpec; if you choose to ignore these errors, turn validation off with --validate=false, unable to recognize "deploy/kubernetes/manifests-logging/fluentd-daemon.yml": no matches for kind "DaemonSet" in version "extensions/v1beta1", error validating "deploy/kubernetes/manifests-logging/kibana.yml": error validating data: ValidationError(Deployment.spec): missing required field "selector" in io.k8s.api.apps.v1.DeploymentSpec; if you choose to ignore these errors, turn validation off with --validate=false]

Ответ: если перевести дословно, то получается, что ошибка "ValidationError" в разделе "Deployment" подразделе "spec" (полный путь Deployment.spec). Ошибка в отсутствии или неверном указании "selector". В нашем случае его просто нет.
Пример верного исполнения:

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: nginx-deployment
  5. labels:
  6. app: nginx
  7. spec:
  8. replicas: 3
  9. selector:
  10. matchLabels:
  11. app: nginx
  12. template:
  13. metadata:
  14. labels:
  15. app: nginx
  16. spec:
  17. containers:
  18. - name: nginx
  19. image: nginx:1.7.9
  20. ports:
  21. - containerPort: 80

Для исправления ошибки надо указать такой фрагмент:

  1. selector:
  2. matchLabels:
  3. app: nginx

* внимание на app, у нас в файле было "name" вместо "app".

Ошибка №3:
deployments.apps "kibana" already exists
Error from server (Invalid): error when creating "deploy/kubernetes/manifests-logging/kibana.yml": Service "kibana" is invalid: spec.ports[0].nodePort: Invalid value: 31601: provided port is already allocated
unable to recognize "deploy/kubernetes/manifests-logging/fluentd-daemon.yml": no matches for kind "DaemonSet" in version "extensions/v1beta1"

+ Доп.Инфа по ошибке:

  1. kubectl get pods --namespace=kube-system
  2. NAME READY STATUS RESTARTS AGE
  3. elasticsearch-869b79886f-td95m 0/1 ImagePullBackOff 0 8m11s
  4. kibana-779c44ff4d-pv6vw 0/1 ImagePullBackOff 0 13m
  5. kube-ingress-dns-minikube 1/1 Running 0 31m
  6. nginx-ingress-controller-6fc5bcc8c9-bgcwb 1/1 Running 0 31m

* Так как я тестировал на minikube, то там есть addons, в частности я активировал enable "minikube addons list":

  • - ingress: enabled
  • - ingress-dns: enabled

Ответ: в очевидной форме его нет, но есть следующее "spec.ports[0].nodePort: Invalid value: 31601: provided port is already allocated". Отсюда делаем вывод, что ошибка в этой части кода:

  1. ...
  2. spec:
  3. type: NodePort
  4. ports:
  5. - port: 5601
  6. targetPort: 5601
  7. nodePort: 31601
  8. ...

* Обратимся к официальной документации по Ingress: kubernetes.io/docs/concepts/services-networking/ingress/
Используем шаблон и вставим его в наш файл после основного кода "---":
"deploy/kubernetes/manifests-logging/kibana.yml"

  1. ...
  2.  
  3. ---
  4. apiVersion: networking.k8s.io/v1beta1
  5. kind: Ingress
  6. metadata:
  7. name: test-ingress
  8. annotations:
  9. nginx.ingress.kubernetes.io/rewrite-target: /
  10. spec:
  11. rules:
  12. - http:
  13. paths:
  14. - path: /testpath
  15. backend:
  16. serviceName: test
  17. servicePort: 80

Дальше исправляем под логику файла.

Разберем пример кода:
Основа:

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. ...
  5. spec:
  6. ...

Заполним:

  1. apiVersion: v1
  2. # Минимальная единица: один или несколько контейнеров
  3. kind: Pod
  4. # Метаданные:
  5. metadata:
  6. name: kibana-pod
  7. labels:
  8. app: kibana
  9. # Спецификация:
  10. spec:
  11. containers:
  12. - name: kibana
  13. image: elk/kibana

Подключим Volumes:

  1. apiVersion: v1
  2. # Минимальная единица: один или несколько контейнеров
  3. kind: Pod
  4. # Метаданные:
  5. metadata:
  6. name: kibana-pod
  7. labels:
  8. app: kibana
  9. # Спецификация:
  10. spec:
  11. containers:
  12. - name: kibana
  13. image: elk/kibana
  14. # volumes для этого образа, который источник volumemaps берет из общего значения
  15. volumeMounts:
  16. - name: kibana-config
  17. # Куда смонтировать конфигмеп при запуске контейнера
  18. mountPath: /etc/kibana/conf.d
  19. # Общий volumes
  20. volumes:
  21. - name: kibana-config
  22. configMap:
  23. name: kibana-config

Меняем Pod на ReplicaSet:

  1. apiVersion: v1
  2. # Меняем Pod на ReplicaSet
  3. kind: ReplicaSet
  4. metadata:
  5. name: kibana-pod
  6. labels:
  7. app: kibana
  8. # --- вставка ---
  9. spec:
  10. # Параметры для ReplicaSet
  11. replicas: 3
  12. # selector по какому критерию выделять pod. Выбор по matchLabel. Если их меньше 3, создает нужное кол.
  13. selector:
  14. matchLabel:
  15. app: kibana
  16. # Шаблон по которому создавать реплику. Описание pod'а
  17. template:
  18. metadata:
  19. labels:
  20. app: kibana
  21. # --- конец ---
  22. spec:
  23. containers:
  24. - name: kibana
  25. image: elk/kibana
  26. volumeMounts:
  27. - name: kibana-config
  28. mountPath: /etc/kibana/conf.d
  29. volumes:
  30. - name: kibana-config
  31. configMap:
  32. name: kibana-config

Примеры вывода разных комманд:

  1. kubectl --namespace=kube-system get services
  2. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  3. elasticsearch ClusterIP 10.96.000.000 <none> 9200/TCP 11m
  4. kibana ClusterIP 10.98.00.00 <none> 31601/TCP 11m
  5. kube-dns ClusterIP 10.96.0.00 <none> 53/UDP,53/TCP,9153/TCP 19m
  1. kubectl --namespace=kube-system get pods
  2. NAME READY STATUS RESTARTS AGE
  3. coredns-5644d7b6d9-nn8f7 1/1 Running 0 20m
  4. coredns-5644d7b6d9-p4ftw 1/1 Running 0 20m
  5. elasticsearch-8476b9f4c6-8dhkc 0/1 ImagePullBackOff 0 12m
  6. etcd-minikube 1/1 Running 0 19m
  7. fluentd-wm8dr 0/1 ImagePullBackOff 0 12m
  8. kibana-5dd9f95469-bqx57 0/1 ImagePullBackOff 0 12m
  9. kube-addon-manager-minikube 1/1 Running 0 20m
  10. kube-apiserver-minikube 1/1 Running 0 19m
  11. kube-controller-manager-minikube 1/1 Running 0 18m
  12. kube-ingress-dns-minikube 1/1 Running 0 4m6s
  13. kube-proxy-mn92h 1/1 Running 0 20m
  14. kube-scheduler-minikube 1/1 Running 0 19m
  15. nginx-ingress-controller-6fc5bcc8c9-lfzmq 1/1 Running 0 4m4s
  16. storage-provisioner 1/1 Running 0 4m5s
  1. kubectl --namespace=kube-system get nodes
  2. NAME STATUS ROLES AGE VERSION
  3. minikube Ready master 20m v1.16.2

DaemonSet ds/StatefulSet sts

  1. kubectl --namespace=kube-system get ds
  2. NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
  3. fluentd 1 1 0 1 0 beta.kubernetes.io/os=linux 15m
  4. kube-proxy 1 1 1 1 1 beta.kubernetes.io/os=linux 23m
  1. kubectl cluster-info
  2. Kubernetes master is running at https://192.168.99.109:8443
  3. KubeDNS is running at https://192.168.99.109:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
  1. kubectl --namespace=kube-system get deployments
  2. NAME READY UP-TO-DATE AVAILABLE AGE
  3. coredns 2/2 2 2 44m
  4. elasticsearch 1/1 1 1 37m
  5. kibana 1/1 1 1 37m
  6. nginx-ingress-controller 1/1 1 1 28m
  1. kubectl --namespace=kube-system get deployments/elasticsearch -o yaml
  2. apiVersion: apps/v1
  3. kind: Deployment
  4. metadata:
  5. annotations:
  6. deployment.kubernetes.io/revision: "1"
  7. creationTimestamp: "2019-11-26T12:02:17Z"
  8. generation: 1
  9. labels:
  10. name: elasticsearch
  11. name: elasticsearch
  12. namespace: kube-system
  13. resourceVersion: "2649"
  14. selfLink: /apis/apps/v1/namespaces/kube-system/deployments/elasticsearch
  15. uid: 4c9f1628-0dba-4032-9583-38f5035edb74
  16. spec:
  17. progressDeadlineSeconds: 600
  18. replicas: 1
  19. revisionHistoryLimit: 10
  20. selector:
  21. matchLabels:
  22. name: elasticsearch
  23. strategy:
  24. rollingUpdate:
  25. maxSurge: 25%
  26. maxUnavailable: 25%
  27. type: RollingUpdate
  28. template:
  29. metadata:
  30. creationTimestamp: null
  31. labels:
  32. name: elasticsearch
  33. spec:
  34. containers:
  35. - image: elasticsearch:6.8.5
  36. imagePullPolicy: IfNotPresent
  37. name: elasticsearch
  38. ports:
  39. - containerPort: 9200
  40. name: elasticsearch
  41. protocol: TCP
  42. resources: {}
  43. terminationMessagePath: /dev/termination-log
  44. terminationMessagePolicy: File
  45. dnsPolicy: ClusterFirst
  46. nodeSelector:
  47. beta.kubernetes.io/os: linux
  48. restartPolicy: Always
  49. schedulerName: default-scheduler
  50. securityContext: {}
  51. terminationGracePeriodSeconds: 30
  52. status:
  53. availableReplicas: 1
  54. conditions:
  55. - lastTransitionTime: "2019-11-26T12:20:42Z"
  56. lastUpdateTime: "2019-11-26T12:20:42Z"
  57. message: Deployment has minimum availability.
  58. reason: MinimumReplicasAvailable
  59. status: "True"
  60. type: Available
  61. - lastTransitionTime: "2019-11-26T12:20:42Z"
  62. lastUpdateTime: "2019-11-26T12:20:42Z"
  63. message: ReplicaSet "elasticsearch-8476b9f4c6" has successfully progressed.
  64. reason: NewReplicaSetAvailable
  65. status: "True"
  66. type: Progressing
  67. observedGeneration: 1
  68. readyReplicas: 1
  69. replicas: 1
  70. updatedReplicas: 1
  1. kubectl --namespace=kube-system logs deployments/elasticsearch -f
  2. OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
  3. OpenJDK 64-Bit Server VM warning: UseAVX=2 is not supported on this CPU, setting it to UseAVX=0
  4. [2019-11-26T12:20:49,462][INFO ][o.e.e.NodeEnvironment ] [JkdvrLQ] using [1] data paths, mounts [[/ (overlay)]], net usable_space [11.7gb], net total_space [16.9gb], types [overlay]
  5. [2019-11-26T12:20:49,470][INFO ][o.e.e.NodeEnvironment ] [JkdvrLQ] heap size [1015.6mb], compressed ordinary object pointers [true]
  6. [2019-11-26T12:20:49,475][INFO ][o.e.n.Node ] [JkdvrLQ] node name derived from node ID [JkdvrLQYTzaz6mig1P4qYA]; set [node.name] to override
  7. [2019-11-26T12:20:49,476][INFO ][o.e.n.Node ] [JkdvrLQ] version[6.8.5], pid[1], build[default/docker/78990e9/2019-11-13T20:04:24.100411Z], OS[Linux/4.19.76/amd64], JVM[AdoptOpenJDK/OpenJDK 64-Bit Server VM/13.0.1/13.0.1+9]
  8. [2019-11-26T12:20:49,477][INFO ][o.e.n.Node ] [JkdvrLQ] JVM arguments [-Xms1g, -Xmx1g, -XX:+UseConcMarkSweepGC, -XX:CMSInitiatingOccupancyFraction=75, -XX:+UseCMSInitiatingOccupancyOnly, -Des.networkaddress.cache.ttl=60, -Des.networkaddress.cache.negative.ttl=10, -XX:+AlwaysPreTouch, -Xss1m, -Djava.awt.headless=true, -Dfile.encoding=UTF-8, -Djna.nosys=true, -XX:-OmitStackTraceInFastThrow, -Dio.netty.noUnsafe=true, -Dio.netty.noKeySetOptimization=true, -Dio.netty.recycler.maxCapacityPerThread=0, -Dlog4j.shutdownHookEnabled=false, -Dlog4j2.disable.jmx=true, -Djava.io.tmpdir=/tmp/elasticsearch-17964736905779610579, -XX:+HeapDumpOnOutOfMemoryError, -XX:HeapDumpPath=data, -XX:ErrorFile=logs/hs_err_pid%p.log, -Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,pid,tags:filecount=32,filesize=64m, -Djava.locale.providers=COMPAT, -XX:UseAVX=2, -Des.cgroups.hierarchy.override=/, -Des.path.home=/usr/share/elasticsearch, -Des.path.conf=/usr/share/elasticsearch/config, -Des.distribution.flavor=default, -Des.distribution.type=docker]

Кривое удаление:

  1. kubectl --namespace=kube-system delete deployments/elasticsearch
  2. deployment.apps "elasticsearch" deleted

Нормальное удаление:

  1. kubectl --namespace=kube-system delete pod/elasticsearch-8476b9f4c6-gzfq4
  2. pod "elasticsearch-8476b9f4c6-gzfq4" deleted
  1. kubectl --namespace=kube-system get pods -o wide
  2. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  3. coredns-5644d7b6d9-nn8f7 1/1 Running 0 58m 172.00.0.0 minikube <none> <none>
  4. coredns-5644d7b6d9-p4ftw 1/1 Running 0 58m 172.00.0.0 minikube <none> <none>
  5. elasticsearch-8476b9f4c6-gzfq4 1/1 Running 0 3m28s 172.00.0.0 minikube <none> <none>
  6. etcd-minikube 1/1 Running 0 57m 192.168.99.109 minikube <none> <none>
  7. fluentd-wm8dr 1/1 Running 0 51m 172.00.0.0 minikube <none> <none>
  8. kibana-5dd9f95469-bqx57 1/1 Running 0 51m 172.00.0.0 minikube <none> <none>
  9. kube-addon-manager-minikube 1/1 Running 0 58m 192.168.99.109 minikube <none> <none>
  10. kube-apiserver-minikube 1/1 Running 0 57m 192.168.99.109 minikube <none> <none>
  11. kube-controller-manager-minikube 1/1 Running 0 57m 192.168.99.109 minikube <none> <none>
  12. kube-ingress-dns-minikube 1/1 Running 0 42m 192.168.99.109 minikube <none> <none>
  13. kube-proxy-mn92h 1/1 Running 0 58m 192.168.99.109 minikube <none> <none>
  14. kube-scheduler-minikube 1/1 Running 0 57m 192.168.99.109 minikube <none> <none>
  15. nginx-ingress-controller-6fc5bcc8c9-lfzmq 1/1 Running 0 42m 172.00.0.0 minikube <none> <none>
  16. storage-provisioner 1/1 Running 0 42m 192.168.99.109 minikube <none> <none>
  1. kubectl --namespace=kube-system describe deployments/elasticsearch
  2. Name: elasticsearch
  3. Namespace: kube-system
  4. CreationTimestamp: Tue, 26 Nov 2019 17:50:16 +0500
  5. Labels: name=elasticsearch
  6. Annotations: deployment.kubernetes.io/revision: 1
  7. Selector: name=elasticsearch
  8. Replicas: 1 desired | 1 updated | 1 total | 1 available | 0 unavailable
  9. StrategyType: RollingUpdate
  10. MinReadySeconds: 0
  11. RollingUpdateStrategy: 25% max unavailable, 25% max surge
  12. Pod Template:
  13. Labels: name=elasticsearch
  14. Containers:
  15. elasticsearch:
  16. Image: elasticsearch:6.8.5
  17. Port: 9200/TCP
  18. Host Port: 0/TCP
  19. Environment: <none>
  20. Mounts: <none>
  21. Volumes: <none>
  22. Conditions:
  23. Type Status Reason
  24. ---- ------ ------
  25. Available True MinimumReplicasAvailable
  26. Progressing True NewReplicaSetAvailable
  27. OldReplicaSets: <none>
  28. NewReplicaSet: elasticsearch-8476b9f4c6 (1/1 replicas created)
  29. Events:
  30. Type Reason Age From Message
  31. ---- ------ ---- ---- -------
  32. Normal ScalingReplicaSet 5m37s deployment-controller Scaled up replica set elasticsearch-8476b9f4c6 to 1
  1. kubectl --namespace=kube-system get svc
  2. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  3. elasticsearch ClusterIP 10.00.0.0 <none> 9200/TCP 55m
  4. kibana ClusterIP 10.00.0.0 <none> 31601/TCP 55m
  5. kube-dns ClusterIP 10.00.0.0 <none> 53/UDP,53/TCP,9153/TCP 62m

Общий вывод:

  1. kubectl --namespace=kube-system get deploy,rs,pods
  2. NAME READY UP-TO-DATE AVAILABLE AGE
  3. deployment.apps/coredns 2/2 2 2 65m
  4. deployment.apps/elasticsearch 1/1 1 1 9m39s
  5. deployment.apps/kibana 1/1 1 1 57m
  6. deployment.apps/nginx-ingress-controller 1/1 1 1 48m
  7.  
  8. NAME DESIRED CURRENT READY AGE
  9. replicaset.apps/coredns-5644d7b6d9 2 2 2 64m
  10. replicaset.apps/elasticsearch-8476b9f4c6 1 1 1 9m39s
  11. replicaset.apps/kibana-5dd9f95469 1 1 1 57m
  12. replicaset.apps/nginx-ingress-controller-6fc5bcc8c9 1 1 1 48m
  13.  
  14. NAME READY STATUS RESTARTS AGE
  15. pod/coredns-5644d7b6d9-nn8f7 1/1 Running 0 64m
  16. pod/coredns-5644d7b6d9-p4ftw 1/1 Running 0 64m
  17. pod/elasticsearch-8476b9f4c6-gzfq4 1/1 Running 0 9m39s
  18. pod/etcd-minikube 1/1 Running 0 63m
  19. pod/fluentd-wm8dr 1/1 Running 0 57m
  20. pod/kibana-5dd9f95469-bqx57 1/1 Running 0 57m
  21. pod/kube-addon-manager-minikube 1/1 Running 0 65m
  22. pod/kube-apiserver-minikube 1/1 Running 0 64m
  23. pod/kube-controller-manager-minikube 1/1 Running 0 63m
  24. pod/kube-ingress-dns-minikube 1/1 Running 0 48m
  25. pod/kube-proxy-mn92h 1/1 Running 0 64m
  26. pod/kube-scheduler-minikube 1/1 Running 0 64m
  27. pod/nginx-ingress-controller-6fc5bcc8c9-lfzmq 1/1 Running 0 48m
  28. pod/storage-provisioner 1/1 Running 0 48m