Налаштування ініціалізації Podʼа
На цій сторінці показано, як використовувати Init Container для ініціалізації Podʼа перед запуском контейнера застосунку.
Перш ніж ви розпочнете
Вам треба мати кластер Kubernetes, а також інструмент командного рядка kubectl має бути налаштований для роботи з вашим кластером. Рекомендується виконувати ці настанови у кластері, що має щонайменше два вузли, які не виконують роль вузлів управління. Якщо у вас немає кластера, ви можете створити його, за допомогою minikube або використовувати одну з цих пісочниць:
Для перевірки версії введітьkubectl version
.Створіть Pod, який має Init Container
У цьому завданні ви створите Pod, який має один контейнер застосунку та один Init Container. Контейнер ініціалізації виконується до завершення перед тим, як розпочне виконання контейнер застосунку.
Ось файл конфігурації для Podʼа:
apiVersion: v1
kind: Pod
metadata:
name: init-demo
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
volumeMounts:
- name: workdir
mountPath: /usr/share/nginx/html
# Цей контейр виконуєть під час ініціалізації podʼу
initContainers:
- name: install
image: busybox:1.28
command:
- wget
- "-O"
- "/work-dir/index.html"
- http://info.cern.ch
volumeMounts:
- name: workdir
mountPath: "/work-dir"
dnsPolicy: Default
volumes:
- name: workdir
emptyDir: {}
У файлі конфігурації ви бачите, що в Podʼі є Том, який обидва контейнери (ініціалізації та застосунку) спільно використовують.
Контейнер ініціалізації монтує спільний Том у /work-dir
, а контейнер застосунку монтує спільний Том у /usr/share/nginx/html
. Контейнер ініціалізації виконує наступну команду, а потім завершується:
wget -O /work-dir/index.html http://info.cern.ch
Зверніть увагу, що контейнер ініціалізації записує файл index.html
в кореневу теку сервера nginx.
Створіть Pod:
kubectl apply -f https://k8s.io/examples/pods/init-containers.yaml
Перевірте, що контейнер nginx працює:
kubectl get pod init-demo
Вивід показує, що контейнер nginx працює:
NAME READY STATUS RESTARTS AGE
init-demo 1/1 Running 0 1m
Отримайте доступ до оболонки в контейнері nginx, що працює в Podʼі init-demo
:
kubectl exec -it init-demo -- /bin/bash
У своїй оболонці надішліть запит GET на сервер nginx:
root@nginx:~# apt-get update
root@nginx:~# apt-get install curl
root@nginx:~# curl localhost
Вивід показує, що nginx обслуговує вебсторінку, яку записав контейнер ініціалізації:
<html><head></head><body><header>
<title>http://info.cern.ch</title>
</header>
<h1>http://info.cern.ch - home of the first website</h1>
...
<li><a href="http://info.cern.ch/hypertext/WWW/TheProject.html">Browse the first website</a></li>
...
Що далі
- Дізнайтеся більше про спілкування між контейнерами, що працюють в одному Podʼі.
- Дізнайтеся більше про Контейнери ініціалізації.
- Дізнайтеся більше про Томи.
- Дізнайтеся більше про Налагодження контейнерів ініціалізації