При извлечении образа из реестра при запуске модуля используются параметры DNS , отличные от тех, которые мы вызываем DNS из модулей внутри кластера.
Когда Kubernetes запускает новый модуль, он планирует его для узлаа затем агент на узле с именем kubelet вызывает обработчик контейнеров (Docker) для загрузки образа и запуска его с заданной конфигурацией.
Docker использует системный DNS для разрешения адреса реестра, посколькуон работает прямо на нашей хост-системе , а не в Kubernetes, поэтому любые настройки DNS не влияют на разрешение DNS на этапе загрузки образа.https://github.com/kubernetes/kubernetes/issues/8735 - это обсуждение на Github.
Если мы хотим изменить настройки DNS и переопределить IP-адрес реестра, чтобы использовать его на этапе загрузки образа, мы должны установить его в хост-системе.В конфигурации нам нужно изменить настройки DNS на всех ваших узлах в кластере.Самый простой способ сделать это - использовать файл / etc / hosts и добавить запись с вашим собственным IP, например, 192.168.1.124 example.com.
После этих изменений Docker на узлах будет использовать запись из / etc / hosts для вашего реестра вместо глобальных записей DNS, поскольку этот файл имеет более высокий приоритет и вы сможете запускатьpods с вашим изображением.
Для обновления файла хоста.Вы можете использовать DeamonSet с контекстом безопасности как привилегированный, см. ниже:
apiVersion: extensions/v1beta1
metadata:
name: ssd-startup-script
labels:
app: ssd-startup-script
spec:
template:
metadata:
labels:
app: ssd-startup-script
spec:
hostPID: true
containers:
- name: ssd-startup-script
image: gcr.io/google-containers/startup-script:v1
imagePullPolicy: Always
securityContext:
privileged: true
env:
- name: STARTUP_SCRIPT
value: |
#!/bin/bash
<YOUR COMMAND LINE>
<YOUR COMMAND LINE>
<YOUR COMMAND LINE>
echo Done```
you need to run the kubectl apply -f <demonset yaml file>