[kubernetes]8-2 Resources---多维度集群资源管理(上)

 

8-2 Resources---多维度集群资源管理(上)

Resources包括

CPU

GPU

内存

持久化存储

 

 

 

核心设计

requests 表示容器可以分配到的可以保障的内存值

limits 表示容器可以使用的资源上限

 

 

测试resource

 

cd /opt/kubernetes/2-resourse

 

创建 web-dev.yaml 

memory 一定要带上单位Mi 否则默认是字节数

cpu 一定要带上m,不带的话默认是cpu个数,100m=0.1 核心

#deploy
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-demo
  namespace: dev
spec:
  selector:
    matchLabels:
      app: web-demo
  replicas: 1
  template:
    metadata:
      labels:
        app: web-demo
    spec:
      containers:
      - name: web-demo
        image: harbor.pdabc.com/kubernetes/web:v3
        ports:
        - containerPort: 8080
        resources:
          requests:
            memory: 100Mi
            cpu: 100m
          limits:
            memory: 100Mi
            cpu: 200m
---
#service
apiVersion: v1
kind: Service
metadata:
  name: web-demo
  namespace: dev
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 8080
  selector:
    app: web-demo
  type: ClusterIP


---
#ingress
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: web-demo
  namespace: dev
spec:
  rules:
  - host: web-dev.pdabc.com
    http:
      paths:
      - path: /
        backend:
          serviceName: web-demo
          servicePort: 80

 

应用yaml

kubectl  apply -f web-dev.yaml 

 

 

 

查看资源用量

kubectl  describe node  kubernetes-node-02

 

修改web-dev.yaml里cpu和内存的大小 会导致pod重启

隔离机制 需要重启dokcer

 

通过kubectl  get pods -n dev -o wide 找到pod所在的node

 

并到node上查看web-demo的docker容器信息

docker ps |grep web-demo

docker inspect 5ebc244ee32a

 

            "CpuShares": 102, #100/1000*1024=102.4

            "Memory": 1048576000, #自己数 1000*1024*41024

            "CpuPeriod": 100000,

           "CpuQuota": 20000, 0.2*100000 #表示在100毫秒内 最多分配给容器的cpu的量是这些

 

修改web-dev.yaml 到原有配置

kubectl  apply -f web-dev.yaml

 

新启动pod之后查看对应pod在哪个node上 并通过命令登录

docker exec -it 07c080ae2ae6  bash

创建一个脚本 test.sh测试内存限制是否生效

#!/bin/bash


str="[kubernetes-node-03]"
while  [ TRUE ]
do
  str="$str+$str"
  echo "+++"
  sleep 0.1


done

 

 

启动test.sh 发现test.sh 被系统杀掉了,其余程序还在,容器并没有退出。说明并没有重启容器

sh test.sh

 

测试修改pod下resource的limits的cpu和内存 超过node的资源配额 发现也可以成功启动

说明服务的调度 并不受limits的影响。

修改部分如下

        resources:
          requests:
            memory: 100Mi
            cpu: 100m
          limits:
            memory: 100Gi
            cpu: 20000m

测试修改pod下resource的requests的cpu或内存 超过node的资源配额 。发现pod都会启动不起来。一直处于pending状态。

修改部分如下

        resources:
          requests:
            memory: 20Gi
            cpu: 100m
          limits:
            memory: 100Gi
            cpu: 20000m

 

 

通过命令查看pod处于pending状态的报错原因

kubectl describe -n dev  pod web-demo-58b967d86c-9nwkk

 

测试内存的另一种情况

1 配置文件修改如下

        resources:
          requests:
            memory: 6Gi
            cpu: 100m
          limits:
            memory: 100Gi
            cpu: 20000m

启动成功

2 修改replicas的值为6 并apply

 

 

kubectl  get pods -n dev  -o wide

正好一台node一个 为了确保node有足够的request内存 剩余pod不允许创建在node上

 

模拟cpu超出request的情况

  replicas: 1
  template:
    metadata:
      labels:
        app: web-demo
    spec:
      containers:
      - name: web-demo
        image: harbor.pdabc.com/kubernetes/web:v3
        ports:
        - containerPort: 8080
        resources:
          requests:
            memory: 1Gi
            cpu: 100m
          limits:
            memory: 100Gi
            cpu: 4000m

查看pod在哪台机子上启动了

kubectl  get pods -n dev  -o wide

查看容器的cpu使用情况

docker stats bc91880f4058

老样子进入容器 执行dd if=/dev/zero of=/dev/null & 逐渐增加cpu的负载

docker exec -it bc91880f4058 bash

 

 

 

增加一个差不多增加70%-100%负载 但是cpu到了390%+之后在增加就没有效果了

 

cpu超了 不会把进程杀掉,因为cpu是可压缩资源。

测试完pkill dd 杀死测试的命令

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爷来辣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值