|
| 1 | +--- |
| 2 | +title: Jak użyć kubectl do tworzenia Deploymentu |
| 3 | +weight: 10 |
| 4 | +--- |
| 5 | + |
| 6 | +## {{% heading "objectives" %}} |
| 7 | + |
| 8 | +* Poznaj sposób wdrażania aplikacji. |
| 9 | +* Wdróż swoją pierwszą aplikację na Kubernetesie za pomocą narzędzia kubectl. |
| 10 | + |
| 11 | +## Deploymenty w Kubernetesie {#kubernetes-deployments} |
| 12 | + |
| 13 | +{{% alert %}} |
| 14 | +_Deployment odpowiada za stworzenie i aktualizacje instancji Twojej aplikacji._ |
| 15 | +{{% /alert %}} |
| 16 | + |
| 17 | +{{< note >}} |
| 18 | +Ten samouczek wykorzystuje kontener wymagający architektury AMD64. Jeśli używasz |
| 19 | +minikube na komputerze z inną architekturą CPU, możesz spróbować użyć minikube z |
| 20 | +sterownikiem, który potrafi emulować AMD64. Na przykład potrafi to zrobić sterownik Docker Desktop. |
| 21 | +{{< /note >}} |
| 22 | + |
| 23 | +Mając [działający klaster Kubernetesa](/docs/tutorials/kubernetes-basics/create-cluster/cluster-intro/), |
| 24 | +można na nim zacząć |
| 25 | +instalować aplikacje. W tym celu należy utworzyć **Deployment**. |
| 26 | +Deployment informuje Kubernetesa, jak tworzyć i aktualizować instancje |
| 27 | +Twojej aplikacji. Po stworzeniu Deploymentu, warstwa sterowania |
| 28 | +Kubernetesa zleca uruchomienie tej aplikacji na indywidualnych węzłach klastra. |
| 29 | + |
| 30 | +Po utworzeniu instancji aplikacji, kontroler Deploymentu Kubernetesa na |
| 31 | +bieżąco monitoruje te instancje. Jeśli węzeł, na którym działała jedna z |
| 32 | +instancji ulegnie awarii lub zostanie usunięty, kontroler Deploymentu zamieni tę |
| 33 | +instancję z instancją na innym węźle klastra. |
| 34 | +**W ten sposób działa samonaprawiający się mechanizm, który reaguje na awarie lub wyłączenia maszyn w klastrze.** |
| 35 | + |
| 36 | +W czasach przed wprowadzeniem takiej automatyzacji, skrypty instalacyjne używane |
| 37 | +były zazwyczaj do uruchomienia aplikacji, ale nie radziły sobie z awariami maszyn. |
| 38 | +Poprzez połączenie procesu instalacji i kontroli nad działaniem aplikacji na węzłach, Deployment |
| 39 | +Kubernetesa oferuje fundamentalnie różne podejście do zarządzania aplikacjami. |
| 40 | + |
| 41 | +## Instalacja pierwszej aplikacji w Kubernetesie {#deploying-your-first-app-on-kubernetes} |
| 42 | + |
| 43 | +{{% alert %}} |
| 44 | +_Aby aplikacja mogła zostać uruchomiona w Kubernetesie, musi być opakowana w jeden z obsługiwanych formatów kontenerów._ |
| 45 | + |
| 46 | +{{% /alert %}} |
| 47 | + |
| 48 | +{{< figure src="/docs/tutorials/kubernetes-basics/public/images/module_02_first_app.svg" class="diagram-medium" >}} |
| 49 | + |
| 50 | +Do tworzenia i zarządzaniem Deploymentem służy polecenie linii komend, |
| 51 | +[kubectl](/docs/reference/kubectl/). Kubectl używa API Kubernetesa do komunikacji z |
| 52 | +klasterem. W tym module nauczysz się najczęściej używanych poleceń kubectl |
| 53 | +niezbędnych do stworzenia Deploymentu, który uruchomi Twoje aplikacje na klastrze Kubernetesa. |
| 54 | + |
| 55 | +Tworząc Deployment musisz określić obraz kontenera oraz liczbę |
| 56 | +replik, które mają być uruchomione. Te ustawienia możesz zmieniać |
| 57 | +później, aktualizując Deployment. [Moduł 5](/docs/tutorials/kubernetes-basics/scale/scale-intro/) |
| 58 | +oraz [Moduł 6](/docs/tutorials/kubernetes-basics/update/update-intro/) |
| 59 | +omawiają skalowanie i aktualizowanie Deploymentów. |
| 60 | + |
| 61 | +Na potrzeby pierwszej instalacji użyjesz aplikacji hello-node zapakowaną w kontener Docker-a, |
| 62 | +która korzysta z NGINXa i powtarza wszystkie wysłane do niej zapytania. (Jeśli jeszcze nie |
| 63 | +próbowałeś stworzyć aplikacji hello-node i uruchomić za pomocą kontenerów, możesz spróbować |
| 64 | +teraz, kierując się instrukcjami samouczka [samouczku Hello Minikube](/docs/tutorials/hello-minikube/). |
| 65 | + |
| 66 | +Musisz mieć zainstalowane narzędzie kubectl. Jeśli potrzebujesz |
| 67 | +go zainstalować, odwiedź [install tools](/docs/tasks/tools/#kubectl). |
| 68 | + |
| 69 | +Skoro wiesz już, czym są Deploymenty, przeprowadźmy wdrożenie pierwszej aplikacji! |
| 70 | + |
| 71 | +### Podstawy kubectl {#kubectl-basics} |
| 72 | + |
| 73 | +Typowy format polecenia kubectl to: `kubectl akcja zasób`. |
| 74 | + |
| 75 | +Wykonuje określoną _akcję_ (jak `create`, `describe` lub `delete`) na określonym |
| 76 | +_zasobie_ (jak `node` lub `deployment`). Możesz użyć `--help` po poleceniu, aby uzyskać dodatkowe |
| 77 | +informacje o możliwych parametrach (na przykład: `kubectl get nodes --help`). |
| 78 | + |
| 79 | +Sprawdź, czy kubectl jest skonfigurowany do komunikacji z twoim klastrem, uruchamiając polecenie `kubectl version`. |
| 80 | + |
| 81 | +Sprawdź, czy kubectl jest zainstalowane oraz czy możesz zobaczyć zarówno wersję klienta, jak i serwera. |
| 82 | + |
| 83 | +Aby wyświetlić węzły w klastrze, uruchom polecenie `kubectl get nodes`. |
| 84 | + |
| 85 | +Zobaczysz dostępne węzły. Kubernetes wybierze, gdzie |
| 86 | +wdrożyć naszą aplikację, w oparciu o dostępne zasoby węzła. |
| 87 | + |
| 88 | +### Wdrażanie aplikacji {#deploy-an-app} |
| 89 | + |
| 90 | +Uruchommy naszą pierwszą aplikację na Kubernetesie, używając polecenia |
| 91 | +`kubectl create deployment`. Musimy podać nazwę wdrożenia oraz lokalizację obrazu |
| 92 | +aplikacji (w tym pełny adres URL repozytorium dla obrazów hostowanych poza Docker Hub). |
| 93 | + |
| 94 | +```shell |
| 95 | +kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1 |
| 96 | +``` |
| 97 | + |
| 98 | +Świetnie! Właśnie wdrożyłeś swoją pierwszą aplikację, tworząc Deployment. Kubernetes wykonał dla Ciebie kilka rzeczy: |
| 99 | + |
| 100 | +* wyszukał odpowiedni węzeł, na którym można uruchomić instancję aplikacji (mamy dostępny tylko 1 węzeł) |
| 101 | +- zaplanował uruchomienie aplikacji na tym węźle |
| 102 | +* skonfigurował klaster tak, aby w razie potrzeby ponownie uruchomić instancję na nowym węźle |
| 103 | + |
| 104 | +Aby wyświetlić listę swoich wdrożeń, użyj polecenia `kubectl get deployments`: |
| 105 | + |
| 106 | +```shell |
| 107 | +kubectl get deployments |
| 108 | +``` |
| 109 | + |
| 110 | +Widzimy, że jest jeden Deployment uruchamiający pojedynczą instancję Twojej |
| 111 | +aplikacji. Instancja działa wewnątrz kontenera na Twoim węźle. |
| 112 | + |
| 113 | +### Zobacz aplikację {#view-the-app} |
| 114 | + |
| 115 | +[Pody](/docs/concepts/workloads/pods/) działające wewnątrz Kubernetesa |
| 116 | +działają na prywatnej, izolowanej sieci. Domyślnie są one widoczne z innych |
| 117 | +podów i usług w ramach tego samego klastra Kubernetesa, ale nie poza tą |
| 118 | +siecią. Kiedy używamy `kubectl`, komunikujemy się z aplikacją za pośrednictwem API. |
| 119 | + |
| 120 | +Później, w [Module 4](/docs/tutorials/kubernetes-basics/expose/), omówimy |
| 121 | +inne opcje dotyczące sposobów udostępniania Twojej aplikacji poza klastrem |
| 122 | +Kubernetesa. Ponieważ jest to tylko podstawowy samouczek, to nie wyjaśniamy |
| 123 | +tutaj szczegółowo, czym są `Pody`, bo będzie to omówione w późniejszych tematach. |
| 124 | + |
| 125 | +Polecenie `kubectl proxy` może utworzyć proxy, które przekaże komunikację do |
| 126 | +ogólnoklastrowej, prywatnej sieci. Proxy można zakończyć poprzez |
| 127 | +naciśnięcie control-C - podczas działania nie wyświetla ono żadnych komunikatów. |
| 128 | + |
| 129 | +**Musisz otworzyć drugie okno terminala, aby uruchomić proxy.** |
| 130 | + |
| 131 | +```shell |
| 132 | +kubectl proxy |
| 133 | +``` |
| 134 | +Mamy teraz połączenie pomiędzy naszym hostem (terminalem) a klastrem |
| 135 | +Kubernetesa. Proxy umożliwia bezpośredni dostęp do API z tych terminali. |
| 136 | + |
| 137 | +Możesz zobaczyć wszystkie te interfejsy API hostowane przez punkt końcowy serwera proxy. |
| 138 | +Na przykład możemy bezpośrednio zapytać o wersję za pomocą polecenia `curl`: |
| 139 | + |
| 140 | +```shell |
| 141 | +curl http://localhost:8001/version |
| 142 | +``` |
| 143 | + |
| 144 | +{{< note >}} |
| 145 | +Jeśli port 8001 jest niedostępny, upewnij się, że |
| 146 | +`kubectl proxy`, który uruchomiłeś wyżej, działa w drugim terminalu. |
| 147 | +{{< /note >}} |
| 148 | + |
| 149 | +Serwer API automatycznie utworzy punkt końcowy dla każdego poda, |
| 150 | +bazując na nazwie poda, który jest również dostępny przez serwer proxy. |
| 151 | + |
| 152 | +Najpierw musimy uzyskać nazwę Poda i zapisać ją w zmiennej środowiskowej `POD_NAME`. |
| 153 | + |
| 154 | +```shell |
| 155 | +export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}') |
| 156 | +echo Name of the Pod: $POD_NAME |
| 157 | +``` |
| 158 | + |
| 159 | +Możesz uzyskać dostęp do Poda za pośrednictwem API z proxy, uruchamiając: |
| 160 | + |
| 161 | +```shell |
| 162 | +curl http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME:8080/proxy/ |
| 163 | +``` |
| 164 | + |
| 165 | +Aby nowy Deployment był dostępny bez użycia proxy, wymagane jest utworzenie obiektu usługi |
| 166 | +(ang. Service), co zostanie wyjaśnione w [Module 4](/docs/tutorials/kubernetes-basics/expose/). |
| 167 | + |
| 168 | +## {{% heading "whatsnext" %}} |
| 169 | + |
| 170 | +* Samouczek [Pody i Węzły](/docs/tutorials/kubernetes-basics/explore/explore-intro/). |
| 171 | +* Dowiedz się więcej o [Deploymentach](/docs/concepts/workloads/controllers/deployment/). |
0 commit comments