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 </etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm

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;<?xml version="1.0" encoding="utf-8"?>
<ArrayOfSolutionForXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SolutionForXML>
  <NumOfPar>2</NumOfPar>
  <Parameters>
    <double>7.626757</double>
    <double>6.124656</double>
  </Parameters>
</SolutionForXML>
<SolutionForXML>
  <NumOfPar>2</NumOfPar>
  <Parameters>
    <double>8.626757</double>
    <double>6.124656</double>
  </Parameters>
</SolutionForXML>
</ArrayOfSolutionForXML>
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