Files
netology-devops/src/homework/12-kubernetes/12.1

Выполнение домашнего задания по теме "12.1. Компоненты Kubernetes"

Q/A

Задание 1

Установить Minikube

Для экспериментов и валидации ваших решений вам нужно подготовить тестовую среду для работы с Kubernetes. Оптимальное решение — развернуть на рабочей машине Minikube.

Как поставить на yandex.cloud:

  • создать виртуальную машину
  • подключитесь к серверу по ssh
  • установите миникуб и докер следующими командами:
  • проверить версию можно командой minikube version
  • переключаемся на root и запускаем миникуб: minikube start --vm-driver=none
  • после запуска стоит проверить статус: minikube status
  • запущенные служебные компоненты можно увидеть командой: kubectl get pods --namespace=kube-system

Для сброса кластера стоит удалить кластер и создать заново

  • minikube delete
  • minikube start --vm-driver=none

Возможно, для повторного запуска потребуется выполнить команду: sudo sysctl fs.protected_regular=0

Инструкция по установке Minikube - ссылка

Для начала нужно создать виртуальную машину в yandex.cloud. Затем подключиться к ней по ssh и выполнить команды по установке docker и minikube. Результатом будет установленная утилита:

minikube version
minikube version: v1.27.1
commit: fe869b5d4da11ba318eb84a3ac00f336411de7ba

Следующим шагом нужно запустить minikube:

minikube start --vm-driver=docker

Здесь используется драйвер docker, так как это рекомендация из документации:

Most users of this driver should consider the newer Docker driver, as it is significantly easier to configure and does not require root access. The none driver is recommended for advanced users only.

Затем нужно проверить статус minikube:

minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
kubectl get pods --namespace=kube-system
NAME                               READY   STATUS    RESTARTS   AGE
coredns-565d847f94-8qpml           1/1     Running   0          66s
etcd-minikube                      1/1     Running   0          79s
kube-apiserver-minikube            1/1     Running   0          79s
kube-controller-manager-minikube   1/1     Running   0          79s
kube-proxy-dvrgd                   1/1     Running   0          66s
kube-scheduler-minikube            1/1     Running   0          79s
storage-provisioner                1/1     Running   0          73s

Задание 2

Запуск Hello World

После установки Minikube требуется его проверить. Для этого подойдет стандартное приложение hello world. А для доступа к нему потребуется ingress.

  • развернуть через Minikube тестовое приложение по туториалу
  • установить аддоны ingress и dashboard

Активация dashboard:

minikube dashboard

Так как minikube по умолчанию делает доступ до dashboard только изнутри виртуальной машины, то необходимо дополнительно запустить kubectl proxy, чтобы иметь возможность попасть в dashboard из-вне:

kubectl proxy --address='0.0.0.0' --disable-filter=true

Результат: k8s_dashboard

Для деплоя hello-node сервиса нужно выполнить команду:

kubectl create deployment hello-node --image=k8s.gcr.io/echoserver:1.4\
&& kubectl get deployments
NAME         READY   UP-TO-DATE   AVAILABLE   AGE
hello-node   1/1     1            1           45s
kubectl get pods
NAME                         READY   STATUS    RESTARTS   AGE
hello-node-697897c86-wczpg   1/1     Running   0          69s

Установка дополнений (только ingress, так как dashboard включён по умолчанию):

minikube addons enable ingress

Проверка установки:

minikube addons list
|-----------------------------|----------|--------------|--------------------------------|
|         ADDON NAME          | PROFILE  |    STATUS    |           MAINTAINER           |
|-----------------------------|----------|--------------|--------------------------------|
| ambassador                  | minikube | disabled     | 3rd party (Ambassador)         |
| auto-pause                  | minikube | disabled     | Google                         |
| csi-hostpath-driver         | minikube | disabled     | Kubernetes                     |
| dashboard                   | minikube | enabled ✅   | Kubernetes                     |
| default-storageclass        | minikube | enabled ✅   | Kubernetes                     |
| ...                         | ...      | ...          | ...                            |
| ingress                     | minikube | enabled ✅   | Kubernetes                     |
| ingress-dns                 | minikube | disabled     | Google                         |
| ...                         | ...      | ...          | ...                            || registry-creds              | minikube | disabled     | 3rd party (UPMC Enterprises)   |
| storage-provisioner         | minikube | enabled ✅   | Google                         |
| storage-provisioner-gluster | minikube | disabled     | 3rd party (Gluster)            |
| volumesnapshots             | minikube | disabled     | Kubernetes                     |
|-----------------------------|----------|--------------|--------------------------------|

Задание 3

Установить kubectl

Подготовить рабочую машину для управления корпоративным кластером. Установить клиентское приложение kubectl.

  • подключиться к minikube
  • проверить работу приложения из задания 2, запустив port-forward до кластера

Для подключения к minikube с другой машины необходимо:

  • Взять конфигурацию ~/.kube/config с виртуальной машины и перенести её в ~/.kube/minikube-config со следующими изменениями:
    • закомментировать ключ certificate-authority, client-certificate, client-key
    • заменить значение ключа server на ip-адрес виртуальной машины и порт 8001 (обязательно должна выполняться команда kubectl proxy)

Пример полученного файла: minikube-config

После этого можно выполнять команды по работе с кластером:

 kubectl --kubeconfig ~/.kube/minikube-config cluster-info
Kubernetes control plane is running at http://84.252.137.29:8001
CoreDNS is running at http://84.252.137.29:8001/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

Судя по статье, проброс порта для сервиса minikube может происходить тремя разными способами:

  • С помощью команды minikube service <название сервиса>
  • Использовать команду port-forward, чтобы сопоставить сервис и localhost
  • Открыть порты (либо диапазоны портов) при запуске minikube

Но ни один из этих способов не дал возможности делать запросы с локального хоста на сервис внутри кластера minikube