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.

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 - cat 

Nakon instalacije svih komponenti kloniramo virtualnu masinu i na taj način napravimo worker node-ove.

$ VMNode1="Ubuntu_64_node1" $ VBoxManage clonevm $VMMaster --name $VMNode1 --register 

Nakon kloniranja mozemo promeniti port za remote desktop

$ VBoxManage modifyvm $VMNode1 --vrde on --vrdeport 3381 

U 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-allrouters 

Postavljanje 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.4 

Nakon podešavanje mreže mozemo restartovati networking.service

$ sudo systemctl restart networking.service 

Testiramo pristup internetu

$ ping google.rs 

Ukoliko 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 node1 

Kao 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-allrouters 

Ostalo 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.4 

Restartujemo networking.service i testiramo mrežu

$ sudo systemctl restart networking.service $ ping master 

Ukoliko 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/16 

Nakon 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:6443

Da 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/config 

Da 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.yaml 

Nakon ove instalacije možemo izlistati node-ove

$ kubectl get nodes NAME      STATUS    AGE       VERSION master    Ready     1d        v1.7.5 

Zato š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          1d 

Ako 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:6443

Sada 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.5 

Work 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;   2  7.626757 6.124656    2  8.626757 6.124656    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. 

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