You are here

Изучаем Kubernetes на примере Minikube

Kubernetes - является проектом с открытым исходным кодом, предназначенным для управления кластером контейнеров Linux как единой системой. Minikube - это мини Kubernetes для начального изучения.

Изучаем Kubernetes на примере Minikube

1. Предварительная настройка

Проверяем наличие/поддержку виртуализации VT-x/AMD-v:

  1. cat /proc/cpuinfo | grep 'vmx\|svm'

* Если видите что-то вроде этого, то все хорошо:

  1. cat /proc/cpuinfo | grep 'vmx\|svm'
  2. flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer xsave lahf_lm cpuid_fault epb pti tpr_shadow vnmi flexpriority ept vpid fsgsbase smep erms xsaveopt dtherm arat pln pts
  3. flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer xsave lahf_lm cpuid_fault epb pti tpr_shadow vnmi flexpriority ept vpid fsgsbase smep erms xsaveopt dtherm arat pln pts

Устанавливаем последний VirtualBox или VMware Fusion. У нас это VirtualBox. Как установить данный пакет, можете посмотреть на официальной странице проекта. Првоеряем наличие:

  1. dpkg -l | grep virtualbox
  2. ii virtualbox-6.0 6.0.14-133895~Debian~buster amd64 Oracle VM VirtualBox

* не забываем проверить наличие включенной поддержки виртуализации в Биос!

2. Устанавливаем Minikube
Последняя версия доступна здесь: https://github.com/kubernetes/minikube/releases

  1. # curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube_1.5.2.deb
  2. curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 \
  3. && chmod +x minikube
  4. sudo mkdir -p /usr/local/bin/
  5. sudo install minikube /usr/local/bin/

* можно поменять: /usr/local/bin/

Установите kubectl:

  1. 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/

3. Проверяем работу (занимает время ждем):

  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"

Cписок запущенных в кластере подов:

  1. $ kubectl get pods --all-namespaces
  2. NAMESPACE NAME READY STATUS RESTARTS AGE
  3. default hello-minikube-5688c64fd7-w9q62 1/1 Running 1 3d
  4. kube-system coredns-5644d7b6d9-nq6vj 1/1 Running 3 3d15h
  5. kube-system coredns-5644d7b6d9-sqj46 1/1 Running 0 34s
  6. kube-system etcd-minikube 1/1 Running 3 3d15h
  7. kube-system kube-addon-manager-minikube 1/1 Running 3 3d15h
  8. kube-system kube-apiserver-minikube 1/1 Running 3 3d15h
  9. kube-system kube-controller-manager-minikube 1/1 Running 0 16s
  10. kube-system kube-proxy-4vn4c 1/1 Running 3 3d15h
  11. kube-system kube-scheduler-minikube 1/1 Running 3 3d15h
  12. kube-system storage-provisioner 1/1 Running 3 3d15h

Cписок запущенных в кластере нод:

  1. $ kubectl get nodes
  2. NAME STATUS ROLES AGE VERSION
  3. minikube Ready master 3d15h v1.16.2

4. Установка пода hello-minikube:

Проверим на демо-версии Docker-образ hello-minikube:

  1. kubectl run hello-minikube --image=gcr.io/google_containers/echoserver:1.4 --port=8080
  2. kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
  3. deployment.apps/hello-minikube created

Проверяем списки подов и deployments:

  1. kubectl get pods
  2. NAME READY STATUS RESTARTS AGE
  3. hello-minikube-5688c64fd7-wvp79 1/1 Running 0 69s
  1. kubectl get deployments
  2. NAME READY UP-TO-DATE AVAILABLE AGE
  3. hello-minikube 1/1 1 1 76s

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

  1. kubectl expose deployment hello-minikube --type=NodePort
  2. service/hello-minikube exposed

* Внимание: необходимо использовать тип NodePort, т.к. Minikube не поддерживает сервис LoadBalancer.

Проверяем сервис:

  1. kubectl get services
  2. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  3. hello-minikube NodePort 10.96.000.000 <none> 8080:30222/TCP 60s
  4. kubernetes ClusterIP 10.00.0.0 <none> 443/TCP 3d15h

Теперь мы можем с помощью curl из командной строки, либо браузером открыть ссылку на сервис:

  1. minikube service hello-minikube --url
  2. http://192.168.99.100:30222
  1. curl $(minikube service hello-minikube --url)
  2. CLIENT VALUES:
  3. client_address=172.00.0.0
  4. command=GET
  5. real path=/
  6. query=nil
  7. request_version=1.1
  8. request_uri=http://192.168.99.100:8080/
  9.  
  10. SERVER VALUES:
  11. server_version=nginx: 1.10.0 - lua: 10001
  12.  
  13. HEADERS RECEIVED:
  14. accept=*/*
  15. host=192.168.99.100:30222
  16. user-agent=curl/7.64.0
  17. BODY:
  18. -no body in request-

* Внимание: IP-адрес, который управляется VirtualBox'ом, может изменяться.

Все работает.

5. Удаляем hello-minikube

  1. kubectl delete service,deployment hello-minikube
  2. service "hello-minikube" deleted
  3. deployment.apps "hello-minikube" deleted
  1. kubectl get pods
  2. No resources found in default namespace.
  1. kubectl get services
  2. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  3. kubernetes ClusterIP 10.00.0.0 <none> 443/TCP 3d15h

Источник: по материалам с habr