k8s限制pod的资源使用

限制pod的资源使用

创建命名空间

kubectl create namespace mem-example

在这里插入图片描述

创建带有限制的命名空间

现在如果在 default-mem-example 命名空间中创建一个 Pod, 并且该 Pod 中所有容器都没有声明自己的内存请求和内存限制, 控制面会将内存的默认请求值 256MiB 和默认限制值 512MiB 应用到 Pod 上

在这里插入图片描述

1、先创建命名空间
kubectl create namespace default-mem-example

2、创建限制范围,限制使用的内存(默认和最大)
[root@master pod]# cat default-men.yaml 
apiVersion: v1
kind: LimitRange
metadata:
  name: mem-limit-range
  namespace: default-mem-example
spec:
  limits:
  - default:
      memory: 512Mi
    defaultRequest:
      memory: 256Mi
    type: Container

kubectl apply -f default-men.yaml 

3、创建pod绑定到命名空间上
[root@master pod]# cat limit-pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: default-mem-demo
  namespace: default-mem-example
spec:
  containers:
  - name: default-mem-demo-ctr
    image: nginx

这个时候要查看指定命名空间里的pod
kubectl get pod -n default-mem-example
查看详细信息也要指定命名空间
kubectl describe pod default-mem-demo -n default-mem-example

在这里插入图片描述

在这里插入图片描述

为容器和 Pod 分配内存资源

[root@master pod]# cat limit-pod-2.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: memory-demo
  namespace: mem-example
spec:
  containers:
  - name: memory-demo-ctr
    image: polinux/stress
    resources:
      requests:    # 请求的资源限制,分配的资源必须达到这个要求
        memory: "100Mi"    # 最少100M
      limits:    # 最多请求多少资源
        memory: "200Mi"    # 最多200M
    command: ["stress"]
    args: ["--vm", "1", "--vm-bytes", "150M", "--vm-hang", "1"]

OOMKilled:out of memory 使用的内存超出了范围被kill了

[root@master pod]# kubectl apply -f limit-pod-3.yaml 
pod/memory-demo-2 unchanged
[root@master pod]# cat limit-pod-3.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: memory-demo-2
  namespace: mem-example
spec:
  containers:
  - name: memory-demo-2-ctr
    image: polinux/stress
    resources:
      requests:
        memory: "50Mi"
      limits:
        memory: "100Mi"
    command: ["stress"]
    args: ["--vm", "1", "--vm-bytes", "250M", "--vm-hang", "1"]
[root@master pod]# kubectl apply -f limit-pod-3.yaml 
pod/memory-demo-2 created
[root@master pod]# kubectl get pod -n mem-example
NAME            READY   STATUS      RESTARTS   AGE
memory-demo     1/1     Running     0          29m
memory-demo-2   0/1     OOMKilled   0          27s
[root@master pod]# kubectl get pod -n mem-example
NAME            READY   STATUS             RESTARTS   AGE
memory-demo     1/1     Running            0          31m
memory-demo-2   0/1     CrashLoopBackOff   3          116s

Kubernetes (k8s) 中,获取Pod资源使用情况通常涉及到Kubernetes API和客户端库,比如官方推荐的`kubectl`命令行工具或者更高级的编程式API调用,如Kubernetes client for Java。 如果你想通过`kubectl`命令获取Pod资源使用情况,可以运行以下命令: ```bash kubectl get pods -o json | jq '.items[].status.podIP | .containerStatuses[].resources.requests[] | select(.name == "resource_name") | .name + ": " + .limit' ``` 这里替换`"resource_name"`为你关心的具体资源(例如内存、CPU等),这会显示每个Pod对指定资源的请求量和限制值。 如果你在Java应用程序中操作,可以使用Kubernetes的client-go库来动态查询Pod资源。首先,你需要设置kubeconfig文件并创建一个KubernetesClient实例,然后使用`listPodForAllNamespaces`或`getPod`方法,并解析响应获取所需资源信息。 下面是一个简单的Java示例(使用kubernetes-client库,但请注意实际项目中可能需要引入更多依赖): ```java import io.kubernetes.client.openapi.ApiClient; import io.kubernetes.client.openapi.Configuration; import io.kubernetes.client.openapi.apis.CoreV1Api; public class KubeResourceUsage { private static final String NAMESPACE = "default"; private static final String POD_NAME = "your-pod-name"; public static void main(String[] args) throws Exception { ApiClient client = Configuration.defaultClient(); CoreV1Api coreV1Api = new CoreV1Api(client); // 获取Pod对象 V1Pod pod = coreV1Api.readNamespacedPod(POD_NAME, NAMESPACE, null); // 遍历Pod容器 for (V1Container container : pod.getSpec().getContainers()) { // 获取资源请求和限制 Map<String, Quantity> requestsAndLimits = container.getResources(); for (Map.Entry<String, Quantity> entry : requestsAndLimits.entrySet()) { System.out.println("Resource Name: " + entry.getKey() + ", Request: " + entry.getValue()); if (requestsAndLimits.containsKey(entry.getKey() + ".limits")) { System.out.println("Resource Limit: " + requestsAndLimits.get(entry.getKey() + ".limits")); } } } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值