Kubernetes创建Pod流程是一个复杂的过程,它包括从定义Pod到最终部署Pod的所有步骤。在Kubernetes中,Pod是一个基本的调度单位,它可以包含一个或多个容器,并共享存储卷、网络和其他资源。
Kubernetes创建Pod流程的步骤如下:
1. 定义Pod:首先要定义一个Pod对象,这是一个YAML文件,用于描述要部署的应用所需要的资源。该文件中包含了要部署的容器、存储卷、网络、标签、参数和其他信息。 2. 部署Pod:使用kubectl命令将YAML文件提交到Kubernetes集群中。 3. 分配资源:Kubernetes会选择一台Node作为该Pod的目标Node,并将该Node上的资源分配到该Pod中。 4. 创建容器:Kubernetes会通过Docker或者rkt来在目标Node上创建容器。 5. 检测容器运行情况:Kubernetes会通过API Server来监测容器是否正常运行。 6. 更新pod信息:当pod部署成功之后,Kubernetes会通过API Server来更新pod信息。
FEATURE STATE: Kubernetes v1.23 [beta]
Windows HostProcess 容器让你能够在 Windows 主机上运行容器化负载。 这类容器以普通的进程形式运行,但能够在具有合适用户特权的情况下, 访问主机网络名字空间、存储和设备。HostProcess 容器可用来在 Windows 节点上部署网络插件、存储配置、设备插件、kube-proxy 以及其他组件, 同时不需要配置专用的代理或者直接安装主机服务。
类似于安装安全补丁、事件日志收集等这类管理性质的任务可以在不需要集群操作员登录到每个 Windows 节点的前提下执行。HostProcess 容器可以以主机上存在的任何用户账户来运行, 也可以以主机所在域中的用户账户运行,这样管理员可以通过用户许可权限来限制资源访问。 尽管文件系统和进程隔离都不支持,在启动容器时会在主机上创建一个新的卷, 为其提供一个干净的、整合的工作空间。HostProcess 容器也可以基于现有的 Windows 基础镜像来制作,并且不再有 Windows 服务器容器所带有的那些 兼容性需求, 这意味着基础镜像的版本不必与主机操作系统的版本匹配。 不过,仍然建议你像使用 Windows 服务器容器负载那样,使用相同的基础镜像版本, 这样你就不会有一些未使用的镜像占用节点上的存储空间。HostProcess 容器也支持 在容器卷内执行卷挂载。
本任务指南是特定于 Kubernetes v1.24 的。
在 Kubernetes v1.24 中,HostProcess 容器功能特性默认是启用的。 kubelet 会直接与 containerd 通信,通过 CRI 将主机进程标志传递过去。 你可以使用 containerd 的最新版本(v1.6+)来运行 HostProcess 容器。
要 禁用 HostProcess 容器特性,你需要为 kubelet 和 kube-apiserver 设置下面的特性门控标志:
--feature-gates=WindowsHostProcessContainers=false
以下限制是与 Kubernetes v1.24 相关的:
启用 Windows HostProcess Pod 需要在 Pod 安全配置中设置合适的选项。 在 Pod 安全标准中所定义的策略中, HostProcess Pod 默认是不被 basline 和 restricted 策略支持的。因此建议 HostProcess 运行在与 privileged 模式相看齐的策略下。
当运行在 privileged 策略下时,下面是要启用 HostProcess Pod 创建所需要设置的选项:
控制 | 策略 |
---|---|
securityContext.windowsOptions.hostProcess |
Windows Pods 提供运行 HostProcess 容器的能力,这类容器能够具有对 Windows 节点的特权访问权限。 可选值
|
hostNetwork |
初始时将默认位于主机网络中。在未来可能会希望将网络设置到不同的隔离环境中。 可选值
|
securityContext.windowsOptions.runAsUsername |
关于 HostProcess 容器所要使用的用户的规约,需要设置在 Pod 的规约中。 可选值
|
runAsNonRoot |
因为 HostProcess 容器有访问主机的特权,runAsNonRoot 字段不可以设置为 true。 可选值
|
spec:
securityContext:
windowsOptions:
hostProcess: true
runAsUserName: "NT AUTHORITYLocal service"
hostNetwork: true
containers:
- name: test
image: image1:latest
command:
- ping
- -t
- 127.0.0.1
nodeSelector:
"kubernetes.io/os": windows
HostProcess 容器支持在容器卷空间中挂载卷的能力。 在容器内运行的应用能够通过相对或者绝对路径直接访问卷挂载。 环境变量 $CONTAINER_SANDBOX_MOUNT_POINT
在容器创建时被设置为指向容器卷的绝对主机路径。 相对路径是基于 .spec.containers.volumeMounts.mountPath
配置来推导的。
容器内支持通过下面的路径结构来访问服务账好令牌:
.varrunsecretskubernetes.ioserviceaccount
$CONTAINER_SANDBOX_MOUNT_POINTvarrunsecretskubernetes.ioserviceaccount
资源约束(磁盘、内存、CPU 个数)作用到任务之上,并在整个任务上起作用。 例如,如果内存限制设置为 10MB,任何 HostProcess 任务对象所分配的内存不会超过 10MB。 这一行为与其他 Windows 容器类型相同。资源限制的设置方式与编排系统或容器运行时无关。 唯一的区别是用来跟踪资源所进行的磁盘资源用量的计算,出现差异的原因是因为 HostProcess 容器启动引导的方式造成的。
HostProcess 容器支持以三种被支持的 Windows 服务账号之一来运行:
你应该为每个 HostProcess 容器选择一个合适的 Windows 服务账号,尝试限制特权范围, 避免给主机代理意外的(甚至是恶意的)伤害。LocalSystem 服务账号的特权级 在三者之中最高,只有在绝对需要的时候才应该使用。只要可能,应该使用 LocalService 服务账号,因为该账号在三者中特权最低。
使用指令式命令管理 Kubernetes 对象使用构建在kubectl命令行工具中的指令式命令可以直接快速创建、更新和删除 Kubernetes 对象...
为容器设置启动时要执行的命令和参数本页将展示如何为Pod中容器设置启动时要执行的命令及其参数。在开始之前你必须拥有一个Kuber...
扩缩StatefulSet本文介绍如何扩缩StatefulSet。StatefulSet的扩缩指的是增加或者减少副本个数。在开始之前StatefulSets仅适用于K...
使用端口转发来访问集群中的应用本文展示如何使用kubectlport-forward连接到在Kubernetes集群中运行的MongoDB服务。这种类型...
手动轮换CA证书本页展示如何手动轮换证书机构(CA)证书。在开始之前你必须拥有一个Kubernetes的集群,同时你的Kubernetes集群必...
您可以使用任何文本编辑器与命令行工具来构建Flutter应用程序。 不过,我们建议使用我们的编辑器插件之一,以获得更好的体验。通...
云函数的运行环境是 Node.js,我们可以在云函数中使用Nodejs内置模块以及使用 npm 安装第三方依赖来帮助我们更快的开发。借助于...
本指南描述了在安卓模拟器上运行 React Native 安卓应用程序所需要的开发环境的基本安装步骤。在这里我们不讨论诸如 IDE 的开发...
jQuery Mobile 简介jQuery Mobile 是一个用于创建移动端web应用的的前端框架。 学习本教程前你需要先了解 在开始学习 jQuery Mob...
jQuery Mobile 列表视图 jQuery Mobile 列表视图jQuery Mobile 中的列表视图是标准的HTML 列表; 有序(ol) 和 无序(ul).列表视图...