如果您一直在学习 Kubernetes,那么您很可能熟悉 Pod 的概念。Pod 是 Kubernetes 中必不可少的组件。这就是为什么“ Minerva 的 Pod ”(本认证 Kubernetes 管理员课程中使用的交互式指南)代表 Pod 指南。
豆荚
Pod 被调度到机器或虚拟机上,其中调度程序(控制平面组件)尝试将 Pod 安装在虚拟机上,前提是虚拟机具有足够的 CPU 和内存来满足 Pod 的需求。对于那些想要利用虚拟机所有资源的人来说,您可能会问“我如何告诉 Kubernetes 将 Pod 安装在我的虚拟机上,以便它能够利用它拥有的所有资源?”毕竟,我们大多数人没有能力为我们的 Pod 创建无限数量的虚拟机,并且利用我们支付的每一平方英寸的资源不仅具有成本效益,而且还使我们能够确保我们的 Pod 获得足够的资源来运行,从而使我们的应用程序性能更好。在本简短教程中,您将学习如何使用 Pod 的请求和限制,以便更好地组织 Pod 在集群中的调度方式。我的目标是说服您,将其添加到每个 Pod 定义中是一个好主意,可以让您高枕无忧,并为在 Kubernetes 上运行的应用程序增加价值。
请求和限制
创建 pod 时,可以指定容器所需的 CPU 和内存量,称为请求。还可以设置容器应使用的 CPU 和内存量的限制,称为限制。考虑 Java 应用程序的 JVM 堆大小时,设置请求和限制变得非常重要。如果设置不正确,JVM 进程很可能会被系统 OOM 终止程序杀死。让我们继续创建一个仅包含请求的 pod,我将解释这对 pod 的作用。首先,创建以下 pod YAML,它将指定要使用的映像和请求量。如果您无权访问自己的集群,请开始使用Linux Academy 的免费社区版(有限访问)。
apiVersion:v1kind:Podmetadata:name:pod1spec:containers:- image:busyboxcommand:[“dd”,“if = / dev / zero”,“of = / dev / null”] name:pod1resources:requests:cpu:800mmemory:20Mi
继续运行以下命令来创建 pod:
kubectl 创建 -f pod.yaml
要查看此 pod 以及它在哪个节点上运行,请输入以下命令:
kubectl 获取 pod -o wide
要获取有关节点及其利用的资源的更多信息,请输入以下命令:
kubectl 描述节点[节点名称]
注意:如果您不知道节点名称,请键入以下内容获取:kubectl get nodes
在命令输出的底部kubectl describe node
,您将注意到请求和限制,类似于:您可能会从上面的屏幕截图中注意到,此节点上运行的 pod 不止一个。这是因为 flannel 和 kube-proxy 也将在集群中的 kube-system 命名空间中运行。这就是总请求量的来源。从上面的屏幕截图中,flannel pod 请求 100m CPU,而我们刚刚调度的 pod 请求 800m CPU。这给了我们底部列出的总计 900m(90%)。
节点 CPU 资源
您可能会认为,由于每个 pod 都请求了一定数量,因此它们将仅使用请求的数量,仅此而已。事实并非如此。实际上,如果需要,两个 pod 很可能会使用所有剩余的 CPU。但是,它们不会均匀分配。剩余的 CPU 按 1 比 5 的比例分配。第一个 pod 将获得六分之一的 CPU 时间,另一个将获得剩余的六分之五。为了明确说明 pod 可以使用的最大 CPU 和内存量,我们也可以在 pod YAML 中设置限制。这是来自第一个 pod 的相同 YAML,但我们添加了限制:
apiVersion:v1kind:Podmetadata:name:pod1spec:containers:- image:busyboxcommand:[“dd”,“if = / dev / zero”,“of = / dev / null”] name:pod1resources:requests:cpu:800mmemory:20Milimits:cpu:800mmemory:20Mi
要应用这些更改,您必须删除现有 pod 并使用修改后的 YAML 重新创建它。使用以下命令删除 pod:
kubectl 删除 pod1
然后,您可以使用以下命令使用新的 YAML 创建 pod:
kubectl 创建 -f pod.yaml
我们可以通过输入以下命令来检查 pod 是否正在运行:
kubectl 获取 pod -o wide
现在我们的 pod 正在运行,它已经请求了 800m CPU 和 20Mi 内存,而且因为我们设置了相同的限制,所以它只会使用请求的数量,而不会使用其他数量。
有关 Pod CPU 和内存的更多信息
这是关于在 Kubernetes 中设置 CPU 和内存请求和限制的简短教程。如果您想了解有关在 Kubernetes 中调度 Pod 的更多信息,请查看Linux Academy 上的Cloud Native Certified Kubernetes Administrator (CKA) 课程,或查看以下免费资源以了解有关 Kubernetes 的更多信息:
请先 登录后发表评论 ~