Kubernetes - является проектом с открытым исходным кодом, предназначенным для управления кластером контейнеров Linux как единой системой. Minikube - это мини Kubernetes для начального изучения.
1. Предварительная настройка
Проверяем наличие/поддержку виртуализации VT-x/AMD-v:
cat /proc/cpuinfo | grep 'vmx\|svm'
* Если видите что-то вроде этого, то все хорошо:
cat /proc/cpuinfo | grep 'vmx\|svm' 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 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. Как установить данный пакет, можете посмотреть на официальной странице проекта. Првоеряем наличие:
dpkg -l | grep virtualbox ii virtualbox-6.0 6.0.14-133895~Debian~buster amd64 Oracle VM VirtualBox
* не забываем проверить наличие включенной поддержки виртуализации в Биос!
2. Устанавливаем Minikube
Последняя версия доступна здесь: https://github.com/kubernetes/minikube/releases
# curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube_1.5.2.deb curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 \ && chmod +x minikube sudo mkdir -p /usr/local/bin/ sudo install minikube /usr/local/bin/
* можно поменять: /usr/local/bin/
Установите kubectl:
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. Проверяем работу (занимает время ждем):
$ minikube start minikube v1.5.2 on Debian 10.1 Tip: Use 'minikube start -p <name>' to create a new cluster, or 'minikube delete' to delete this one. Starting existing virtualbox VM for "minikube" ... Waiting for the host to be provisioned ... Preparing Kubernetes v1.16.2 on Docker '18.09.9' ... Relaunching Kubernetes using kubeadm ... Waiting for: apiserver Done! kubectl is now configured to use "minikube"
Cписок запущенных в кластере подов:
$ kubectl get pods --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE default hello-minikube-5688c64fd7-w9q62 1/1 Running 1 3d kube-system coredns-5644d7b6d9-nq6vj 1/1 Running 3 3d15h kube-system coredns-5644d7b6d9-sqj46 1/1 Running 0 34s kube-system etcd-minikube 1/1 Running 3 3d15h kube-system kube-addon-manager-minikube 1/1 Running 3 3d15h kube-system kube-apiserver-minikube 1/1 Running 3 3d15h kube-system kube-controller-manager-minikube 1/1 Running 0 16s kube-system kube-proxy-4vn4c 1/1 Running 3 3d15h kube-system kube-scheduler-minikube 1/1 Running 3 3d15h kube-system storage-provisioner 1/1 Running 3 3d15h
Cписок запущенных в кластере нод:
$ kubectl get nodes NAME STATUS ROLES AGE VERSION minikube Ready master 3d15h v1.16.2
4. Установка пода hello-minikube:
Проверим на демо-версии Docker-образ hello-minikube:
kubectl run hello-minikube --image=gcr.io/google_containers/echoserver:1.4 --port=8080 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. deployment.apps/hello-minikube created
Проверяем списки подов и deployments:
kubectl get pods NAME READY STATUS RESTARTS AGE hello-minikube-5688c64fd7-wvp79 1/1 Running 0 69s
kubectl get deployments NAME READY UP-TO-DATE AVAILABLE AGE hello-minikube 1/1 1 1 76s
Для доступа к сервису hello-minikube нужно открыть ему внешний IP:
kubectl expose deployment hello-minikube --type=NodePort service/hello-minikube exposed
* Внимание: необходимо использовать тип NodePort, т.к. Minikube не поддерживает сервис LoadBalancer.
Проверяем сервис:
kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-minikube NodePort 10.96.000.000 <none> 8080:30222/TCP 60s kubernetes ClusterIP 10.00.0.0 <none> 443/TCP 3d15h
Теперь мы можем с помощью curl из командной строки, либо браузером открыть ссылку на сервис:
minikube service hello-minikube --url http://192.168.99.100:30222
curl $(minikube service hello-minikube --url) CLIENT VALUES: client_address=172.00.0.0 command=GET real path=/ query=nil request_version=1.1 request_uri=http://192.168.99.100:8080/ SERVER VALUES: server_version=nginx: 1.10.0 - lua: 10001 HEADERS RECEIVED: accept=*/* host=192.168.99.100:30222 user-agent=curl/7.64.0 BODY: -no body in request-
* Внимание: IP-адрес, который управляется VirtualBox'ом, может изменяться.
Все работает.
5. Удаляем hello-minikube
kubectl delete service,deployment hello-minikube service "hello-minikube" deleted deployment.apps "hello-minikube" deleted
kubectl get pods No resources found in default namespace.
kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.00.0.0 <none> 443/TCP 3d15h
Источник: по материалам с habr