你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用 Windows HostProcess 容器
HostProcess/特权容器扩展了 Windows 容器模型,以支持更广泛的 Kubernetes 群集管理场景。 HostProcess 容器直接在主机上运行,并保持与常规进程类似的行为和访问。 使用 HostProcess 容器,用户可以打包和分发需要主机访问的管理操作和功能,同时保留容器提供的版本控制和部署方法。
特权 DaemonSet 可以在 Kubernetes 上执行更改或监视 Linux 主机,但不能监视 Windows 主机。 HostProcess 容器是主机提升的 Windows 等效项。
限制
- HostProcess 容器需要 Kubernetes 1.23 或更高版本。
- HostProcess 容器需要
containerd
1.6 或更高版本的容器运行时。 - 由于 Windows 操作系统存在限制,HostProcess Pod 只能包含 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
通过查看 Pod 的日志,验证工作负载是否使用 HostProcess 容器的功能。
使用 kubectl
在 kube-system
命名空间中查找 pod 的名称。
$ 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 容器和 Microsoft 对 Kubernetes 上游的贡献的更多详细信息,请参阅 v1.22 中的 Alpha:Windows HostProcess 容器。