Выполнение домашнего задания по теме "12.1. Компоненты Kubernetes"
Q/A
Задание 1
Установить Minikube
Для экспериментов и валидации ваших решений вам нужно подготовить тестовую среду для работы с Kubernetes. Оптимальное решение — развернуть на рабочей машине Minikube.
Как поставить на yandex.cloud:
- создать виртуальную машину
- подключитесь к серверу по ssh
- установите миникуб и докер следующими командами:
- curl -LO https://storage.googleapis.com/kubernetes-release/release/
curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt/bin/linux/amd64/kubectl- chmod +x ./kubectl
- sudo mv ./kubectl /usr/local/bin/kubectl
- curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
- проверить версию можно командой 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
Для деплоя 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
