Упражнение. Изучение функций кластера Kubernetes
При локальном запуске Kubernetes доступно несколько вариантов. Вы можете установить Kubernetes на физических или виртуальных компьютерах или использовать облачное решение, например Службу Azure Kubernetes (AKS).
В этом упражнении ваша цель — изучить установку Kubernetes и кластер с одним узлом. В этом упражнении вы узнаете, как настроить и установить среду MicroK8s , которую легко настроить и отключить. Затем разверните службу Kubernetes и масштабируйте ее до нескольких экземпляров для размещения веб-сайта.
Примечание.
Это упражнение не является обязательным и содержит инструкции по удалению программного обеспечения и ресурсов, которые будут использоваться в упражнении.
Помните, что для выполнения тех же задач существуют и другие варианты, например MiniKube и поддержка Kubernetes в Docker.
Что такое MicroK8s?
MicroK8s — это вариант развертывания кластера Kubernetes с одним узлом в виде одного пакета для целевых рабочих станций и устройств Интернета вещей (IoT). Канонический, создатель Ubuntu Linux, первоначально разработанный и в настоящее время поддерживает MicroK8s.
MicroK8s можно установить в Linux, Windows и macOS. Однако инструкции по установке немного отличаются для каждой операционной системы. Выберите вариант, который лучше подходит для вашей среды.
Установка MicroK8s в Linux
Установка MicroK8s в Linux — это вариант установки с минимальным количеством шагов. Перейдите в окно терминала и выполните команды в приведенных ниже инструкциях.
Установите snap-приложение MicroK8s. Выполнение этого шага может занять несколько минут в зависимости от скорости подключения к Интернету и мощности настольного компьютера.
sudo snap install microk8s --classic
При успешной установке отображается следующее сообщение.
2020-03-16T12:50:59+02:00 INFO Waiting for restart... microk8s v1.17.3 from Canonical✓ installed
Теперь все готово для установки дополнительных компонентов в кластере.
Установка MicroK8s в Windows
Для запуска MicroK8s в Windows используется Multipass. Multipass — это упрощенный диспетчер виртуальных машин для Linux, Windows и macOS.
Скачайте и установите последнюю версию Multipass для Windows из GitHub.
В командной консоли выполните команду запуска Multipass, чтобы настроить и запустить образ microk8s-vm. Выполнение этого шага может занять несколько минут в зависимости от скорости подключения к Интернету и мощности настольного компьютера.
multipass launch --name microk8s-vm --memory 4G --disk 40G
После получения подтверждения запуска для microk8s-vm выполните
multipass shell microk8s-vm
команду, чтобы получить доступ к экземпляру виртуальной машины.multipass shell microk8s-vm
После работы multipass вы можете получить доступ к виртуальной машине Ubuntu для размещения кластера и установки MicroK8s.
Установите snap-приложение MicroK8s. Выполнение этого шага может занять несколько минут в зависимости от скорости подключения к Интернету и мощности настольного компьютера.
sudo snap install microk8s --classic
После успешной установки отображается следующее сообщение:
2020-03-16T12:50:59+02:00 INFO Waiting for restart... microk8s v1.17.3 from Canonical✓ installed
Теперь все готово для установки дополнительных компонентов в кластере.
Установка MicroK8s в macOS
Для запуска MicroK8s в macOS используется Multipass. Multipass — это упрощенный диспетчер виртуальных машин для Linux, Windows и macOS.
Существует два варианта установки Multipass в macOS. Скачайте и установите последний выпуск Multipass для macOS с GitHub или используйте Homebrew для установки Multipass с помощью команды
brew cask install multipass
.brew install --cask multipass
В командной консоли выполните команду запуска Multipass, чтобы настроить и запустить образ microk8s-vm. Выполнение этого шага может занять несколько минут в зависимости от скорости подключения к Интернету и мощности настольного компьютера.
multipass launch --name microk8s-vm --memory 4G --disk 40G
После получения подтверждения запуска для microk8s-vm выполните
multipass shell microk8s-vm
команду, чтобы ввести экземпляр виртуальной машины.multipass shell microk8s-vm
На этом этапе вы можете получить доступ к виртуальной машине Ubuntu для размещения кластера. Вам все еще нужно установить MicroK8s. Выполните следующие действия.
Установите snap-приложение MicroK8s. Выполнение этого шага может занять несколько минут в зависимости от скорости подключения к Интернету и мощности настольного компьютера.
sudo snap install microk8s --classic
После успешной установки отображается следующее сообщение:
2020-03-16T12:50:59+02:00 INFO Waiting for restart... microk8s v1.17.3 from Canonical✓ installed
Теперь все готово для установки дополнительных компонентов в кластере.
Подготовка кластера
Чтобы просмотреть состояние установленных надстроек в кластере, выполните status
команду в MicroK8s. Эти надстройки предоставляют несколько служб, и некоторые из них мы уже рассмотрели. Одним из примеров является функциональность DNS.
Чтобы проверить состояние установки, выполните команду
microk8s.status --wait-ready
.sudo microk8s.status --wait-ready
Обратите внимание, что в кластере есть несколько отключенных надстроек. Не беспокойтесь о надстройках, которые вам неизвестны.
microk8s is running addons: cilium: disabled dashboard: disabled dns: disabled fluentd: disabled gpu: disabled helm3: disabled helm: disabled ingress: disabled istio: disabled jaeger: disabled juju: disabled knative: disabled kubeflow: disabled linkerd: disabled metallb: disabled metrics-server: disabled prometheus: disabled rbac: disabled registry: disabled storage: disabled
В списке необходимо включить надстройки DNS, панели мониторинга и реестра. Ниже приведены цели каждой надстройки:
Надстройки Характер использования DNS Развертывает службу coreDNS
.Панель мониторинга Развертывает службу kubernetes-dashboard
и несколько других служб, поддерживающих ее функциональность. Это универсальный веб-интерфейс для кластеров Kubernetes.Реестр Развертывает частный реестр и несколько служб, поддерживающих его функциональность. Для хранения частных контейнеров используйте реестр. Чтобы установить надстройки, выполните приведенную ниже команду.
sudo microk8s.enable dns dashboard registry
Теперь вы готовы получить доступ к кластеру с kubectl
помощью .
Изучение кластера Kubernetes
MicroK8s предоставляет версию kubectl
, которую можно использовать для взаимодействия с новым кластером Kubernetes. Эта копия kubectl
позволяет параллельно устанавливать другой экземпляр kubectl
на уровне системы, не влияя на ее функциональность.
Выполните команду
snap alias
, чтобы установить псевдонимmicrok8s.kubectl
—kubectl
. Этот шаг упрощает использование.sudo snap alias microk8s.kubectl kubectl
После успешного завершения команды отображаются следующие выходные данные:
Added: - microk8s.kubectl as kubectl
Отображение сведений об узле кластера
Вспомним, что кластер Kubernetes находится за пределами уровня управления и рабочих узлов. Давайте рассмотрим новый кластер, чтобы увидеть, что именно установлено.
Проверка узлов, работающих в кластере.
Вы знаете, что MicroK8s — это установка кластера с одним узлом, и ожидаете увидеть там только один узел. Не забывайте, что этот узел является как уровнем управления, так и рабочим узлом в кластере. Проверьте эту конфигурацию, выполнив команду
kubectl get nodes
. Чтобы получить сведения обо всех ресурсах в кластереkubectl get
, выполните команду:sudo kubectl get nodes
Результат аналогичен следующему примеру, который показывает, что в кластере есть только один узел с именем
microk8s-vm
. Обратите внимание, что узел находится в состоянии "Готово ". Состояние готовности указывает, что уровень управления может планировать рабочие нагрузки на этом узле.NAME STATUS ROLES AGE VERSION microk8s-vm Ready <none> 35m v1.17.3
Вы можете получить дополнительные сведения для конкретного запрошенного ресурса. Например, предположим, что вам нужно найти IP-адрес узла. Чтобы получить дополнительные сведения с сервера API, выполните
-o wide
параметр:sudo kubectl get nodes -o wide
Результат аналогичен следующему примеру. Обратите внимание, что теперь вы можете увидеть внутренний IP-адрес узла, ОПЕРАЦИОННую систему, запущенную на узле, версию ядра и среду выполнения контейнера.
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME microk8s-vm Ready <none> 36m v1.17.3 192.168.56.132 <none> Ubuntu 18.04.4 LTS 4.15.0-88-generic containerd://1.2.5
Следующим шагом является изучение служб, работающих в кластере. Чтобы получить сведения о службах, работающих в кластере, как и в случае с узлами, выполните команду
kubectl get
.sudo kubectl get services -o wide
Результат аналогичен следующему примеру, но обратите внимание, что указана только одна служба. Вы установили надстройки в кластере ранее, и вы также ожидали увидеть эти службы.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 37m <none>
Причина в перечислении одной службы заключается в том, что Kubernetes использует концепцию, называемую пространствами имен, для логического разделения кластера на несколько виртуальных кластеров.
Чтобы получить все службы во всех пространствах имен, передайте
--all-namespaces
параметр:sudo kubectl get services -o wide --all-namespaces
Результат аналогичен следующему примеру. Обратите внимание, что в кластере имеется три пространства имен. Это пространства имен: default,
container-registry
иkube-system
. Здесь можно увидеть установленные экземплярыregistry
,kube-dns
иkubernetes-dashboard
. Существуют также вспомогательные службы, которые были установлены вместе с некоторыми надстройками.NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR container-registry registry NodePort 10.152.183.36 <none> 5000:32000/TCP 28m app=registry default kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 37m <none> kube-system dashboard-metrics-scraper ClusterIP 10.152.183.130 <none> 8000/TCP 28m k8s-app=dashboard-metrics-scraper kube-system heapster ClusterIP 10.152.183.115 <none> 80/TCP 28m k8s-app=heapster kube-system kube-dns ClusterIP 10.152.183.10 <none> 53/UDP,53/TCP,9153/TCP 28m k8s-app=kube-dns kube-system kubernetes-dashboard ClusterIP 10.152.183.132 <none> 443/TCP 28m k8s-app=kubernetes-dashboard kube-system monitoring-grafana ClusterIP 10.152.183.88 <none> 80/TCP 28m k8s-app=influxGrafana kube-system monitoring-influxdb ClusterIP 10.152.183.232 <none> 8083/TCP,8086/TCP 28m k8s-app=influxGrafana
Теперь, когда вы видите службы, работающие в кластере, можно запланировать рабочую нагрузку на рабочем узле.
Установка веб-сервера в кластере
Вы хотите запланировать веб-сервер в кластере для обслуживания клиентов. Можно выбрать один из нескольких вариантов. В этом примере используется NGINX.
Как вы помните, вы можете использовать файлы манифеста модуля pod, чтобы описать свои модули, наборы реплик и развертывания для определения рабочих нагрузок. Так как эти файлы подробно не рассматриваются, вы запускаете kubectl
напрямую передачу информации серверу API.
Хотя применение kubectl
является более удобным, рекомендуется использовать файлы манифеста. Файлы манифеста позволяют упростить накат или откат развертываний в кластере. Эти файлы также помогают документирование конфигурации кластера.
Для создания развертывания NGINX выполните команду
kubectl create deployment
. Укажите имя развертывания и образ контейнера, чтобы создать отдельный экземпляр pod.sudo kubectl create deployment nginx --image=nginx
Результат аналогичен следующему примеру:
deployment.apps/nginx created
Чтобы получить сведения о развертывании, выполните следующую команду
kubectl get deployments
:sudo kubectl get deployments
Результат аналогичен следующему примеру. Обратите внимание, что имя развертывания совпадает с именем, которое вы присвоили ему, и что одно развертывание с этим именем находится в состоянии готовности и доступно.
NAME READY UP-TO-DATE AVAILABLE AGE nginx 1/1 1 1 18s
Развертывание создало pod. Чтобы получить сведения о модулях pod кластера, выполните
kubectl get pods
команду:sudo kubectl get pods
Результат аналогичен следующему примеру. Обратите внимание, что имя модуля pod — это созданное значение, префиксируемое именем развертывания, и модуль pod имеет состояние "Выполнение".
NAME READY STATUS RESTARTS AGE nginx-86c57db685-dj6lz 1/1 Running 0 33s
Тестирование установки веб-сайта
Протестируйте установку NGINX, подключившись к веб-серверу с помощью IP-адреса модуля pod.
Чтобы найти адрес pod, передайте
-o wide
параметр:sudo kubectl get pods -o wide
Результат аналогичен следующему примеру. Обратите внимание, что команда возвращает IP-адрес узла и имя узла, на котором запланирована рабочая нагрузка.
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-86c57db685-dj6lz 1/1 Running 0 4m17s 10.1.83.10 microk8s-vm <none> <none>
Чтобы получить доступ к веб-сайту, запустите
wget
ip-адрес, указанный ранее:wget <POD_IP>
Результат аналогичен следующему примеру:
--2020-03-16 13:34:17-- http://10.1.83.10/ Connecting to 10.1.83.10:80... connected. HTTP request sent, awaiting response... 200 OK Length: 612 [text/html] Saving to: 'index.html' index.html 100%[==============================================================================================>] 612 --.-KB/s in 0s 2020-03-16 13:34:17 (150 MB/s) - 'index.html' saved [612/612]
Масштабирование развертывания веб-сервера в кластере
Предположим, что вы неожиданно видите увеличение числа пользователей, обращающихся к веб-сайту, и на веб-сайте возникают сбои из-за чрезмерной нагрузки. Можно развернуть в кластере дополнительные экземпляры сайта и разделить нагрузку между экземплярами.
Чтобы масштабировать количество реплик в развертывании, выполните команду kubectl scale
. Укажите необходимое количество реплик и имя развертывания.
Чтобы масштабировать общее количество модулей pod NGINX до трех, выполните
kubectl scale
команду:sudo kubectl scale --replicas=3 deployments/nginx
Результат аналогичен следующему примеру:
deployment.apps/nginx scaled
Команда scale позволяет увеличивать или сокращать количество экземпляров.
Чтобы проверить количество запущенных модулей pod, выполните
kubectl get
команду и снова передайте-o wide
параметр:sudo kubectl get pods -o wide
Результат аналогичен следующему примеру. Обратите внимание, что теперь отображаются три модуля, каждый из которых имеет уникальный IP-адрес.
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-86c57db685-dj6lz 1/1 Running 0 7m57s 10.1.83.10 microk8s-vm <none> <none> nginx-86c57db685-lzrwp 1/1 Running 0 9s 10.1.83.12 microk8s-vm <none> <none> nginx-86c57db685-m7vdd 1/1 Running 0 9s 10.1.83.11 microk8s-vm <none> <none> ubuntu@microk8s-vm:~$
Вам потребуется применить несколько дополнительных конфигураций к кластеру, чтобы эффективно предоставлять веб-сайт как общедоступный веб-сайт. Например, установка подсистемы балансировки нагрузки и сопоставление IP-адресов узлов. Это расширенная конфигурация, которую вы изучите в будущем. В сводке приведены инструкции, если вы решили удалить и очистить виртуальную машину.