国际旅游网站设计报告,赣州企业网站建设,网站ftp查询,宿松做网站参考#xff1a;关于 cgroup v2 | Kubernetes
关于 cgroup v2
在 Linux 上#xff0c;控制组约束分配给进程的资源。
kubelet 和底层容器运行时都需要对接 cgroup 来强制执行为 Pod 和容器管理资源#xff0c; 这包括为容器化工作负载配置 CPU/内存请求和限制。
Linux 中…参考关于 cgroup v2 | Kubernetes
关于 cgroup v2
在 Linux 上控制组约束分配给进程的资源。
kubelet 和底层容器运行时都需要对接 cgroup 来强制执行为 Pod 和容器管理资源 这包括为容器化工作负载配置 CPU/内存请求和限制。
Linux 中有两个 cgroup 版本cgroup v1 和 cgroup v2。cgroup v2 是新一代的 cgroup API
什么是 cgroup v2
cgroup v2 是 Linux cgroup API 的下一个版本。cgroup v2 提供了一个具有增强资源管理能力的统一控制系统。
识别 Linux 节点上的 cgroup 版本
stat -fc %T /sys/fs/cgroup/ 对于 cgroup v2输出为 cgroup2fs。
对于 cgroup v1输出为 tmpfs。
容器运行时接口CRI
CRI 是一个插件接口它使 kubelet 能够使用各种容器运行时无需重新编译集群组件。
你需要在集群中的每个节点上都有一个可以正常工作的容器运行时 这样 kubelet 能启动 Pod 及其容器。
容器运行时接口CRI是 kubelet 和容器运行时之间通信的主要协议。
Kubernetes 容器运行时接口Container Runtime InterfaceCRI定义了主要 gRPC 协议 用于节点组件 kubelet 和容器运行时之间的通信。
容器
每个运行的容器都是可重复的 包含依赖环境在内的标准意味着无论你在哪里运行它都会得到相同的行为。
容器将应用程序从底层的主机设施中解耦。 这使得在不同的云或 OS 环境中部署更加容易。
Kubernetes 集群中的每个节点都会运行容器 这些容器构成分配给该节点的 Pod。 单个 Pod 中的容器会在共同调度下于同一位置运行在相同的节点上。
容器镜像
容器镜像是一个随时可以运行的软件包 包含运行应用程序所需的一切代码和它需要的所有运行时、应用程序和系统库以及一些基本设置的默认值。
容器旨在设计成无状态且不可变的 你不应更改已经运行的容器的代码。如果有一个容器化的应用程序需要修改 正确的流程是先构建包含更改的新镜像再基于新构建的镜像重新运行容器。
容器运行时
这个基础组件使 Kubernetes 能够有效运行容器。 它负责管理 Kubernetes 环境中容器的执行和生命周期。
Kubernetes 支持许多容器运行环境例如 containerd、 CRI-O 以及 Kubernetes CRI (容器运行环境接口) 的其他任何实现。
通常你可以允许集群为一个 Pod 选择其默认的容器运行时。如果你需要在集群中使用多个容器运行时 你可以为一个 Pod 指定 RuntimeClass 以确保 Kubernetes 会使用特定的容器运行时来运行这些容器。
你还可以通过 RuntimeClass使用相同的容器运行时但使用不同设定的配置来运行不同的 Pod。
工作负载(workloads)
工作负载是在 Kubernetes 上运行的应用程序。
在 Kubernetes 中无论你的负载是由单个组件还是由多个一同工作的组件构成 你都可以在一组 Pod 中运行它。 在 Kubernetes 中Pod 代表的是集群上处于运行状态的一组 容器的集合。
Kubernetes Pod 遵循预定义的生命周期。 例如当在你的集群中运行了某个 Pod但是 Pod 所在的 节点 出现致命错误时 所有该节点上的 Pod 的状态都会变成失败。Kubernetes 将这类失败视为最终状态 即使该节点后来恢复正常运行你也需要创建新的 Pod 以恢复应用。
为了减轻用户的使用负担通常不需要用户直接管理每个 Pod。 而是使用负载资源来替用户管理一组 Pod。 这些负载资源通过配置 控制器 来确保正确类型的、处于运行状态的 Pod 个数是正确的与用户所指定的状态相一致。
Kubernetes 提供若干种内置的工作负载资源
Deployment 和 ReplicaSet 替换原来的资源 ReplicationController。 Deployment 很适合用来管理你的集群上的无状态应用Deployment 中的所有 Pod 都是相互等价的并且在需要的时候被替换。StatefulSet 让你能够运行一个或者多个以某种方式跟踪应用状态的 Pod。 例如如果你的负载会将数据作持久存储你可以运行一个 StatefulSet将每个 Pod 与某个 PersistentVolume 对应起来。你在 StatefulSet 中各个 Pod 内运行的代码可以将数据复制到同一 StatefulSet 中的其它 Pod 中以提高整体的服务可靠性。DaemonSet 定义提供节点本地支撑设施的 Pod。这些 Pod 可能对于你的集群的运维是 非常重要的例如作为网络链接的辅助工具或者作为网络 插件 的一部分等等。每次你向集群中添加一个新节点时如果该节点与某 DaemonSet 的规约匹配则控制平面会为该 DaemonSet 调度一个 Pod 到该新节点上运行。Job 和 CronJob。 定义一些一直运行到结束并停止的任务。 你可以使用 Job 来定义只需要执行一次并且执行后即视为完成的任务。你可以使用 CronJob 来根据某个排期表来多次运行同一个 Job。
Pod
Pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。
Pod就像在鲸鱼荚或者豌豆荚中是一组一个或多个 容器 这些容器共享存储、网络、以及怎样运行这些容器的声明。 Pod 中的内容总是并置colocated的并且一同调度在共享的上下文中运行。 Pod 所建模的是特定于应用的 “逻辑主机”其中包含一个或多个应用容器 这些容器相对紧密地耦合在一起。
什么是 Pod
为了运行 Pod你需要提前在每个节点安装好容器运行时。
Pod 的共享上下文包括一组 Linux 名字空间、控制组cgroup和可能一些其他的隔离方面 即用来隔离容器的技术。 在 Pod 的上下文中每个独立的应用可能会进一步实施隔离。
Pod 类似于共享名字空间并共享文件系统卷的一组容器。
apiVersion: v1
kind: Pod
metadata:name: nginx
spec:containers:- name: nginximage: nginx:1.14.2ports:- containerPort: 80
Pod 通常不是直接创建的而是使用工作负载资源创建的。
用于管理 Pod 的工作负载资源
通常你不需要直接创建 Pod甚至单实例 Pod。相反你会使用诸如 Deployment 或 Job 这类工作负载资源来创建 Pod。 如果 Pod 需要跟踪状态可以考虑 StatefulSet 资源。
Kubernetes 集群中的 Pod 主要有两种用法 运行单个容器的 Pod。每个 Pod 一个容器 模型是最常见的 Kubernetes 用例 在这种情况下可以将 Pod 看作单个容器的包装器并且 Kubernetes 直接管理 Pod而不是容器。 运行多个协同工作的容器的 Pod。 Pod 可能封装由多个紧密耦合且需要共享资源的共处容器组成的应用程序。 这些位于同一位置的容器可能形成单个内聚的服务单元 —— 一个容器将文件从共享卷提供给公众 而另一个单独的 “边车”sidecar容器则刷新或更新这些文件。 Pod 将这些容器和存储资源打包为一个可管理的实体。 将多个并置、同管的容器组织到一个 Pod 中是一种相对高级的使用场景。 只有在一些场景中容器之间紧密关联时你才应该使用这种模式。
每个 Pod 都旨在运行给定应用程序的单个实例。如果希望横向扩展应用程序 例如运行多个实例以提供更多的资源则应该使用多个 Pod每个实例使用一个 Pod。 在 Kubernetes 中这通常被称为副本Replication。 通常使用一种工作负载资源及其控制器来创建和管理一组 Pod 副本。
Pod 怎样管理多个容器