Despre Linux

  • Facebook
  • Twitter
  • LinkedIn
  • Acasă
  • Linux
    • Comenzi Linux
    • Tutoriale
  • Kubernetes
  • RHCSA
    • Exerciții RHCSA
    • SELinux
    • Permisiuni
  • General
    • Open source
  • Contact

Minikube, cel mai simplu mod de a rula local Kubernetes

30 iunie 2018 By Bobses Un comentariu

Într-un articol anterior am instalat local un întreg cluster Kubernetes: un master și cel puțin 2 noduri. Această configurație presupune existența a cel puțin 3 mașini virtuale care să funcționeze simultan, adică destul de multe resurse alocate (minim 3 core-uri și 4 GB RAM). Dar sunt utilizatori care vor să învețe sau să testeze Kubernetes și nu dispun de suficiente resurse - sau, pur și simplu, nu vor să-și bată capul prea mult cu infrastructura K8s ci doar să testeze aplicații sau anumite opțiuni. Pentru aceștia există Minikube, un instrument care face extrem de simplă utilizarea locală a unui cluster Kubernetes.

Minikube rulează un cluster Kubernetes cu un singur nod, în interiorul unei mașini virtuale pe calculatorul personal. De aceea, este obligatorie existența pe mașina personală a virtualizării cu un hypervisor KVM sau VirtualBox - instalarea acestora nu face obiectul articolului de față. Tutorialul de mai jos este făcut pe un sistem cu Fedora și KVM.

De asemenea, înainte de a instala Minikube trebuie să instalăm kubectl, unul dintre cele mai folosite instrumente kubernetes.

Instalarea kubectl

Kubectl este utilitarul pentru accesarea Kubernetes din linia de comandă, cu ajutorul căruia putem lansa sau gestiona aplicații într-un cluster k8s. Cu ajutorul kubectl putem inspecta resursele clusterului ori putem crea, șterge sau actualiza componente.

Instalare kubectl în CentOS, Red Hat, Fedora

În primul rând, trebuie să adăugăm repo-ul pentru Kubernetes:

$ sudo vi /etc/yum.repos.d/kubernetes.repo

În interiorul fișierului se adaugă:

