Упражнение. Изучение функций кластера 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 — это вариант установки с минимальным количеством шагов. Перейдите в окно терминала и выполните команды в приведенных ниже инструкциях.

  1. Установите 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.

  1. Скачайте и установите последнюю версию Multipass для Windows из GitHub.

  2. В командной консоли выполните команду запуска Multipass, чтобы настроить и запустить образ microk8s-vm. Выполнение этого шага может занять несколько минут в зависимости от скорости подключения к Интернету и мощности настольного компьютера.

    multipass launch --name microk8s-vm --memory 4G --disk 40G
    
  3. После получения подтверждения запуска для microk8s-vm выполните multipass shell microk8s-vm команду, чтобы получить доступ к экземпляру виртуальной машины.

    multipass shell microk8s-vm
    

    После работы multipass вы можете получить доступ к виртуальной машине Ubuntu для размещения кластера и установки MicroK8s.

  4. Установите 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.

  1. Существует два варианта установки Multipass в macOS. Скачайте и установите последний выпуск Multipass для macOS с GitHub или используйте Homebrew для установки Multipass с помощью команды brew cask install multipass.

    brew install --cask multipass
    
  2. В командной консоли выполните команду запуска Multipass, чтобы настроить и запустить образ microk8s-vm. Выполнение этого шага может занять несколько минут в зависимости от скорости подключения к Интернету и мощности настольного компьютера.

    multipass launch --name microk8s-vm --memory 4G --disk 40G
    
  3. После получения подтверждения запуска для microk8s-vm выполните multipass shell microk8s-vm команду, чтобы ввести экземпляр виртуальной машины.

    multipass shell microk8s-vm
    

    На этом этапе вы можете получить доступ к виртуальной машине Ubuntu для размещения кластера. Вам все еще нужно установить MicroK8s. Выполните эти действия.

  4. Установите 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.

  1. Чтобы проверить состояние установки, выполните команду 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
    
  2. В списке необходимо включить надстройки DNS, панели мониторинга и реестра. Ниже приведены цели каждой надстройки:

    Надстройки Назначение
    DNS Развертывает службу coreDNS.
    Панель мониторинга Развертывает службу kubernetes-dashboard и несколько других служб, поддерживающих ее функциональность. Это универсальный веб-интерфейс для кластеров Kubernetes.
    Реестр Развертывает частный реестр и несколько служб, поддерживающих его функциональность. Для хранения частных контейнеров используйте реестр.

    Чтобы установить надстройки, выполните приведенную ниже команду.

    sudo microk8s.enable dns dashboard registry
    

Теперь вы готовы получить доступ к кластеру с kubectlпомощью .

Изучение кластера Kubernetes

MicroK8s предоставляет версию kubectl, которую можно использовать для взаимодействия с новым кластером Kubernetes. Эта копия kubectl позволяет параллельно устанавливать другой экземпляр kubectl на уровне системы, не влияя на ее функциональность.

  1. Выполните команду snap alias, чтобы установить псевдоним microk8s.kubectl — kubectl. Этот шаг упрощает использование.

    sudo snap alias microk8s.kubectl kubectl
    

    После успешного завершения команды отображаются следующие выходные данные:

    Added:
      - microk8s.kubectl as kubectl
    

Отображение сведений об узле кластера

Вспомним, что кластер Kubernetes находится за пределами уровня управления и рабочих узлов. Давайте рассмотрим новый кластер, чтобы увидеть, что именно установлено.

  1. Проверка узлов, работающих в кластере.

    Вы знаете, что 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
    
  2. Следующим шагом является изучение служб, работающих в кластере. Чтобы получить сведения о службах, работающих в кластере, как и в случае с узлами, выполните команду 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 является более удобным, рекомендуется использовать файлы манифеста. Файлы манифеста позволяют упростить накат или откат развертываний в кластере. Эти файлы также помогают документировать конфигурацию кластера.

  1. Для создания развертывания NGINX выполните команду kubectl create deployment. Укажите имя развертывания и образ контейнера, чтобы создать отдельный экземпляр pod.

    sudo kubectl create deployment nginx --image=nginx
    

    Результат аналогичен следующему примеру:

    deployment.apps/nginx created
    
  2. Чтобы получить сведения о развертывании, выполните следующую команду kubectl get deployments:

    sudo kubectl get deployments
    

    Результат аналогичен следующему примеру. Обратите внимание, что имя развертывания совпадает с именем, которое вы присвоили ему, и что одно развертывание с этим именем находится в состоянии готовности и доступно.

    NAME    READY   UP-TO-DATE   AVAILABLE   AGE
    nginx   1/1     1            1           18s
    
  3. Развертывание создало 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.

  1. Чтобы найти адрес 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>
    
  2. Чтобы получить доступ к веб-сайту, запустите 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. Укажите необходимое количество реплик и имя развертывания.

  1. Чтобы масштабировать общее количество модулей pod NGINX до трех, выполните kubectl scale команду:

    sudo kubectl scale --replicas=3 deployments/nginx
    

    Результат аналогичен следующему примеру:

    deployment.apps/nginx scaled
    

    Команда scale позволяет увеличивать или сокращать количество экземпляров.

  2. Чтобы проверка количество выполняемых модулей 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-адресов узлов. Это расширенная конфигурация, которую вы изучите в будущем. В сводке приведены инструкции, если вы решили удалить и очистить виртуальную машину.