Windows HostProcess コンテナーを使用する
HostProcess/特権コンテナーは、Windows コンテナー モデルを拡張して、Kubernetes クラスター管理のシナリオをより幅広くすることを可能にします。 HostProcess コンテナーはホスト上で直接実行され、通常のプロセスと同様の動作とアクセスを維持します。 HostProcess コンテナーを使用すると、ユーザーは、コンテナーによって提供されるバージョン管理とデプロイ方法を維持しながら、ホスト アクセスを必要とする管理操作と機能をパッケージ化して配布することができます。
特権デーモンセットは、Kubernetes で変更を実行したり、Linux ホストを監視したりできますが、Windows ホストは監視できません。 HostProcess コンテナーは、Windows でホストの昇格に相当します。
制限事項
- HostProcess コンテナーには、Kubernetes 1.23 以降が必要です。
- HostProcess コンテナーには、
containerd
1.6 以上のコンテナー ランタイムが必要です。 - Windows オペレーティング システムの制限により、HostProcess ポッドに含めることができるのは HostProcess コンテナーのみです。 特権のない Windows コンテナーでは、ホスト IP 名前空間と vNIC を共有できません。
- HostProcess コンテナーは、ホスト上でプロセスとして実行されます。 これらのコンテナーがホストから分離していることは、HostProcess ユーザー アカウントに課されるリソースの制約のみです。
- HostProcess コンテナーでは、ファイルシステム分離と Hyper-V 分離はサポートされていません。
- ボリューム マウントはサポートされており、コンテナー ボリュームの下にマウントされます。 「ボリューム マウント」を参照してください。
- 既定では、ホスト プロセス コンテナーで使用できるホスト ユーザー アカウントのセットが制限されています。 「ユーザー アカウントの選択」を参照してください。
- ディスク、メモリ、CPU 数などのリソースの制限は、ホスト上のプロセスと同じように機能します。
- 名前付きパイプ マウントと Unix ドメイン ソケットは直接サポートされていませんが、たとえば
\\.\pipe\*
などのホスト パスでアクセスできます。
HostProcess ワークロードを実行する
デプロイで HostProcess 機能を使用するには、hostProcess: true と hostNetwork: true を設定します。
spec:
...
securityContext:
windowsOptions:
hostProcess: true
...
hostNetwork: true
containers:
...
Windows ノードをもつ既存の AKS クラスターで HostProcess 機能を使用するワークロードの例を実行するには、次の内容のように 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 コンテナーの機能が使用されていることを確認します。
kubectl
を使用して、kube-system
名前空間内のポッドの名前を検索します。
$ kubectl get pods --namespace kube-system
NAME READY STATUS RESTARTS AGE
...
privileged-daemonset-12345 1/1 Running 0 2m13s
kubectl log
を使用してポッドのログを表示し、ポッドに管理者権限があることを確認します。
$ kubectl logs privileged-daemonset-12345 --namespace kube-system
InvalidOperation: Unable to find type [Security.Principal.WindowsPrincipal].
Process has admin rights:
次のステップ
HostProcess コンテナーと Kubernetes アップストリームへの Microsoft の貢献の詳細については、「v1.22 のアルファ: Windows HostProcess コンテナー」を参照してください。
Azure Kubernetes Service