[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg

$ sudo dnf upgrade && sudo dnf install kubectl -y

Instalare kubectl în Debian, Ubuntu și derivate

Se rulează liniile de mai jos:

$ sudo apt-get update && sudo apt-get install -y apt-transport-https
$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
$ sudo touch /etc/apt/sources.list.d/kubernetes.list
$ echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
$ sudo apt-get update
$ sudo apt-get install -y kubectl

Pentru mai multe variante de instalare a kubectl consultați secțiunea dedicată acestui instrument pe pagina kubernetes.io.

Instalare Minikube

Vom instala ultima versiune minikube - 0.28 în momentul scrierii acestui tutorial.

În Linux se rulează comanda de mai jos:

$ curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/

Pornire Minikube

Acum putem lansa primul nostru cluster K8s cu 1 singur nod gestionat de Minikube. Dacă lucrăm cu VirtualBox, nu mai trebuie să facem nimic special - Minikube pornește în mod prestabilit folosind driverul VirtulBox:

$ minikube start

În cazul în care am ales ca variantă de virtualizare hypervisorul KVM, trebuie să instalăm driverul aferent (presupunem că avem deja configurat QEMU și KVM):

$ curl -LO https://storage.googleapis.com/minikube/releases/latest/docker-machine-driver-kvm2 && chmod +x docker-machine-driver-kvm2 && sudo mv docker-machine-driver-kvm2 /usr/local/bin/

Pentru a porni Minikube cu KVM se rulează comanda:

$ minikube start --vm-driver kvm2

La lansările ulterioare ale clusterului este suficientă comanda minikube start, fără indicarea driverului kvm.

Vom primi un răspuns asemănător cu cel de mai jos:

Starting local Kubernetes v1.10.0 cluster...
Starting VM...
Downloading Minikube ISO
153.08 MB / 153.08 MB [============================================] 100.00% 0s
Getting VM IP address...
Moving files into cluster...
Downloading kubelet v1.10.0
Downloading kubeadm v1.10.0
Finished Downloading kubelet v1.10.0
Finished Downloading kubeadm v1.10.0
Setting up certs...
Connecting to cluster...
Setting up kubeconfig...
Starting cluster components...
Kubectl is now configured to use the cluster.

Asta e tot! Dacă deschideți Virtual Machine Manager sau VirtualBox, veți vedea noua mașină virtuală creată:

Putem începe să vizualizăm clusterul, să lansăm aplicații și așa mai departe. Mai jos sunt câteva exemple care vă vor ajuta să începeți.

Vizualizare noduri cluster K8s

$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
minikube Ready master 1h v1.10.0

$ kubectl get nodes -owide
NAME STATUS ROLES AGE VERSION EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
minikube Ready master 1h v1.10.0 <none> Buildroot 2018.05 4.16.14 docker://17.12.1-ce

Instalarea primului deployment

$ kubectl run hello-minikube --image=k8s.gcr.io/echoserver:1.10 --port=8080
deployment.apps/hello-minikube created

Crearea unui serviciu de tip NodePort pentru acest prim deployment

$ kubectl expose deployment hello-minikube --type=NodePort
service/hello-minikube exposed

Vizualizare poduri

$ kubectl get pods
NAME READY STATUS RESTARTS AGE
hello-minikube-7c77b68cff-n7lg4 1/1 Running 0 3m

$ kubectl get pods -owide
NAME READY STATUS RESTARTS AGE IP NODE
hello-minikube-7c77b68cff-n7lg4 1/1 Running 0 3m 172.17.0.4 minikube

Vizualizare descriere pod

$ kubectl describe pod hello-minikube-7c77b68cff-n7lg4
Name: hello-minikube-7c77b68cff-n7lg4
Namespace: default
Node: minikube/192.168.122.151
Start Time: Sat, 30 Jun 2018 11:47:04 +0300
Labels: pod-template-hash=3733624799
run=hello-minikube
[...]

Putem folosi comanda curl pe podul hello-minikube (dacă luăm adresa indicată mai jos și portul respectiv - 192.168.39.151:31043 - și o lipim în browser, vom vedea aceleași informații):

$ curl $(minikube service hello-minikube --url)

Hostname: hello-minikube-7c77b68cff-n7lg4

Pod Information:
-no pod information available-

Server values:
server_version=nginx: 1.13.3 - lua: 10008

Request Information:
client_address=172.17.0.1
method=GET
real path=/
query=
request_version=1.1
request_scheme=http
request_uri=http://192.168.39.151:8080/

Request Headers:
accept=*/*
host=192.168.39.151:31043
user-agent=curl/7.59.0

Vizualizare servicii

$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-minikube NodePort 10.105.93.178 <none> 8080:31043/TCP 2m
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 1h

Vizualizare namespace-uri

$ kubectl get ns
NAME          STATUS  AGE
default           Active   1h
kube-public   Active   1h
kube-system Active   1h

Vizualizare IP cluster si informații despre cluster

$ minikube ip
192.168.39.151

$ kubectl cluster-info
Kubernetes master is running at https://192.168.39.151:8443
KubeDNS is running at https://192.168.39.151:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

Pentru a opri clusterul K8s:

$ minikube stop
Stopping local Kubernetes cluster...
Machine stopped.

Resurse consumate de Minikube

Prestabilit, Minikube pornește cu 2 cores și 2 GB RAM. Dacă doriți să alocați mai multe resurse clusterului vostru k8s, rulați comanda de pornire cu flag-urile --memory și --cpus (dacă ați pornit deja un cluster minikube, acesta trebuie șters înainte de alocarea mai multor procesoare și a unei cantități mai mari de memorie):

$ minikube delete
$ minikube start --memory 4096 --cpus 4

Helm și Minikube

Așa cum am mai spus într-un alt articol, Helm este un fel de manager de pachete pentru Kubernetes.

Instalați Helm așa cum am descris aici. Dacă aveți probleme la funcționarea cu Minikube, este posibil să trebuiască să instalați și pachetul socat (sudo yum install socat sau sudo apt-get install socat).

Cu comanda de mai jos vizualizați podul tiller-ului:

$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
default hello-minikube-7c77b68cff-n7lg4 1/1 Running 1 2h
kube-system etcd-minikube 1/1 Running 0 2h
kube-system kube-addon-manager-minikube 1/1 Running 2 3h
kube-system kube-apiserver-minikube 1/1 Running 0 2h
kube-system kube-controller-manager-minikube 1/1 Running 0 2h
kube-system kube-dns-86f4d74b45-624tj 3/3 Running 6 4h
kube-system kube-proxy-kbgpm 1/1 Running 0 2h
kube-system kube-scheduler-minikube 1/1 Running 0 2h
kube-system kubernetes-dashboard-5498ccf677-8xqbr 1/1 Running 4 3h
kube-system storage-provisioner 1/1 Running 4 3h
kube-system tiller-deploy-f9b8476d-xh7f4 1/1 Running 1 2h

Versiunea aplicației Helm:

$ helm version
Client: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}

Personal, prefer un cluster cu 3 mașini virtuale (1 master și 2 noduri) - există mai multe opțiuni disponibile pe un astfel de cluster decât pe Minikube. Alegerea tipului de cluster aparține fiecăruia - importantă este doar utilizarea Kubernetes și mai puțin numărul de noduri. 🙂

Partajează asta:

  • Dă clic pentru a partaja pe Facebook(Se deschide într-o fereastră nouă)
  • Dă clic pentru a partaja pe LinkedIn(Se deschide într-o fereastră nouă)
  • Dă clic pentru a partaja pe Twitter(Se deschide într-o fereastră nouă)

Similare

Din categoria: Tutoriale Etichete: helm, k8s, kubernetes, KVM, minikube

Trackbacks

  1. Prometheus Operator: administrare Prometheus, Alertmanager și Grafana în Kubernetes | Despre Linux spune:
    20 iunie 2021 la 11:23

    […] Normal, avem de nevoie, în primul rând , de un cluster Kubernetes :). Acesta poate fi configurat în cloud folosind diverse servicii (AWS, GCE) sau local, folosind fie mașini virtuale, fie minikube. […]

    Răspunde

Lasă un răspuns Anulează răspunsul

Acest site folosește Akismet pentru a reduce spamul. Află cum sunt procesate datele comentariilor tale.

Copyright © 2023 · Bobses

Administrează consimțămintele pentru cookie-uri
Pentru a oferi cea mai bună experiență, folosim tehnologii, cum ar fi cookie-uri, pentru a stoca și/sau accesa informațiile despre dispozitive. Consimțământul pentru aceste tehnologii ne permite să procesăm date, cum ar fi comportamentul de navigare sau ID-uri unice pe acest site. Dacă nu îți dai consimțământul sau îți retragi consimțământul dat poate avea afecte negative asupra unor anumite funcționalități și funcții.
Funcționale Mereu activ
Stocarea tehnică sau accesul sunt strict necesare în scopul legitim de a permite utilizarea unui anumit serviciu cerut în mod explicit de către un abonat sau un utilizator sau în scopul exclusiv de a executa transmiterea unei comunicări printr-o rețea de comunicații electronice.
Preferințe
Stocarea tehnică sau accesul este necesară în scop legitim pentru stocarea preferințelor care nu sunt cerute de abonat sau utilizator.
Statistici
Stocarea tehnică sau accesul care sunt utilizate exclusiv în scopuri statistice. The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
Stocarea tehnică sau accesul sunt necesare pentru a crea profiluri de utilizator pentru a trimite publicitate sau pentru a urmări utilizatorul pe un site web sau pe mai multe site-uri web în scopuri de marketing similare.
Administrează opțiunile Administrează serviciile Administrează vânzătorii Citește mai multe despre aceste scopuri
Vizualizează preferințele
{title} {title} {title}