IT Cloud. Eugeny Shtoltc

Чтение книги онлайн.

Читать онлайн книгу IT Cloud - Eugeny Shtoltc страница 22

IT Cloud - Eugeny Shtoltc

Скачать книгу

create a cluster:

      esschtolts @ cloudshell: ~ (essch) $ kubectl run Nginx –image = Nginx –replicas = 3

      deployment.apps "Nginx" created

      Let's check its composition:

      esschtolts @ cloudshell: ~ (essch) $ kubectl get deployments –selector = run = Nginx

      NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE

      Nginx 3 3 3 3 14s

      esschtolts @ cloudshell: ~ (essch) $ kubectl get pods –selector = run = Nginx

      NAME READY STATUS RESTARTS AGE

      Nginx-65899c769f-9whdx 1/1 Running 0 43s

      Nginx-65899c769f-szwtd 1/1 Running 0 43s

      Nginx-65899c769f-zs6g5 1/1 Running 0 43s

      Let's make sure that all three replicas of the cluster are distributed evenly across all three nodes:

      esschtolts @ cloudshell: ~ (essch) $ kubectl describe pod Nginx-65899c769f-9whdx | grep Node:

      Node: gke-mycluster-default-pool-43710ef9-g76k / 10.166.0.5

      esschtolts @ cloudshell: ~ (essch) $ kubectl describe pod Nginx-65899c769f-szwtd | grep Node:

      Node: gke-mycluster-default-pool-43710ef9-39ck / 10.166.0.4

      esschtolts @ cloudshell: ~ (essch) $ kubectl describe pod Nginx-65899c769f-zs6g5 | grep Node:

      Node: gke-mycluster-default-pool-43710ef9-g76k / 10.166.0.5

      Now let's install the load balancer:

      esschtolts @ cloudshell: ~ (essch) $ kubectl expose Deployment Nginx –type = "LoadBalancer" –port = 80

      service "Nginx" exposed

      Let's check that it was created:

      esschtolts @ cloudshell: ~ (essch) $ kubectl expose Deployment Nginx –type = "LoadBalancer" –port = 80

      service "Nginx" exposed

      esschtolts @ cloudshell: ~ (essch) $ kubectl get svc –selector = run = Nginx

      NAME TYPE CLUSTER-IP EXTERNAL-IP PORT (S) AGE

      Nginx LoadBalancer 10.27.245.187 pending> 80: 31621 / TCP 11s

      esschtolts @ cloudshell: ~ (essch) $ sleep 60;

      esschtolts @ cloudshell: ~ (essch) $ kubectl get svc –selector = run = Nginx

      NAME TYPE CLUSTER-IP EXTERNAL-IP PORT (S) AGE

      Nginx LoadBalancer 10.27.245.187 35.228.212.163 80: 31621 / TCP 1m

      Let's check its work:

      esschtolts @ cloudshell: ~ (essch) $ curl 35.228.212.163:80 2> \ dev \ null | grep h1

      <h1> Welcome to Nginx! </ h1>

      In order not to copy the full names every time, save them in variables (more about the JSONpath format in the Go documentation: https://golang.org/pkg/text/template/#pkg-overview):

      esschtolts @ cloudshell: ~ (essch) $ pod1 = $ (kubectl get pods -o jsonpath = {. items [0] .metadata.name});

      esschtolts @ cloudshell: ~ (essch) $ pod2 = $ (kubectl get pods -o jsonpath = {. items [1] .metadata.name});

      esschtolts @ cloudshell: ~ (essch) $ pod3 = $ (kubectl get pods -o jsonpath = {. items [2] .metadata.name});

      esschtolts @ cloudshell: ~ (essch) $ echo $ pod1 $ pod2 $ pod3

      Nginx-65899c769f-9whdx Nginx-65899c769f-szwtd Nginx-65899c769f-zs6g5

      Let's change the pages in each POD by copying the unique pages to each replica, and check the balancing by checking the distribution of requests across the POD:

      esschtolts @ cloudshell: ~ (essch) $ echo 1> test.html;

      esschtolts @ cloudshell: ~ (essch) $ kubectl cp test.html $ {pod1}: / usr / share / Nginx / html / index.html

      esschtolts @ cloudshell: ~ (essch) $ echo 2> test.html;

      esschtolts @ cloudshell: ~ (essch) $ kubectl cp test.html $ {pod2}: / usr / share / Nginx / html / index.html

      esschtolts @ cloudshell: ~ (essch) $ echo 3> test.html;

      esschtolts @ cloudshell: ~ (essch) $ kubectl cp test.html $ {pod3}: / usr / share / Nginx / html / index.html

      esschtolts @ cloudshell: ~ (essch) $ curl 35.228.212.163:80 && curl 35.228.212.163:80 && curl 35.228.212.163:80

      3

      2

      one

      esschtolts @ cloudshell: ~ (essch) $ curl 35.228.212.163:80 && curl 35.228.212.163:80 && curl 35.228.212.163:80

      3

      one

      one

      Let's check the failover of the cluster by deleting one POD:

      esschtolts @ cloudshell: ~ (essch) $ kubectl delete pod $ {pod1} && kubectl get pods && sleep 10 && kubectl get pods

      pod "Nginx-65899c769f-9whdx" deleted

      NAME READY STATUS RESTARTS AGE

      Nginx-65899c769f-42rd5 0/1 ContainerCreating 0 1s

      Nginx-65899c769f-9whdx 0/1 Terminating 0 54m

      Nginx-65899c769f-szwtd 1/1 Running 0 54m

      Nginx-65899c769f-zs6g5 1/1 Running 0 54m

      NAME READY STATUS RESTARTS AGE

      Nginx-65899c769f-42rd5 1/1 Running 0 12s

      Nginx-65899c769f-szwtd 1/1 Running 0 55m

      Nginx-65899c769f-zs6g5 1/1 Running 0 55m

      As we can see, immediately after the POD became unavailable (the process of deleting it began) its replacement began to be created. Soon, the cluster will fully restore its structure. After we have finished our experiments, remove the virtual machines with the cluster:

      esschtolts @ cloudshell: ~ (essch) $ gcloud container clusters delete mycluster –zone europe-north1-a;

      The following clusters will be deleted.

      – [mycluster] in [europe-north1-a]

      Do you want to continue (Y / n)? Y

      Deleting cluster mycluster … done.

      Deleted [https://container.googleapis.com/v1/projects/essch/zones/europe-north1-a/clusters/mycluster].

      esschtolts @ cloudshell: ~ (essch)

Скачать книгу