Work Binder na Kubernetes infrastrukturi
Kubernetes je open-source platforma za automatizovanje raspoređivanja, skaliranja i upravljanja kontejnerima. On rešava probleme sa raspodelom opterećenja, automatskim oproavkom, skaliranjem i ponovnim pokretanjem node-ova i kontejnera, obezbeđuje otkrivanje servisa i minimalno vreme isporučivanja kontejnera. Kubernetes je veoma portabilan (pokretanje je moguće na cloud provajderima, bare-metal i hibridnim sistemima), konfigurabilan, modularan i poseduje veliku podršku zajednice kao i velikih kompanija. Nastalo je u Google-u kao open-source verzija postojećih Google-ovih platformi Borg i Omega. Projekat je doniran CNCF grupaciji 2014. godine, napisan je u Go jeziku i soruce code se nalazi na github-u.
U ovom članku biće objašnjen način kreiranja i konfiguracije Kubernetes klastera, kao i način kako se ova platforma može iskoristiti za rešavanje realnog problema WorkBinder-a. U poglavlju Arhitektura ukratko će biti predstavljeni osnovni koncepti i komponente Kubernetes platforme. Zatim prelazimo na postupak kreiranja i konfigurisanja virtuelnih mašina na klasteru pomoću VBoxManage alata. Sledeća sekcija obuhvata instalaciju i konfiguraciju Dokcer-a i Kubernetes-a pomoću kubeadm alata. Na kraju, u poglavlju WorkBinder, upoznaćemo se sa radom Binder-a i načinom na koji Kubernetes možemo iskoristi za lakše upravljanje radncima i ostvarivanje bolje performanse.
Sadržaj
Arhitektura
Kubernetes klaster se na najvišem nivou sastoji od master i worker node-ova. Master node je odgovoran za upravljanje klasterom kao i za pružanje spoljnog interfejsa korisnicima. Njegove osnovne komponente su:
- API server – ulazna tačka za sve REST komande koje se koriste za upravljanje klasterom. On vrši obradu REST zahteva, validira ih i izvršava.
- etcd storage – jednostavno, distribuirano, ključ-vrednost skladiste. Služi za razmenu informacija između nodova i obaveštenje o promenama konfiguracije.
- Scheduler – služi za raspoređivanje servisa na odgovarajuce nodove. Scheduler poseduje informacije o raspoloživosti resursa sistema na osnovu cega se vrši raspoređivanje.
- Controller Manager – glavni servis koji pokreće Kubernetes i on nadgleda stanje celog sistema. Primeri kontrolera koji dolaze uz Kubernetes su replication, endpoints, namespace i serviceaccounts kontroleri.
Na worker node-ovima se vrši stvarno pokretanje servisa i container-a zapakovanih u pod-ove. Pod je najmanja jedinica u sistemu i sastoji se od jednog ili više container-a. Worker node-ovi obezbeđuju mrežni interfejs između kontejnera i njihove osnovne komponente su:
- Kubelet – servis odgovoran za komunikaciju sa master node-om. On dobija konfiguraciju pod-a od master-a i osigurava da su opisani container-i pokrenuti.
- kube-proxy – mrežni proxy i load balancer za podove na nodu
- kubectl– konzolni alat za komunikaciju sa API servisom na master node-u
Više informacija o Docker-u i Kubernetes-u mozete pronaci u članku Docker i Kubernetes.
Kreiranje virtualne masine na klasteru (VirtualBox)
U ovom odeljku biće opisan postupak kreiranja virtualnih mašina na klasteru korišćenjem VBoxManage komandnog alata.
$ VMMaster='Ubuntu_64_master'
Kreiranje dinamičkog diska veličine 50 GB.
$ VBoxManage createhd --filename $VMMaster.vdi --size 51200
Pregled podržanih operativnih sistema.
$ VBoxManage list ostypes | grep Ubuntu ID: Ubuntu Description: Ubuntu (32-bit) ID: Ubuntu_64 Description: Ubuntu (64-bit)
Za kreiranje virtualne mašine koristi se komanda createvm koja kao argumente prima naziv virtualne masine i tip operativnog sistema. U ovom tutorijalu koristimo Ubuntu Server 16.04.
$ VBoxManage createvm --name $VMMaster --ostype "Ubuntu_64" --register
Dodavanje SATA kontrolera sa priključenim dinamičkim diskom
$ VBoxManage storagectl $VMMaster --name "SATA Controller" --add sata \ > --controller IntelAHCI $ VBoxManage storageattach $VMMaster --storagectl "SATA Controller" --port 0 \ > --device 0 --type hdd --medium $VMMaster .vdi
Dodavanje IDE kontrolera i dodavanje dvd diska sa iso fajlom za instalaciju
$ VBoxManage storagectl $VMMaster --name "IDE Controller" --add ide $ VBoxManage storageattach $VMMaster --storagectl "IDE Controller" --port 0 \ > --device 0 --type dvddrive --medium ./ubuntu-16.04.3-server-amd64.iso
Podešavanje RAM, VRAM memorije i network adaptera
$ VBoxManage modifyvm $VMMaster --memory 1024 --vram 128 $ VBoxManage modifyvm $VMMaster --nic1 bridged
Otvaranje porta za remote desktop
$ VBoxManage modifyvm $VMNode1 --vrde on --vrdeport 3387
Startovanje masine u headless mod-u
VBoxManage startvm "Ubuntu-64" --type headless
Sada je mašina startovana i za pristup mozemo koristiti RDP
Instalacija Kuberentes-a pomocu kubeadm-a
Za instalaciju Kuberntesa pomoću kubeadm-a potrebno je:
- Jedna ili vise mašina sa pokrenutim Ubuntu 16.04+, CentOS 7 ili HypriotOS v1.0.1+
- 1 GB ili vise RAM memorije po masini
- Povezanost između svih mašina u klasteru
- Otvoreni zahtevani portovi
- Instaliran Docker, kubectl, kubelet i kubeadm
Instalacija Docker-a
Dodavanje Docker repository-ja
$ sudo apt-get update $ sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ software-properties-common $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
Instalacija docker-a (comunity edition)
$ sudo apt-get update $ sudo apt-get install docker-ce -y
Upravljanje docker-om bez root privilegija
$ sudo groupadd docker $ sudo usermod -aG docker $USER $ logout
Instalacija Kubectl-a
Preuzimanje najnovije verzije kubectl, dodavanje executable dozvole i prebacivanje u PATH
$ 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
Instalacija kubelet-a i kubeadm-a
$ apt-get update && apt-get install -y apt-transport-https curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - catNakon instalacije svih komponenti kloniramo virtualnu masinu i na taj način napravimo worker node-ove.
$ VMNode1="Ubuntu_64_node1" $ VBoxManage clonevm $VMMaster --name $VMNode1 --registerNakon kloniranja mozemo promeniti port za remote desktop
$ VBoxManage modifyvm $VMNode1 --vrde on --vrdeport 3381U ovom tutorialu kreiraćemo jedan master i jedan worker node, za vise worker-a postupak je isti.
Podešavanje mreže
Podešavanje master node-a
Na master node-u prvo u /etc/hosts fajlu dodajemo adresu worker-a i njegov hostname
127.0.0.1 localhost 127.0.1.1 master 192.168.0.147 node1 # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allroutersPostavljanje static ip addrese na master node-u /etc/network/interfaces
source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto ens33 iface ens33 inet static address 192.168.0.145 netmask 255.255.255.0 gateway 192.168.0.1 dns-nameservers 8.8.8.8 8.8.4.4Nakon podešavanje mreže mozemo restartovati networking.service
$ sudo systemctl restart networking.serviceTestiramo pristup internetu
$ ping google.rsUkoliko dobijemo odgovor znaci da imamo konekciju ka internetu
Podešavanje worker-a
Zato što smo worker klonirali potrebno je da izmenimo hostname u fajlu /etc/hostname sa master na node1
$ cat /etc/hostname node1Kao i kod master node-a podešavamo /etc/hosts fajl i dodajemo adresu ka master node-u
127.0.0.1 localhost 127.0.1.1 node1 192.168.0.145 master # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allroutersOstalo je da namestimo staticku IP adresu za worker-a. Menjamo fajl /etc/network/interfaces
source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto ens33 iface ens33 inet static address 192.168.0.147 netmask 255.255.255.0 network 192.168.0.1 broadcast 192.168.1.255 gateway 192.168.0.1 dns-nameservers 8.8.8.8 8.8.4.4Restartujemo networking.service i testiramo mrežu
$ sudo systemctl restart networking.service $ ping masterUkoliko ping master vraća odgovor zanci da je veza uspostavljena i mozemo krenuti sa podešavanjem kubeadm-a
Podešavanje kubeadm-a
Za inicijalizaciju glavnog nod na masteru pokrećemo sledeću komandu
$ sudo kubeadm init --pod-network-cidr=192.168.0.0/16Nakon izvršavanja ove komande Kubernetes je uspešno inicijalizovan i korisnik može videti token za povezivanje worker-a sa master nodom u formatu
kubeadm join --token e01def.237398f43b1ddc07 192.168.0.145:6443Da bi običan korisnik mogao da koristi Kubernetes potrebno je pokrenuti sledeće komande koje kreiraju direktoriju .kube u njegovom home direktorijumu, kopiraju Kubernetes config fajl i postavljaju trenutnog korisnika za vlasnika config fajla
$ mkdir -p $HOME/.kube $ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config $ sudo chown $(id -u):$(id -g) $HOME/.kube/configDa bi pod-ovi međusobno komunicirali potrebno je instalirati odgovarajući pod network dodatak. Postoji nekoliko dostupnih pod network dodataka kao sto su Calico, Chanal, Flannel, Romana, Weave i Kube-router. U ovom tutorijalu koristićemo Kube-router. Ovaj dodatak se instalira sledećom komandom:
$ kubectl apply -f https://raw.githubusercontent.com/cloudnativelabs/kube-router/master/daemonset/kubeadm-kuberouter.yamlNakon ove instalacije možemo izlistati node-ove
$ kubectl get nodes NAME STATUS AGE VERSION master Ready 1d v1.7.5Zato što trenutno nemamo konektovane druge node-ove vidimo samo master node. Za izlistavanje svih pod-ova koristimo sledecu komandu:
kubectl get pods --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE kube-system etcd-master 1/1 Running 0 1d kube-system kube-apiserver-master 1/1 Running 0 1d kube-system kube-controller-manager-master 1/1 Running 0 1d kube-system kube-dns-2425271678-zbddr 3/3 Running 0 1d kube-system kube-proxy-91n8m 1/1 Running 0 1d kube-system kube-proxy-h8rsx 1/1 Running 0 1d kube-system kube-router-v51p5 1/1 Running 0 1d kube-system kube-scheduler-master 1/1 Running 0 1dAko je kubeadm uspesno instaliran i konfigurisan status svih sistemskih pod-ova biće Runnuing.
Na worker node-u pokrećemo komandu dobijenu kao izlaz komande kubeadm init
$ sudo kubeadm join --token e01def.237398f43b1ddc07 192.168.0.145:6443Sada ako na master node-u pokrenemo kubectl get nodes možemo videti i worker node
$ kubectl get nodes NAME STATUS AGE VERSION master Ready 1d v1.7.5 node1 Ready 30s v1.7.5Work Binder
Work Binder je generički servis razvijen u Javi čiji je glavni zadatak brza alokacija resursa za izvršavanje poslova na HPC/grid-u. Source-code Work Binder-a mozemo pronaći na github-u.
Work Binder se sastoji iz tri dela:
- **Client **- aplikacija koja služi za komunikaciju sa krajnjim korisnikom
- **Worker **- serverski program koji se izvršava na gridu
- **Binder **- generički deo koji služi za upravljanje worker-ima i posredovanje između client-a i worker-a
Binder zahvaljujući ugradjenim algoritmima kreira i održava grupu spremnih worker-a, pri čemu se podiže virtualna mašina za svakog worker-a. Umesto virtualnih mašina worker-i će se pokretati unutar kontejnera. U ovom slučaju kontejneri su bolji izbor od vritualnih mašina zato što zahtevaju manje resursa, vreme pokretanja aplikacije je značajno smanjeno i performanse samog worker-a se povećavaju zahvaljujuči resurisma koji bi se inače uptorebili za pokretanje i rad virtualne mašine. Korišćenjem Kubernetes-a omogućićemo pokretanje i upravljanje kontejnerima sa jednog centralnog mesta koje će pored ostalog automatski vršiti raspodelu opterećenja, skaliranje, oporavak i ponovno pokretanje kontejnera.
Na master node-u kloniramo Work Binder
$ mkdir binder $ cd binder $ git clone https://github.com/imilos/WorkBinder.git $ cd WorkBinder $ ls bin ExternalXML.properties pod.yaml submitRemoteJob.sh binder.policy lib PoolStatus.html ulaz1.xml binder.properties log README.md UploadClient.properties build.xml log.err run_binder.sh WorkBinder.iml calicoctl log.out service.yaml WorkerDispatcher.properties CleanUp.sh manifest.mf src client.properties nbproject startBinderJobLocal.sh External.properties optimizacije submitRemoteJobLocal.sh
Work binder se pokreće pomoću skripte run_binder.sh, koja u zavisnosti od konfiguracije kreira određeni broj workera pozivom skripte submitRemoteJobLocal.sh. Kada su worker-i kreirani oni pomoću skripte startRemoteJobLocal.sh uspostavljaju konekciju sa binder-om. Da bismo omogućili pokretanje worker-a u kontejnerima pomoću Kubernetes-a potrebno je napraviti docker sliku worker-a i izmeniti skriptu submitRemoteJobLocal.sh. Pre toga treba podesiti properties fajlove WorkBinder-a.
binder.properties client.properties External.properties ExternalXML.properties UploadClient.properties WorkerDispatcher.properties
U svim fajlovima nephodno je promeniti binder adresu sa
BinderAddress = localhost
na
BinderAddress = 192.168.0.145
U fajlu WorkerDispatcher.properties potrebno je promeniti i putanju do log fajla
ReportsLocationDir = /home/master/WorkBinder/log/
Kreiranje docker slike
Da bi omogućili pokretanje worker-a na pomoću Kubernetes-a nephodno je napraviti docker sliku worker-a. Zato sto zelimo da slika bude dostupna za preuzimanje sa biloo kog računara,pre build-ovanja potrebno je registrovati se na sajtu cloud.docker.com. Prilikom registracije definišemo svoj docker ID i šifru koju ćemo koristiti prilikom publish-ovanja slike. Nakon registracije možemo se prijavti na docker cloud sa master node-a na sledeći način
$ export DOCKER_ID_USER="imidocker" $ docker login Username (imidocker): Password:
Za kreiranje slike potrebno je napraviti Dockerfile u kome se definišu instrukcije za kreiranje slike. Više informacija o dockeru možete naći u ovom clanku.
$ cd /home/master/binder/ $ touch Dockerfile $ ls Dockerfile WorkBinder
Dockerfile
FROM ubuntu:16.04 WORKDIR /WorkBinder ADD ./WorkBinder /WorkBinder RUN apt-get update RUN apt-get install default-jre -y EXPOSE 40000-60000
Dockerfile služi za kreiranje slike sa specifičnim instrukcijama. Prva komanda je FROM i ona postavlja ubuntu:16.04 kao baznu sliku, WORKDIR je /WorkDir i komandom ADD prebacujemo sadrzaj foldera WorkBinder sa lokalnog diska u sliku. Komande RUN služe za instalaciju Java runtime environment-a dok EXPOSE otvara grupu potova koji služe za komunikaciju između binder-a i worker-a.
Kreiranje slike:
$ doceker build -t worker .
Nakon kreiranja možemo pogledati sve docker slike komandom docker image ls
$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE worker latest 6f2588f1cca8 4 days ago 505MB cloudnativelabs/kube-router latest e03c7b909a82 13 days ago 96.1MB gcr.io/google_containers/kube-apiserver-amd64 v1.7.5 33cecf00bef1 2 weeks ago 186MB gcr.io/google_containers/kube-controller-manager-amd64 v1.7.5 4d581c01252d 2 weeks ago 138MB gcr.io/google_containers/kube-scheduler-amd64 v1.7.5 2aad6febbb16 2 weeks ago 77.2MB gcr.io/google_containers/kube-proxy-amd64 v1.7.5 1314eb3ac430 2 weeks ago 115MB busybox latest d20ae45477cb 3 weeks ago 1.13MB ubuntu 16.04 ccc7a11d65b1 5 weeks ago 120MB mysql 5 c73c7527c03a 7 weeks ago 412MB quay.io/coreos/etcd v3.1.10 47bb9dd99916 2 months ago 34.6MB gcr.io/google_containers/k8s-dns-sidecar-amd64 1.14.4 38bac66034a6 2 months ago 41.8MB gcr.io/google_containers/k8s-dns-kube-dns-amd64 1.14.4 a8e00546bcf3 2 months ago 49.4MB gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64 1.14.4 f7f45b9cb733 2 months ago 41.4MB gcr.io/google_containers/etcd-amd64 3.0.17 243830dae7dd 6 months ago 169MB gcr.io/google_containers/pause-amd64 3.0 99e59f495ffa 16 months ago 747kB
Slika worker-a se nalazi na vrhu tabele i ima Image ID 6f2588f1cca8. Da bismo sliku publish-ovali nephodno je prvo postaviti tag slike i onda pokrenuti komandu docker push
$ docker tag 6f2588f1cca8$DOCKER_ID_USER/worker $ docker push $DOCKER_ID_USER/worker
Nakon uspešnog publish-ovanja sliku možemo videti na docker nalogu
Slika je sada javno dostupna i može se preuzeti sa bilo kog računara pomoću docker pull komande
$ docker pull imidocker/worker:latest $ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE worker latest 6f2588f1cca8 4 days ago 505MB imidocker/worker latest a30fb237f7bc 4 days ago 473MB
Konfiguracija WorkBinder-a za rad sa Kubernetes-om
Nakon kreiranja docker slike potrebno je izmeniti submitRemoteJobLocal.sh skriptu tako da koristi Kubernetes za kreiranje workera.
$ cd /home/master/binder/WorkBinder $ cat ./submitRemoteJobLocal.sh #!/bin/bash # Script for submitting server jobs on the remote CE # Creates a temporary jdl file and submits it CE=$1 ROUTINGINFO=$2 JOBID=$3 LOGFILE=$4 #echo "" #echo "" echo "SUBMITTED: $CE $ROUTINGINFO $JOBID $LOGFILE" sh startBinderJobLocal.sh $1 $2 $3 $4 if [ ! $? = 0 ]; then echo "Error submitting remote job." exit 1 else echo "Job successfully submitted!" fi
Liniju
sh startBinderJobLocal.sh $1 $2 $3 $4
treba promeniti tako da sad Kubernetes kreira docker kontejnere i nakon kreiranja pozove skriptu startBinderJobLocal.sh sa odgovarajucim parametrima. Za kreiranje kontejnera pomoću Kubernetes-a možemo koristiti yaml fajlove ili kubectl run komandu koja pokreće deployment. Radi lakše konfiguracije kontejner pokrećemo kubectl run komandom.
#!/bin/bash # Script for submitting server jobs on the remote CE # Creates a temporary jdl file and submits it CE=$1 ROUTINGINFO=$2 JOBID=$3 LOGFILE=$4 #echo "" #echo "" echo "SUBMITTED: $CE $ROUTINGINFO $JOBID $LOGFILE" #EE="$(docker run -t -d worker ./startBinderJobLocal.sh $1 $2 $3 $4)" kubectl run --image=imidocker/worker $3 --replicas=1 --command=true -- /bin/sh ./startBinderJobLocal.sh $1 $2 $3 $4 #sh startBinderJobLocal.sh $1 $2 $3 $4 if [ ! $? = 0 ]; then echo "Error submitting remote job." exit 1 else echo "Job successfully submitted!" fi
Ovom komandom se kreira pod sa slikom imidocker/worker, postavlja se broj replika na 1 i pokreće skripta startBinderJobLocal.sh sa argumentima. Sada možemo pokrenuti binder pomoću skripte run_binder.sh
$ ./run_binder.sh > log.out 2>log.err &
Nakon sto je binder pokrenut on ce sam kreirati potrebne worker-e. Worker-e mozemo izlistati na sledeci nacin
$ kubectl get pods NAME READY STATUS RESTARTS AGE 1505427197695-27-466609622-dmbht 1/1 Running 1 16h 1505430840484-28-44829381-jsfrw 1/1 Running 1 15h 1505430843496-29-3130999979-4khm3 1/1 Running 1 15h 1505430846504-30-1458754922-sk2rf 1/1 Running 1 15h $kubectl get deploy NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE 1505427197695-27 1 1 1 1 16h 1505430840484-28 1 1 1 1 15h 1505430843496-29 1 1 1 1 15h 1505430846504-30 1 1 1 1 15h
Kada se status pod-ova postane Running znači da su se kontejneri uspešno pokrenuli i da binder moze da ih koristi. Binder mozemo testirati pomoću sledeće komande
$ java -cp bin:lib/log4j-1.2.15.jar visnja.ClientExter nalXML ulaz1.xml 2017-09-15 17:19:34,807 INFO [visnja.ClientExternalXML] (TestClient) Starting External client... 2017-09-15 17:19:34,823 INFO [yu.ac.bg.rcub.binder.handler.client.ClientConnectorImpl] (TestClient) Initiating connection to the binder in order to execute the query. 2017-09-15 17:19:34,871 INFO [yu.ac.bg.rcub.binder.handler.client.ClientConnectorImpl] (TestClient) Connection established. 2017-09-15 17:19:34,962 DEBUG [yu.ac.bg.rcub.binder.handler.client.ClientConnectorImpl] (TestClient) Query finished, disconnecting from the binder. CE list match report by the binder, total of 1 CEs matched. CE: Site-A, full name/path: cluster1.csk.kg.ac.rs:8443/cream-pbs-aegis, ready jobs: 1, CE: Site-A is filtered: [EXTERNAL, TEST, EXTERNALXML, UPLOAD, external-example, EXTERNALXMLSTDIO], currently supported apps: [EXTERNAL, TEST, EXTERNALXML, UPLOAD, EXTERNALXMLSTDIO]. 2017-09-15 17:19:34,976 INFO [yu.ac.bg.rcub.binder.handler.client.ClientConnectorImpl] (TestClient) Initiating connection to the binder. 2017-09-15 17:19:34,989 INFO [yu.ac.bg.rcub.binder.handler.client.ClientConnectorImpl] (TestClient) Connection established. 2017-09-15 17:19:35,861 DEBUG [yu.ac.bg.rcub.binder.handler.client.ClientConnectorImpl] (TestClient) Routing info received from worker: Client => 192.168.0.32 : 42148 Worker => 192.168.0.32 : 39946 Received from starting script: Started_at_1505488750792 2017-09-15 17:19:35,874 DEBUG [yu.ac.bg.rcub.binder.handler.client.ClientConnectorImpl] (TestClient) Client exchanged headers with the binder. 2017-09-15 17:19:35,892 DEBUG [yu.ac.bg.rcub.binder.handler.client.ClientConnectorImpl] (TestClient) Communication via binder chosen. ;OK;2017-09-15 17:19:41,358 INFO [visnja.ClientExternalXML] (TestClient) End of External client, disconnecting from binder... 2017-09-15 17:19:41,360 INFO [yu.ac.bg.rcub.binder.handler.client.ClientConnectorImpl] (TestClient) Disconnected from binder. 2 7.626757 6.124656 2 8.626757 6.124656
Zaključak
U ovom članku predstavljen je način instaliranja i konfigurisanja Kubernetes klastera i njegova primena na problemu WorkBinder-a. Upotrebom Kubernetes-a i Docker-a olakšali smo proces raspoređivanja, kreiranja i upravljanja kontejnerima, smanjili vreme potrebno za pokretanje worker-a i poboljšali performanse sistema i aplikacije u odnosu na početni pristup.
Korisni linkovi
- https://kubernetes.io/docs/home/
- https://medium.com/onfido-tech/container-orchestration-with-kubernetes-an-overview-da1d39ff2f91
- https://docs.docker.com
- https://imi.pmf.kg.ac.rs/imi-blog/?p=453
- https://www.pluralsight.com/courses/getting-started-kubernetes
- https://www.digitalocean.com/community/tutorials/an-introduction-to-kubernetes