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 杀死测试的命令