HostProcess/Privileged 容器扩展 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: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.azk8s.cn/windows/nanoserver:ltsc2019 # or 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 容器和 Azure 对 Kubernetes 上游的贡献的详细信息,请参阅 v1.22 中的 Alpha:Windows HostProcess 容器。