Zadanie 5

Kubernetes dla każdego – sztuka konteneryzacji

Zadanie domowe z tygodnia 5

Przygotowanie

  1. kubectl create namespace homework5 utworzenie namespace
    • kubectl get namespaces
  2. kubectl config set-context --current --namespace=homework5 ustawienie domyślnego namespace
    • kubectl config view

Cz. 1

  1. kubectl run my-nginx-prod --restart=Never --image=nginx:1.7.9 pod z kontenerem nginx
    • kubectl get pods sprawdzenie czy pod został utworzony
    • kubectl describe pods my-nginx-prod analiza utworzonego poda
  2. kubectl get pod my-nginx-prod --export -o yaml > my_pod_definition.yaml export definicji poda
    • zamiana wersji w definicji z image: nginx:1.7.9 na image: nginx:1.9.1
    • dodanie do metadata.label: env: prod
  3. kubectl apply -f my_pod_definition.yaml aktualizacja poda
    • kubectl describe pods my-nginx-prod
  4. kubectl port-forward my-nginx-prod 8080:80 otwarcie portu (działa do czasu wyjścia z polecenia)
    • http://localhost:8080
  5. my_pod_definition.yaml zamiana:
    • label z env: prod na env: test
    • name: my-nginx-prod na name: my-nginx-test (w metadata)
  6. kubectl apply -f my_pod_definition.yaml stworzenie nowego poda
    • kubectl get pods
  7. kubectl logs my-nginx-prod analiza logów nginx (logi utworzone po otwarciu w przeglądarce)
  8. kubectl exec -it my-nginx-prod /bin/bash zalogowanie się do kontenera i wykonanie poleceń np. env, ls
  9. kubectl get pods -l=env=prod wyświetlenie podów z selectorem na label

Cz. 2

  1. kubectl apply -f my_deployment_definition.yaml
    • kubectl get pods -l=env=prod
    • kubectl get deployment
  2. kubectl delete pods -l=env=prod
    • kubectl get pods -l=env=prod
  3. kubectl get deployments nginx-deployment -o jsonpath='{.spec.selector.matchLabels}' deployment zarządza replicaSetem, sprawdzenie label jakiego używa
    • kubectl get rs
    • kubectl get replicasets --selector=env=prod znalezienie obiektu ReplicaSet, którym zarządza deployment (zarządza ReplicaSetem z labelem prod) Deployment » ReplicaSet
    • kubectl get rs --selector=env=prod
  4. kubectl scale deployments nginx-deployment --replicas=4 skalowanie
    • kubectl get rs --selector=env=prod
    • kubectl get pods -l=env=prod
  5. kubectl scale replicasets nginx-deployment-7984cd655c --replicas=1
    • nginx-deployment-7984cd655c nazwa zwrócona przez polecenie kubectl get rs –selector=env=prod

Cz. 3

  1. kubectl expose deployment nginx-deployment stworzenie Service
    • kubectl get svc
  2. kubectl describe svc nginx-deployment sprawdzenie definicji Service
  3. kubectl get services kube-dns --namespace=kube-system sprawdzenie czy na klastrze działa usługa DNS
  4. kubectl run curl --image=radial/busyboxplus:curl -i --tty --rm utworzenie poda>kontenera, z którego można będzie się połączyć z serwisem - uruchomienie trybu interaktywnego
    • nslookup nginx-deployment
    • odszukanie Name: nginx-deployment
       Server:    10.96.0.10
       Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
       Name:      nginx-deployment
       Address 1: 10.107.5.118 nginx-deployment.homework5.svc.cluster.local
      
    • curl nginx-deployment.homework5.svc.cluster.local otrzymanie kodu HTML strony startowej nginx

Cz. 4

  1. Otwarcie 2 terminali
  2. 1> kubectl get pods -w -l app=nginx obserwowanie zmian w podach
  3. kubectl apply -f statefulset.yaml
    • kubectl exec web-0 -- sh -c 'hostname' odczytanie nazwy poda bezpośrednio z poziomu poda
    • kubectl exec web-1 -- sh -c 'hostname'
  4. kubectl run -i --tty --image busybox:1.28 dns-test --restart=Never --rm
    • nslookup web-0.nginx sprawdzenie nazwy DNS dla dwóch utworzonych kontenerów
    • nslookup web-1.nginx
       Server:    10.96.0.10
       Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
       Name:      web-0.nginx
       Address 1: 10.1.0.204 web-0.nginx.homework5.svc.cluster.local
      
       Server:    10.96.0.10
       Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
       Name:      web-1.nginx
       Address 1: 10.1.0.205 web-1.nginx.homework5.svc.cluster.local
      
  5. kubectl delete pod -l app=nginx usunięcie podów (zostaną odtworzone)
  6. kubectl run -i --tty --image busybox:1.28 dns-test --restart=Never --rm
    • nslookup web-0.nginx sprawdzenie nazwy DNS dla dwóch utworzonych kontenerów
    • nslookup web-1.nginx
       Server:    10.96.0.10
       Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
       Name:      web-0.nginx
       Address 1: 10.1.0.207 web-0.nginx.homework5.svc.cluster.local
      
       Server:    10.96.0.10
       Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
       Name:      web-1.nginx
       Address 1: 10.1.0.208 web-1.nginx.homework5.svc.cluster.local
      

Usunięcie zasobów

  1. kubectl delete namespace homework5 usunięcie wszystkich zasobów stworzonych w ramach pracy domowej

Pliki