MyTetra Share
Делитесь знаниями!
Init-контейнеры в Kubernetes
Время создания: 21.09.2018 19:45
Автор: br0ke
Текстовые метки: kubernetes, k8s, kube, kubectl, pod, initialization, init, container, containers, init-container, init-containers, PodInitializing
Раздел: Информационные технологии - Linux - Kubernetes
Запись: and-semakin/mytetra_data/master/base/1537541120o42nqqafca/text.html на raw.githubusercontent.com

Init-контейнеры -- это специальные контейнеры, которые запускаются при инициализации пода до запуска основных контейнеров. Init-контейнеры подготавливают окружение для работы (выполнение миграций, проверки, склонировать Git-репозиторий, дождаться СУБД или другой сервис, создание конфигов, установка прав на файлы) и могут содержать в себе утилиты, которые не обязательны или не желательны в основном контейнере.


В целом, init-контейнеры работают как обычные контейнеры, за исключением следующих пунктов:


они всегда выполняются до завершения;

каждый init-контейнер должен успешно завершиться, чтобы запустился следующий.


Если init-контейнер завершается с ошибкой, то Kubernetes перезапускает весь под целиком (если, конечно, restartPolicy это позволяет).


Пример:


apiVersion: v1

kind: Pod

metadata:

name: myapp-pod

labels:

app: myapp

spec:

containers:

- name: myapp-container

image: busybox

command: ['sh', '-c', 'echo The app is running! && sleep 3600']

initContainers:

- name: init-myservice

image: busybox

command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;']

- name: init-mydb

image: busybox

command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;']


Отладка:


1. Создать под с init-контейнерами:


kubectl create -f myapp.yaml


2. Посмотреть статус пода:


kubectl get -f myapp.yaml


3. Посмотреть подробную информацию о поде:


$ kubectl describe -f myapp.yaml

Name: myapp-pod

Namespace: default

[...]

Labels: app=myapp

Status: Pending

[...]

Init Containers:

init-myservice:

[...]

State: Running

[...]

init-mydb:

[...]

State: Waiting

Reason: PodInitializing

Ready: False

[...]

Containers:

myapp-container:

[...]

State: Waiting

Reason: PodInitializing

Ready: False

[...]

Events:

FirstSeen LastSeen Count From SubObjectPath Type Reason Message

--------- -------- ----- ---- ------------- -------- ------ -------

16s 16s 1 {default-scheduler } Normal Scheduled Successfully assigned myapp-pod to 172.17.4.201

16s 16s 1 {kubelet 172.17.4.201} spec.initContainers{init-myservice} Normal Pulling pulling image "busybox"

13s 13s 1 {kubelet 172.17.4.201} spec.initContainers{init-myservice} Normal Pulled Successfully pulled image "busybox"

13s 13s 1 {kubelet 172.17.4.201} spec.initContainers{init-myservice} Normal Created Created container with docker id 5ced34a04634; Security:[seccomp=unconfined]

13s 13s 1 {kubelet 172.17.4.201} spec.initContainers{init-myservice} Normal Started Started container with docker id 5ced34a04634


4. Просмотреть логи init-контейнеров:


$ kubectl logs myapp-pod -c init-myservice # Inspect the first init container

$ kubectl logs myapp-pod -c init-mydb # Inspect the second init container



Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования