Использование контейнеров Windows HostProcess
Контейнеры HostProcess и Privileged расширяют модель контейнеров Windows, чтобы обеспечить поддержку более широкого набора сценариев управления кластером Kubernetes. Контейнеры HostProcess выполняются непосредственно на узле и поддерживают поведение и доступ, аналогичный обычному процессу. С помощью контейнеров HostProcess пользователи могут упаковывать и распространять операции и функции управления, требующие доступа к хосту, при этом сохраняя методы управления версиями и развертывания, предоставляемые контейнерами.
Привилегированный DaemonSet может выполнять изменения или отслеживать узел Linux в Kubernetes, но не узлы Windows. Контейнеры HostProcess являются эквивалентом повышения прав узла в Windows.
Ограничения
- Для контейнеров HostProcess требуется Kubernetes версии 1.23 или более поздней.
- Для контейнеров HostProcess требуется среда выполнения контейнера
containerd
версии 1.6 или более поздней. - Модули pod HostProcess могут содержать только контейнеры HostProcess из-за ограничения операционной системы Windows. Контейнеры, не являющиеся привилегированными контейнерами Windows, не могут совместно использовать виртуальную сетевую карту с пространством имен IP-адресов узла.
- Контейнеры HostProcess выполняются как процесс на узле. Единственная изоляция этих контейнеров от узла — ограничения ресурсов, введенные для учетной записи пользователя HostProcess.
- Изоляция файловой системы и изоляция Hyper-V не поддерживаются для контейнеров HostProcess.
- Подключения томов поддерживаются и подключаются к тому контейнера. См. "Подключения томов".
- Ограниченный набор учетных записей пользователей узла по умолчанию доступен для контейнеров хост-процессов. См. "Выбор учетной записи пользователя".
- Ограничения ресурсов, такие как количество дисков, памяти и ЦП, работают так же, как и процессы на узле.
- Подключения именованных каналов и сокеты домена Unix не поддерживаются напрямую, но могут быть доступны по пути узла, например
\\.\pipe\*
.
Запуск рабочей нагрузки HostProcess
Чтобы использовать функции HostProcess с развертыванием, задайте hostProcess: true и hostNetwork: true: true:
spec:
...
securityContext:
windowsOptions:
hostProcess: true
...
hostNetwork: true
containers:
...
Чтобы запустить пример рабочей нагрузки, использующую функции HostProcess в существующем кластере AKS с узлами Windows, создайте hostprocess.yaml
следующее содержимое:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: privileged-daemonset
namespace: kube-system
labels:
app: privileged-daemonset
spec:
selector:
matchLabels:
app: privileged-daemonset
template:
metadata:
labels:
app: privileged-daemonset
spec:
nodeSelector:
kubernetes.io/os: windows
securityContext:
windowsOptions:
hostProcess: true
runAsUserName: "NT AUTHORITY\\SYSTEM"
hostNetwork: true
containers:
- name: powershell
image: mcr.microsoft.com/powershell:lts-nanoserver-1809 # or lts-nanoserver-ltsc2022
command:
- powershell.exe
- -Command
- Start-Sleep -Seconds 2147483
terminationGracePeriodSeconds: 0
Используйте kubectl
для запуска примера рабочей нагрузки:
kubectl apply -f hostprocess.yaml
Должен появиться следующий результат:
$ kubectl apply -f hostprocess.yaml
daemonset.apps/privileged-daemonset created
Убедитесь, что рабочая нагрузка использует функции контейнеров HostProcess, просматривая журналы pod.
Используйте kubectl
для поиска имени модуля pod в пространстве имен kube-system
.
$ kubectl get pods --namespace kube-system
NAME READY STATUS RESTARTS AGE
...
privileged-daemonset-12345 1/1 Running 0 2m13s
Используйте kubectl log
для просмотра журналов модуля pod и проверки наличия у модуля pod прав администратора:
$ kubectl logs privileged-daemonset-12345 --namespace kube-system
InvalidOperation: Unable to find type [Security.Principal.WindowsPrincipal].
Process has admin rights:
Следующие шаги
Дополнительные сведения о контейнерах HostProcess и вкладе Корпорации Майкрософт в вышестоящий поток Kubernetes см. в статье "Альфа" в версии 1.22: контейнеры Windows HostProcess.
Azure Kubernetes Service