Контейнер по боковым целям направлен на добавление или увеличение функциональности существующего контейнера без изменения контейнера. По сравнению с контейнером init, мы обсуждали ранее, контейнер по боковой автоматике запускается и работает одновременно в качестве контейнера приложения. Коляска — это всего лишь второй контейнер, который у вас есть в списке контейнеров, а заказ запуска не гарантирован.
Вероятно, одна из самых популярных реализаций контейнера по боковым цехам находится в сетке обслуживания ISTIO. Контейнер по боковым целям (прокси -сервер Envoy) работает рядом с контейнером приложения и перехватывает входящие и исходящие запросы. В этом сценарии коляска добавляет функциональность к существующему контейнеру и позволяет оператору выполнять маршрутизацию трафика, впрыск отказа и другие функции.
Боковой контейнер может иметь более простую идею ( log-Collector
), который собирает и хранит журналы контейнера приложения. Таким образом, как разработчик приложений, вам не нужно беспокоиться о сборе и хранении журналов. Вам нужно только записать журналы в местоположение (объем, общий между контейнерами), где контейнер для коляска может собирать их и отправлять для дальнейшей обработки или архивирования их.
Если мы продолжим с примера, который мы использовали для контейнера init; Мы могли бы создать контейнер по боковым целям, который периодически обновляет запуска git pull
и обновляет репозиторий. Чтобы это работало, мы будем держать контейнер init для выполнения начального клона, и контейнер с боковой автоматом, который периодически (например, каждые 60 секунд) проверяет и вытаскивает изменения репозитория.
Чтобы попробовать это, убедитесь, что вы разбили Оригинальный репозиторий GitHub и используйте свою вилку в YAML ниже.
apiVersion: v1 kind: Pod metadata: name: website spec: initContainers: - name: clone-repo image: alpine/git command: - git - clone - --progress - https://github.com/peterj/simple-http-page.git - /usr/share/nginx/html volumeMounts: - name: web mountPath: "/usr/share/nginx/html" containers: - name: nginx image: nginx ports: - name: http containerPort: 80 volumeMounts: - name: web mountPath: "/usr/share/nginx/html" - name: refresh image: alpine/git command: - sh - -c - watch -n 60 git pull workingDir: /usr/share/nginx/html volumeMounts: - name: web mountPath: "/usr/share/nginx/html" volumes: - name: web emptyDir: {}
Мы добавили контейнер под названием обновить
к YAML выше. Он использует альпийский/git
изображение, то же изображение, что и контейнер init, и запускает Смотреть -n 60 git pull
командование
Смотреть
Команда периодически выполняет команду. В нашем случае он выполняет git pull
Команд и обновляет локальный репозиторий каждые 60 секунд.
Другое поле, которое мы не упоминали раньше, — WorkingDir
Анкет Это поле установит рабочий каталог для контейнера. Мы устанавливаем это на /usr/share/nginx/html
Как и то, где мы изначально клонировали репо для использования контейнера init.
Сохраните вышеупомянутый ямл до SideCar-Container.yaml
и создать стручок с помощью Kubectl Apply -f SideCar -Container.yaml
Анкет
Если вы бежите Kubectl Get Pods
После того, как контейнер инициатор будет выполнен, вы заметите Готово
Столб теперь показывает 2/2
. Эти цифры сразу же говорят вам, что в этом стручке есть в общей сложности два контейнера, и оба они готовы:
$ kubectl get po NAME READY STATUS RESTARTS AGE website 2/2 Running 0 3m39s
Если вы настроили порт вперед в стручок, используя Kubectl Port-Forward Pod/Веб-сайт 8000: 80
командовать и откройте браузер для http://localhost: 8000
, вы увидите ту же веб -страницу, что и раньше.
Мы можем открыть отдельное окно терминала и посмотреть журналы из обновить
Контейнер внутри Веб -сайт
Струк:
$ kubectl logs website -c refresh -f Every 60.0s: git pull Already up to date.
Смотреть
Команда работает, и ответ от последнего git pull
Команда была Уже в курсе
Анкет Давайте внесем изменения в index.html
В репозитории вы раздвоились.
Я добавил Элемент и вот как обновляется
index.html
Файл выглядит так:
Hello from Simple-http-page Welcome to simple-http-page
Hello!
Далее вам нужно поставить это и посвятить его Мастер
ответвляться. Самый простой способ сделать это — с веб -страницы GitHub. Откройте index.html
на GitHub (я открываю https://github.com/peterj/simple-http-page/blob/master/index.html
, но вы должны заменить мое имя пользователя Питерж
С вашим именем пользователя или организацией, которую вы разделили репо) и щелкните значок карандаша, чтобы редактировать файл (см. Рисунок ниже).
Внесите изменение в index.html
Файл и нажмите Комплект изменения кнопка, чтобы посвятить их в филиал. Далее смотрите вывод из обновить
контейнер, и вы должны увидеть результат таким:
Every 60.0s: git pull From https://github.com/peterj/simple-http-page f804d4c..ad75286 master -> origin/master Updating f804d4c..ad75286 Fast-forward index.html | 1 + 1 file changed, 1 insertion(+)
Приведенный выше выход указывает изменения в репозитории. GIT тянет обновленный файл в общий том. Наконец, обновить свой браузер, где у вас есть http://localhost: 8000
открыт, и вы заметите изменения на странице:
Вы можете внести больше изменений, и каждый раз страница будет обновляться в течение 60 секунд. Вы можете удалить POD, работая Kubectl Delete PO сайт
.
Оригинал: «https://dev.to/peterj/sidecar-container-pattern-314»