|
| 1 | +--- |
| 2 | +author: Wale Soyinka |
| 3 | +contributors: Steven Spencer, Ganna Zhyrnova |
| 4 | +tags: |
| 5 | + - kubernetes |
| 6 | + - k8s |
| 7 | + - лабораторна вправа |
| 8 | + - runc |
| 9 | + - containerd |
| 10 | + - etcd |
| 11 | + - kubectl |
| 12 | +--- |
| 13 | + |
| 14 | +# Лабораторна робота 12: Smoke Test |
| 15 | + |
| 16 | +> Це вітка оригінального ["Kubernetes the hard way"](https://github.com/kelseyhightower/kubernetes-the-hard-way), яку спочатку створив Келсі Хайтауер (GitHub: kelseyhightower). На відміну від оригіналу, який базується на дистрибутивах, подібних до Debian, для архітектури ARM64, ця гілка націлена на дистрибутиви Enterprise Linux, такі як Rocky Linux, що працюють на архітектурі x86_64. |
| 17 | +
|
| 18 | +У цій лабораторній роботі ви виконуватимете завдання, щоб переконатися, що ваш кластер Kubernetes функціонує правильно. |
| 19 | + |
| 20 | +## Шифрування даних |
| 21 | + |
| 22 | +У цьому розділі ви перевірите здатність [шифрувати секретні дані в стані спокою](https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/#verifying-that-data-is-encrypted). |
| 23 | + |
| 24 | +Створіть загальний секрет: |
| 25 | + |
| 26 | +```bash |
| 27 | +kubectl create secret generic kubernetes-the-hard-way \ |
| 28 | + --from-literal="mykey=mydata" |
| 29 | +``` |
| 30 | + |
| 31 | +Надрукуйте шістнадцятковий дамп секрету `kubernetes-the-hard-way`, який зберігається в `etcd`: |
| 32 | + |
| 33 | +```bash |
| 34 | +ssh root@server \ |
| 35 | + 'etcdctl get /registry/secrets/default/kubernetes-the-hard-way | hexdump -C' |
| 36 | +``` |
| 37 | + |
| 38 | +```text |
| 39 | +00000000 2f 72 65 67 69 73 74 72 79 2f 73 65 63 72 65 74 |/registry/secret| |
| 40 | +00000010 73 2f 64 65 66 61 75 6c 74 2f 6b 75 62 65 72 6e |s/default/kubern| |
| 41 | +00000020 65 74 65 73 2d 74 68 65 2d 68 61 72 64 2d 77 61 |etes-the-hard-wa| |
| 42 | +00000030 79 0a 6b 38 73 3a 65 6e 63 3a 61 65 73 63 62 63 |y.k8s:enc:aescbc| |
| 43 | +00000040 3a 76 31 3a 6b 65 79 31 3a 67 64 d4 64 d9 6c eb |:v1:key1:gd.d.l.| |
| 44 | +00000050 f3 a9 80 8c 82 a0 f3 50 e6 eb 02 cb a6 65 8b 51 |.......P.....e.Q| |
| 45 | +00000060 0a 03 2f ef 4a a8 d9 7d 62 f5 68 27 74 1c 6d 88 |../.J..}b.h't.m.| |
| 46 | +00000070 ee 89 39 8d c9 e4 c6 2c 9c 3f 55 3b eb 79 2c 55 |..9....,.?U;.y,U| |
| 47 | +00000080 d9 47 ec 77 84 0b 6e b1 ab 58 41 22 1e c3 7c 00 |.G.w..n..XA"..|.| |
| 48 | +00000090 92 ad ad d0 97 55 f4 d5 b6 1e 6d 57 fb 2f 7c 36 |.....U....mW./|6| |
| 49 | +000000a0 f5 6a 45 5e a7 a4 70 52 1d 9d 00 61 14 cd f3 92 |.jE^..pR...a....| |
| 50 | +000000b0 9a 05 57 dd cf 41 1c 74 0c a7 2c ac 64 f5 79 51 |..W..A.t..,.d.yQ| |
| 51 | +000000c0 e6 5c 16 e1 a9 5e da 00 91 d0 f5 77 e2 32 8f a2 |.\...^.....w.2..| |
| 52 | +000000d0 9a c3 26 50 f2 a0 f8 f9 95 09 20 29 f1 7c 7a 7d |..&P...... ).|z}| |
| 53 | +000000e0 4f 82 0b 78 43 28 91 a1 56 ee 66 90 fb ac 26 8c |O..xC(..V.f...&.| |
| 54 | +000000f0 a3 b4 b2 ed 2d 0a d3 54 d1 10 89 a4 c3 dd b6 2d |....-..T.......-| |
| 55 | +00000100 b9 d7 98 bb db c4 0d f2 96 5a 57 8b 01 2e 97 43 |.........ZW....C| |
| 56 | +00000110 ea 9c 8b cf cc 9b 80 cd 02 c8 c5 a4 e7 bf 62 73 |..............bs| |
| 57 | +00000120 e6 6b e8 c2 cf 34 50 2b e0 3c 66 a2 29 4f 08 0c |.k...4P+.<f.)O..| |
| 58 | +00000130 65 99 e4 9f 40 4f d9 94 eb 40 bd 3a 01 77 95 2b |e...@O...@.:.w.+| |
| 59 | +00000140 c9 20 ea a8 73 d9 19 2d d8 00 9b da 3e 55 3e 82 |. ..s..-....>U>.| |
| 60 | +00000150 80 3a 39 d5 08 f9 6c de 6b 0a |.:9...l.k.| |
| 61 | +0000015a |
| 62 | +``` |
| 63 | + |
| 64 | +Вам потрібно додати до ключа `etcd` префікс `k8s:enc:aescbc:v1:key1`, що означає використання постачальника `aescbc` для шифрування даних за допомогою ключа шифрування `key1`. |
| 65 | + |
| 66 | +## Розгортання |
| 67 | + |
| 68 | +У цьому розділі ви перевірите здатність створювати [розгортання] та керувати ними (https://kubernetes.io/docs/concepts/workloads/controllers/deployment/). |
| 69 | + |
| 70 | +Створіть розгортання веб-сервера [nginx](https://nginx.org/en/): |
| 71 | + |
| 72 | +```bash |
| 73 | +kubectl create deployment nginx \ |
| 74 | + --image=nginx:latest |
| 75 | +``` |
| 76 | + |
| 77 | +Перелічіть модуль, створений розгортанням `nginx`: |
| 78 | + |
| 79 | +```bash |
| 80 | +kubectl get pods -l app=nginx |
| 81 | +``` |
| 82 | + |
| 83 | +```bash |
| 84 | +NAME READY STATUS RESTARTS AGE |
| 85 | +nginx-54c98b4f84-dfwl9 1/1 Running 0 71s |
| 86 | +``` |
| 87 | + |
| 88 | +### Переадресація портів |
| 89 | + |
| 90 | +У цьому розділі ви перевірите можливість віддаленого доступу до програм за допомогою [переадресації портів](https://kubernetes.io/docs/tasks/access-application-cluster/port-forward-access-application-cluster/). |
| 91 | + |
| 92 | +Отримайте повну назву модуля `nginx`: |
| 93 | + |
| 94 | +```bash |
| 95 | +POD_NAME=$(kubectl get pods -l app=nginx \ |
| 96 | + -o jsonpath="{.items[0].metadata.name}") |
| 97 | +``` |
| 98 | + |
| 99 | +Перенаправте порт `8080` на вашій локальній машині на порт `80` модуля `nginx`: |
| 100 | + |
| 101 | +```bash |
| 102 | +kubectl port-forward $POD_NAME 8080:80 |
| 103 | +``` |
| 104 | + |
| 105 | +```text |
| 106 | +Forwarding from 127.0.0.1:8080 -> 80 |
| 107 | +Forwarding from [::1]:8080 -> 80 |
| 108 | +``` |
| 109 | + |
| 110 | +У новому терміналі зробіть HTTP-запит із адресою пересилання: |
| 111 | + |
| 112 | +```bash |
| 113 | +curl --head http://127.0.0.1:8080 |
| 114 | +``` |
| 115 | + |
| 116 | +```text |
| 117 | +HTTP/1.1 200 OK |
| 118 | +Server: nginx/1.27.4 |
| 119 | +Date: Tue, 04 Mar 2025 01:30:20 GMT |
| 120 | +Content-Type: text/html |
| 121 | +Content-Length: 615 |
| 122 | +Last-Modified: Wed, 05 Feb 2025 11:06:32 GMT |
| 123 | +Connection: keep-alive |
| 124 | +ETag: "67a34638-267" |
| 125 | +Accept-Ranges: bytes |
| 126 | +``` |
| 127 | + |
| 128 | +Поверніться до попереднього терміналу та зупиніть переадресацію портів на модуль `nginx`, ввівши ++ctrl+c++: |
| 129 | + |
| 130 | +```text |
| 131 | +Forwarding from 127.0.0.1:8080 -> 80 |
| 132 | +Forwarding from [::1]:8080 -> 80 |
| 133 | +Handling connection for 8080 |
| 134 | +^C |
| 135 | +``` |
| 136 | + |
| 137 | +### Логи |
| 138 | + |
| 139 | +У цьому розділі ви перевірите здатність [отримувати журнали контейнерів](https://kubernetes.io/docs/concepts/cluster-administration/logging/). |
| 140 | + |
| 141 | +Роздрукуйте журнали модулів `nginx`: |
| 142 | + |
| 143 | +```bash |
| 144 | +kubectl logs $POD_NAME |
| 145 | +``` |
| 146 | + |
| 147 | +```text |
| 148 | +...<OUTPUT TRUNCATED>... |
| 149 | +127.0.0.1 - - [04/Mar/2025:01:30:20 +0000] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.76.1" "-" |
| 150 | +``` |
| 151 | + |
| 152 | +### Виконання |
| 153 | + |
| 154 | +У цьому розділі ви перевірите здатність [виконувати команди в контейнері](https://kubernetes.io/docs/tasks/debug-application-cluster/get-shell-running-container/#running-individual-commands-in-a-container). |
| 155 | + |
| 156 | +Роздрукуйте версію `nginx`, виконавши команду `nginx -v` в контейнері `nginx`: |
| 157 | + |
| 158 | +```bash |
| 159 | +kubectl exec -ti $POD_NAME -- nginx -v |
| 160 | +``` |
| 161 | + |
| 162 | +```text |
| 163 | +nginx version: nginx/1.27.4 |
| 164 | +``` |
| 165 | + |
| 166 | +## Послуги |
| 167 | + |
| 168 | +У цьому розділі ви перевірите здатність відкривати додатки за допомогою [Служби](https://kubernetes.io/docs/concepts/services-networking/service/). |
| 169 | + |
| 170 | +Розкрийте розгортання `nginx` за допомогою служби [NodePort](https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport): |
| 171 | + |
| 172 | +```bash |
| 173 | +kubectl expose deployment nginx \ |
| 174 | + --port 80 --type NodePort |
| 175 | +``` |
| 176 | + |
| 177 | +> Ви не можете використовувати тип служби LoadBalancer, оскільки ваш кластер не налаштовано з [інтеграцією хмарного постачальника](https://kubernetes.io/docs/getting-started-guides/scratch/#cloud-provider). У цьому підручнику не розглядається налаштування інтеграції хмарних провайдерів. |
| 178 | +
|
| 179 | +Отримайте порт вузла, призначений службі `nginx`: |
| 180 | + |
| 181 | +```bash |
| 182 | +NODE_PORT=$(kubectl get svc nginx \ |
| 183 | + --output=jsonpath='{range .spec.ports[0]}{.nodePort}') |
| 184 | +``` |
| 185 | + |
| 186 | +Зробіть HTTP-запит із IP-адресою та портом вузла `nginx`: |
| 187 | + |
| 188 | +```bash |
| 189 | +curl -I http://node-0:${NODE_PORT} |
| 190 | +``` |
| 191 | + |
| 192 | +```text |
| 193 | +HTTP/1.1 200 OK |
| 194 | +Server: nginx/1.27.4 |
| 195 | +Date: Tue, 04 Mar 2025 01:40:20 GMT |
| 196 | +Content-Type: text/html |
| 197 | +Content-Length: 615 |
| 198 | +Last-Modified: Wed, 05 Feb 2025 11:06:32 GMT |
| 199 | +Connection: keep-alive |
| 200 | +ETag: "67a34638-267" |
| 201 | +Accept-Ranges: bytes |
| 202 | +``` |
| 203 | + |
| 204 | +Далі: [Очищення](lab13-cleanup.md) |
0 commit comments