Налаштування ініціалізації 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>
  ...

Що далі

Змінено June 20, 2024 at 12:44 PM PST: Sync changest from andygol/k8s-website (36d05bc8a1)