目录
运行 kubectl top 命令,获取该 Pod 的指标数据
使用 kubectl top 命令来获取该 Pod 的指标:
准备环境:拥有一个 Kubernetes 的集群,集群必须至少有 1 个 CPU 可用,且配置 kubectl 命令行工具与集群通信。
为容器和Pod分配内存资源
创建命名空间
[root@k8s-master-1 ~]# kubectl create namespace mem-example
或者直接在yaml文件里面创建:
指定内存请求和限制
[root@k8s-master-1 /]# vim ~/mem/memory-request-limit.yaml
#创建命名空间mem-example-2
apiVersion: v1
kind: Namespace
metadata:
name: mem-example-2
---#Pod配置文件
apiVersion: v1
kind: Pod
metadata:
name: memory-demo
namespace: mem-example-2
spec:
containers:
- name: memory-demo-ctr
image: polinux/stress
resources:
requests:
memory: "100Mi"
limits:
memory: "200Mi"
command: ["stress"]
args: ["--vm", "1", "--vm-bytes", "150M", "--vm-hang", "1"]
要为容器指定内存请求,请在容器资源清单中包含 resources: requests
字段。 同理,要指定内存限制,请包含 resources: limits
。
这个例子中, 容器将会请求 100 MiB 内存,并且内存会被限制在 200 MiB 以内。
配置文件的 args
部分提供了容器启动时的参数: "--vm-bytes", "150M"
参数告知容器尝试分配 150 MiB 内存。
开始创建pod:
[root@k8s-master-1 mem]# kubectl apply -f memory-request-limit.yaml
验证 Pod 中的容器是否已运行:
[root@k8s-master-1 mem]# kubectl get pod memory-demo --namespace=mem-example-2
查看 Pod 相关的详细信息:
[root@k8s-master-1 mem]# kubectl get pod memory-demo --output=yaml --namespace=mem-example-2
运行 kubectl top
命令,获取该 Pod 的指标数据
[root@k8s-master-1 mem]# kubectl top pod memory-demo --namespace=mem-example-2
输出结果显示:Pod 正在使用的内存为 150 MiB。 这大于 Pod 请求的 100 MiB,但在 Pod 限制的 200 MiB之内。
删除 Pod:
[root@k8s-master-1 mem]# kubectl delete pod memory-demo --namespace=mem-example-2
为容器和 Pods 分配 CPU 资源
创建命名空间
[root@k8s-master-1 mem]# kubectl create namespace cpu-example
指定 CPU 请求和 CPU 限制
[root@k8s-master-1 /]# vim ~/cpu/cpu-request-limit.yaml
#Pod配置文件
apiVersion: v1
kind: Pod
metadata:
name: cpu-demo
namespace: cpu-example
spec:
containers:
- name: cpu-demo-ctr
image: vish/stress
resources:
limits:
cpu: "1"
requests:
cpu: "0.5"
args:
- -cpus
- "2"
在容器资源清单中包含 resources: requests
字段为容器指定 CPU 请求,在 resources:limits
指定 CPU 限制。
该例子中,容器将会请求 0.5 个 CPU,而且最多限制使用 1 个 CPU。
配置文件的 args
部分提供了容器启动时的参数, -cpus "2"
参数告诉容器尝试使用 2 个 CPU。
创建 Pod:
[root@k8s-master-1 mem]# kubectl apply -f cpu-request-limit.yaml --namespace=cpu-example
验证所创建的 Pod 处于 Running 状态
[root@k8s-master-1 mem]# kubectl get pod cpu-demo --namespace=cpu-example
查看显示关于 Pod 的详细信息:
[root@k8s-master-1 mem]# kubectl get pod cpu-demo --output=yaml --namespace=cpu-example
输出显示 Pod 中的一个容器的 CPU 请求为 500 milliCPU,并且 CPU 限制为 1 个 CPU。
使用 kubectl top
命令来获取该 Pod 的指标:
[root@k8s-master-1 mem]# kubectl top pod cpu-demo --namespace=cpu-example
此示例输出显示 Pod 使用的是 1001 milliCPU,即略高于 Pod 配置中指定的 1 个 CPU 的限制。
回想一下,通过设置 -cpu "2"
,容器配置为尝试使用 2 个 CPU, 但是容器只被允许使用大约 1 个 CPU, 该容器正尝试使用超出其限制的 CPU 资源,但是容器的 CPU 用量受到限制。
删除 Pod:
[root@k8s-master-1 mem]# kubectl delete pod cpu-demo --namespace=cpu-example
扩展:
k8s中的CPU 单位
CPU 资源以 CPU 单位度量。Kubernetes 中的一个 CPU 等同于:
- 1 个 AWS vCPU
- 1 个 GCP核心
- 1 个 Azure vCore
- 裸机上具有超线程能力的英特尔处理器上的 1 个超线程
一个请求 0.5 CPU 的容器保证会获得请求 1 个 CPU 的容器的 CPU 的一半,可以使用后缀 m
表示毫。
例如 100m
CPU、100 milliCPU 和 0.1 CPU 都相同, 精度不能超过 1m。
CPU 请求只能使用绝对数量,而不是相对数量。0.1 在单核、双核或 48 核计算机上的 CPU 数量值是一样的。