Kubernetes Pod与NameSpace资源限制
一、kubernetes资源限制
1.1、kubernetes资源限制概况
如果运行的容器没有定义资源(memory、CPU)等限制,那么该容器可以使用宿主机的最大可用资源,直到无资源可用而触发宿主机(OOM Killer),为保证容器资源合理利用,需要在namespace定义LimitRange等限制,这样容器会继承LimitRange中的默认限制。
1.如果运行的容器没有定义资源(memory、 CPU)等限制, 但是在namespace定义了LimitRange限制, 那么该容器会继承LimitRange中的默认限制。
2.如果namespace没有定义LimitRange限制, 那么该容器可以只要宿主机的最大可用资源, 直到无资源可用而触发宿主机(OOM Killer)。
https://kubernetes.io/zh/docs/tasks/configure-pod-container/assign-cpu-resource/
CPU 以核心为单位进行限制, 单位可以是整核、 浮点核心数或毫核(m/milli):
2=2核心=200% 0.5=500m=50% 1.2=1200m=120%
https://kubernetes.io/zh/docs/tasks/configure-pod-container/assign-memory-resource/
memory 以字节为单位,单位可以是E、 P、 T、 G、 M、 K、 Ei、 Pi、 Ti、 Gi、 Mi、 Ki
1536Mi=1.5Gi
requests(请求)为kubernetes scheduler执行pod调度时node节点至少需要拥有的资源。
limits(限制)为pod运行成功后最多可以使用的资源上限。
kubernetes对单个容器的CPU及memory实现资源限制
1.2、对单个容器的memory资源限制
root@easzlab-deploy:~/20220821-case/20220821/magedu-limit-case# vi case1-pod-memory-limit.yml root@easzlab-deploy:~/20220821-case/20220821/magedu-limit-case# cat case1-pod-memory-limit.yml #apiVersion: extensions/v1beta1 apiVersion: apps/v1 kind: Deployment metadata: name: limit-test-deployment namespace: magedu spec: replicas: 1 selector: matchLabels: #rs or deployment app: limit-test-pod # matchExpressions: # - {key: app, operator: In, values: [ng-deploy-80,ng-rs-81]} template: metadata: labels: app: limit-test-pod spec: containers: - name: limit-test-container image: lorel/docker-stress-ng resources: limits: memory: "1024Mi" requests: memory: "1024Mi" #command: ["stress"] args: ["--vm", "3", "--vm-bytes", "256M"] #nodeSelector: # env: group1 root@easzlab-deploy:~/20220821-case/20220821/magedu-limit-case# kubectl apply -f case1-pod-memory-limit.yml
describe 看已生效
top查看也限制在1G以下
dashboard查看
1.3、对单个容器的CPU及memory资源限制
cat case2-pod-memory-and-cpu-limit.yml
#apiVersion: extensions/v1beta1 apiVersion: apps/v1 kind: Deployment metadata: name: limit-test-deployment namespace: magedu spec: replicas: 1 selector: matchLabels: #rs or deployment app: limit-test-pod # matchExpressions: # - {key: app, operator: In, values: [ng-deploy-80,ng-rs-81]} template: metadata: labels: app: limit-test-pod spec: containers: - name: limit-test-container image: lorel/docker-stress-ng resources: limits: cpu: "2" memory: "512Mi" requests: memory: "512M" cpu: "2" #command: ["stress"] args: ["--vm", "3", "--vm-bytes", "256M"] #nodeSelector: # env: group1
top查看pod cpu、memory已经限制在2000毫核、512M范围
二、对namespace进行资源限制
2.1、通过LimitRange对namespace进行限制
- 限制namespace中每个Pod或容器的最小与最大计算资源
- 限制namespace中每个Pod或容器计算资源request、limit之间的比例
- 限制namespace中每个存储卷声明(PersistentVolumeClaim)可使用的最小与最大存储空间
- 设置namespace中容器默认计算资源的request、limit,并在运行时自动注入到容器中
cat case3-LimitRange.yaml
apiVersion: v1 kind: LimitRange metadata: name: limitrange-magedu namespace: magedu spec: limits: - type: Container #限制的资源类型 max: cpu: "2" #限制单个容器的最大CPU memory: "2Gi" #限制单个容器的最大内存 min: cpu: "500m" #限制单个容器的最小CPU memory: "512Mi" #限制单个容器的最小内存 default: cpu: "500m" #默认单个容器的CPU限制 memory: "512Mi" #默认单个容器的内存限制 defaultRequest: cpu: "500m" #默认单个容器的CPU创建请求 memory: "512Mi" #默认单个容器的内存创建请求 maxLimitRequestRatio: cpu: 2 #限制CPU limit/request比值最大为2 memory: 2 #限制内存limit/request比值最大为1.5 - type: Pod max: cpu: "4" #限制单个Pod的最大CPU memory: "4Gi" #限制单个Pod最大内存 - type: PersistentVolumeClaim max: storage: 50Gi #限制PVC最大的requests.storage min: storage: 30Gi #限制PVC最小的requests.storage
2.2、对cpu与内存RequestRatio比例限制
因为命名空间做了最大请求资源限制,当创建的pod 请超出最大范围时,pod无法创建成功
cat case4-pod-RequestRatio-limit.yaml
kind: Deployment apiVersion: apps/v1 metadata: labels: app: magedu-wordpress-deployment-label name: magedu-wordpress-deployment namespace: magedu spec: replicas: 1 selector: matchLabels: app: magedu-wordpress-selector template: metadata: labels: app: magedu-wordpress-selector spec: containers: - name: magedu-wordpress-nginx-container image: nginx:1.16.1 imagePullPolicy: Always ports: - containerPort: 80 protocol: TCP name: http env: - name: "password" value: "123456" - name: "age" value: "18" resources: limits: cpu: 1.5 #此时1.5超出requests请求数512m 2倍数值正常范围 memory: 1Gi requests: cpu: 512m memory: 512Mi - name: magedu-wordpress-php-container image: php:5.6-fpm-alpine imagePullPolicy: Always ports: - containerPort: 80 protocol: TCP name: http env: - name: "password" value: "123456" - name: "age" value: "18" resources: limits: cpu: 3 #cpu: 2 memory: 1Gi requests: cpu: 2000m memory: 512Mi --- kind: Service apiVersion: v1 metadata: labels: app: magedu-wordpress-service-label name: magedu-wordpress-service namespace: magedu spec: type: NodePort ports: - name: http port: 80 protocol: TCP targetPort: 8080 nodePort: 30033 selector: app: magedu-wordpress-selector
创建并观察pod与deployment,此时pod无法被创建,deployment ready个数为0
通过kubectl get deployments magedu-wordpress-deployment -n magedu -ojson 可以查看相关详情,发现有资源被限制提示~
root@easzlab-deploy:~/20220821-case/20220821/magedu-limit-case# kubectl get deployment -n magedu magedu-wordpress-deployment -ojson { "apiVersion": "apps/v1", "kind": "Deployment", "metadata": { "annotations": { "deployment.kubernetes.io/revision": "2", "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"apps/v1\",\"kind\":\"Deployment\",\"metadata\":{\"annotations\":{},\"labels\":{\"app\":\"magedu-wordpress-deployment-label\"},\"name\":\"magedu-wordpress-deployment\",\"namespace\":\"magedu\"},\"spec\":{\"replicas\":3,\"selector\":{\"matchLabels\":{\"app\":\"magedu-wordpress-selector\"}},\"template\":{\"metadata\":{\"labels\":{\"app\":\"magedu-wordpress-selector\"}},\"spec\":{\"containers\":[{\"env\":[{\"name\":\"password\",\"value\":\"123456\"},{\"name\":\"age\",\"value\":\"18\"}],\"image\":\"nginx:1.16.1\",\"imagePullPolicy\":\"Always\",\"name\":\"magedu-wordpress-nginx-container\",\"ports\":[{\"containerPort\":80,\"name\":\"http\",\"protocol\":\"TCP\"}],\"resources\":{\"limits\":{\"cpu\":1.5,\"memory\":\"1Gi\"},\"requests\":{\"cpu\":\"512m\",\"memory\":\"512Mi\"}}},{\"env\":[{\"name\":\"password\",\"value\":\"123456\"},{\"name\":\"age\",\"value\":\"18\"}],\"image\":\"php:5.6-fpm-alpine\",\"imagePullPolicy\":\"Always\",\"name\":\"magedu-wordpress-php-container\",\"ports\":[{\"containerPort\":80,\"name\":\"http\",\"protocol\":\"TCP\"}],\"resources\":{\"limits\":{\"cpu\":2,\"memory\":\"1Gi\"},\"requests\":{\"cpu\":\"2000m\",\"memory\":\"512Mi\"}}}]}}}}\n" }, "creationTimestamp": "2022-08-25T14:58:59Z", "generation": 2, "labels": { "app": "magedu-wordpress-deployment-label" }, "name": "magedu-wordpress-deployment", "namespace": "magedu", "resourceVersion": "5424603", "uid": "23be6ba8-003e-4454-9490-77e41af3220b" }, "spec": { "progressDeadlineSeconds": 600, "replicas": 3, "revisionHistoryLimit": 10, "selector": { "matchLabels": { "app": "magedu-wordpress-selector" } }, "strategy": { "rollingUpdate": { "maxSurge": "25%", "maxUnavailable": "25%" }, "type": "RollingUpdate" }, "template": { "metadata": { "creationTimestamp": null, "labels": { "app": "magedu-wordpress-selector" } }, "spec": { "containers": [ { "env": [ { "name": "password", "value": "123456" }, { "name": "age", "value": "18" } ], "image": "nginx:1.16.1", "imagePullPolicy": "Always", "name": "magedu-wordpress-nginx-container", "ports": [ { "containerPort": 80, "name": "http", "protocol": "TCP" } ], "resources": { "limits": { "cpu": "1500m", "memory": "1Gi" }, "requests": { "cpu": "512m", "memory": "512Mi" } }, "terminationMessagePath": "/dev/termination-log", "terminationMessagePolicy": "File" }, { "env": [ { "name": "password", "value": "123456" }, { "name": "age", "value": "18" } ], "image": "php:5.6-fpm-alpine", "imagePullPolicy": "Always", "name": "magedu-wordpress-php-container", "ports": [ { "containerPort": 80, "name": "http", "protocol": "TCP" } ], "resources": { "limits": { "cpu": "2", "memory": "1Gi" }, "requests": { "cpu": "2", "memory": "512Mi" } }, "terminationMessagePath": "/dev/termination-log", "terminationMessagePolicy": "File" } ], "dnsPolicy": "ClusterFirst", "restartPolicy": "Always", "schedulerName": "default-scheduler", "securityContext": {}, "terminationGracePeriodSeconds": 30 } } }, "status": { "conditions": [ { "lastTransitionTime": "2022-08-25T14:58:59Z", "lastUpdateTime": "2022-08-25T14:58:59Z", "message": "Deployment does not have minimum availability.", "reason": "MinimumReplicasUnavailable", "status": "False", "type": "Available" }, { "lastTransitionTime": "2022-08-25T14:58:59Z", "lastUpdateTime": "2022-08-25T14:58:59Z", "message": "pods \"magedu-wordpress-deployment-564d449cb-vncg9\" is forbidden: [maximum cpu usage per Container is 2, but limit is 2500m, cpu max limit to request ratio per Container is 2, but provided ratio is 3.125000, maximum cpu usage per Container is 2, but limit is 3, maximum cpu usage per Pod is 4, but limit is 5500m]", "reason": "FailedCreate", "status": "True", "type": "ReplicaFailure" }, { "lastTransitionTime": "2022-08-25T15:22:42Z", "lastUpdateTime": "2022-08-25T15:22:42Z", "message": "Created new replica set \"magedu-wordpress-deployment-7f8fd59b68\"", "reason": "NewReplicaSetCreated", "status": "True", "type": "Progressing" } ], "observedGeneration": 2, "unavailableReplicas": 4 } } root@easzlab-deploy:~/20220821-case/20220821/magedu-limit-case#
当cpu 512m 设置为800m ,2*800m=1600m 大于resource cpu 限制1.5,小于命名空间限制数值2,pod被正常创建
cat case5-pod-cpu-limit.yaml
kind: Deployment apiVersion: apps/v1 metadata: labels: app: magedu-wordpress-deployment-label name: magedu-wordpress-deployment namespace: magedu spec: replicas: 1 selector: matchLabels: app: magedu-wordpress-selector template: metadata: labels: app: magedu-wordpress-selector spec: containers: - name: magedu-wordpress-nginx-container image: nginx:1.16.1 imagePullPolicy: Always ports: - containerPort: 80 protocol: TCP name: http env: - name: "password" value: "123456" - name: "age" value: "18" resources: limits: cpu: 1.5 memory: 1Gi requests: cpu: 800m memory: 512Mi - name: magedu-wordpress-php-container image: php:5.6-fpm-alpine imagePullPolicy: Always ports: - containerPort: 80 protocol: TCP name: http env: - name: "password" value: "123456" - name: "age" value: "18" resources: limits: cpu: 2.8 #cpu: 2 memory: 1Gi requests: cpu: 1.5 memory: 512Mi --- kind: Service apiVersion: v1 metadata: labels: app: magedu-wordpress-service-label name: magedu-wordpress-service namespace: magedu spec: type: NodePort ports: - name: http port: 80 protocol: TCP targetPort: 8080 nodePort: 30033 selector: app: magedu-wordpress-selector
查看资源限制及pod创建
root@easzlab-deploy:~/20220821-case/20220821/magedu-limit-case# grep -A 5 limits case4-pod-RequestRatio-limit.yaml limits: cpu: 1.5 memory: 1Gi requests: cpu: 512m memory: 512Mi -- limits: cpu: 2 #cpu: 2 memory: 1Gi requests: cpu: 2000m root@easzlab-deploy:~/20220821-case/20220821/magedu-limit-case# kubectl get pod -n magedu NAME READY STATUS RESTARTS AGE deploy-devops-redis-69f975f65d-nmmdk 1/1 Running 0 5d6h limit-test-deployment-6b84745dc8-cxbfb 1/1 Running 2 (8h ago) 2d8h magedu-tomcat-app1-deployment-68b54f67d4-8sfff 2/2 Running 20 (15m ago) 13h magedu-tomcat-app1-deployment-68b54f67d4-crkdt 2/2 Running 21 (14m ago) 13h magedu-tomcat-app1-deployment-68b54f67d4-q45fq 2/2 Running 19 (17m ago) 13h mysql-0 2/2 Running 0 2d23h mysql-1 2/2 Running 0 2d23h mysql-2 2/2 Running 0 2d23h redis-0 1/1 Running 0 4d23h redis-1 1/1 Running 0 4d23h redis-2 1/1 Running 0 4d23h redis-3 1/1 Running 0 4d23h redis-4 1/1 Running 0 4d23h redis-5 1/1 Running 0 4d23h root@easzlab-deploy:~/20220821-case/20220821/magedu-limit-case# kubectl get deployments -n magedu NAME READY UP-TO-DATE AVAILABLE AGE deploy-devops-redis 1/1 1 1 5d6h limit-test-deployment 1/1 1 1 2d8h magedu-tomcat-app1-deployment 3/3 3 3 13h magedu-wordpress-deployment 0/3 0 0 29m root@easzlab-deploy:~/20220821-case/20220821/magedu-limit-case# vi case4-pod-RequestRatio-limit.yaml root@easzlab-deploy:~/20220821-case/20220821/magedu-limit-case# grep -A 5 limits case5-pod-cpu-limit.yaml limits: cpu: 1.5 memory: 1Gi requests: cpu: 800m memory: 512Mi -- limits: cpu: 2 #cpu: 2 memory: 1Gi requests: cpu: 2000m root@easzlab-deploy:~/20220821-case/20220821/magedu-limit-case# kubectl apply -f case5-pod-cpu-limit.yaml deployment.apps/magedu-wordpress-deployment configured service/magedu-wordpress-service unchanged root@easzlab-deploy:~/20220821-case/20220821/magedu-limit-case# kubectl get deployments -n magedu NAME READY UP-TO-DATE AVAILABLE AGE deploy-devops-redis 1/1 1 1 5d6h limit-test-deployment 1/1 1 1 2d8h magedu-tomcat-app1-deployment 3/3 3 3 13h magedu-wordpress-deployment 3/3 3 3 30m root@easzlab-deploy:~/20220821-case/20220821/magedu-limit-case# kubectl get pod -n magedu NAME READY STATUS RESTARTS AGE deploy-devops-redis-69f975f65d-nmmdk 1/1 Running 0 5d6h limit-test-deployment-6b84745dc8-cxbfb 1/1 Running 2 (8h ago) 2d8h magedu-tomcat-app1-deployment-68b54f67d4-8sfff 2/2 Running 20 (17m ago) 13h magedu-tomcat-app1-deployment-68b54f67d4-crkdt 2/2 Running 21 (16m ago) 13h magedu-tomcat-app1-deployment-68b54f67d4-q45fq 2/2 Running 19 (19m ago) 13h magedu-wordpress-deployment-67598dcbc6-7q7zd 2/2 Running 0 26s magedu-wordpress-deployment-67598dcbc6-bb7d4 2/2 Running 0 34s magedu-wordpress-deployment-67598dcbc6-qbbn4 2/2 Running 0 45s mysql-0 2/2 Running 0 2d23h mysql-1 2/2 Running 0 2d23h mysql-2 2/2 Running 0 2d23h redis-0 1/1 Running 0 4d23h redis-1 1/1 Running 0 4d23h redis-2 1/1 Running 0 4d23h redis-3 1/1 Running 0 4d23h redis-4 1/1 Running 0 4d23h redis-5 1/1 Running 0 4d23h root@easzlab-deploy:~/20220821-case/20220821/magedu-limit-case#
2.3、限定某个对象类型(pod、service)可创建的总数
清掉之前设置的环境参数,保持一个干净的环境
kubectl delete -f case1-pod-memory-limit.yml -f case2-pod-memory-and-cpu-limit.yml
kubectl delete -f case4-pod-RequestRatio-limit.yaml case5-pod-cpu-limit.yaml
cat case6-ResourceQuota-magedu.yaml
apiVersion: v1 kind: ResourceQuota metadata: name: quota-magedu namespace: magedu spec: hard: requests.cpu: "8" limits.cpu: "8" requests.memory: 8Gi limits.memory: 8Gi requests.nvidia.com/gpu: 4 pods: "6" services: "6"
2.4、对后期创建pod个数做限制
创建pod测试
cat case7-namespace-pod-limit-test.yaml
kind: Deployment apiVersion: apps/v1 metadata: labels: app: magedu-nginx-deployment-label name: magedu-nginx-deployment namespace: magedu spec: replicas: 1 selector: matchLabels: app: magedu-nginx-selector template: metadata: labels: app: magedu-nginx-selector spec: containers: - name: magedu-nginx-container image: nginx:1.16.1 imagePullPolicy: Always ports: - containerPort: 80 protocol: TCP name: http env: - name: "password" value: "123456" - name: "age" value: "18" resources: limits: cpu: 1 memory: 1Gi requests: cpu: 500m memory: 512Mi --- kind: Service apiVersion: v1 metadata: labels: app: magedu-nginx-service-label name: magedu-nginx-service namespace: magedu spec: type: NodePort ports: - name: http port: 80 protocol: TCP targetPort: 8080 nodePort: 30033 selector: app: magedu-nginx-selector
此时创建pod失败,提示超出资源限制请求,pod个数已经被占用
修改magedu namespace资源限制
root@easzlab-deploy:~/20220821-case/20220821/magedu-limit-case# vi case6-ResourceQuota-magedu.yaml root@easzlab-deploy:~/20220821-case/20220821/magedu-limit-case# cat case6-ResourceQuota-magedu.yaml apiVersion: v1 kind: ResourceQuota metadata: name: quota-magedu namespace: magedu spec: hard: requests.cpu: "20" limits.cpu: "20" requests.memory: 20Gi limits.memory: 20Gi requests.nvidia.com/gpu: 10 pods: "20" services: "20" root@easzlab-deploy:~/20220821-case/20220821/magedu-limit-case# kubectl apply -f case6-ResourceQuota-magedu.yaml resourcequota/quota-magedu configured root@easzlab-deploy:~/20220821-case/20220821/magedu-limit-case# kubectl describe ns -n magedu magedu Name: magedu Labels: kubernetes.io/metadata.name=magedu Annotations: <none> Status: Active Resource Quotas Name: quota-magedu Resource Used Hard -------- --- --- limits.cpu 4500m 20 limits.memory 3Gi 20Gi pods 13 20 requests.cpu 7800m 20 requests.memory 9444Mi 20Gi requests.nvidia.com/gpu 0 10 services 6 20 No LimitRange resource. root@easzlab-deploy:~/20220821-case/20220821/magedu-limit-case# root@easzlab-deploy:~/20220821-case/20220821/magedu-limit-case# kubectl apply -f case7-namespace-pod-limit-test.yaml #再次加载测试pod yaml deployment.apps/magedu-nginx-deployment configured service/magedu-nginx-service created root@easzlab-deploy:~/20220821-case/20220821/magedu-limit-case# kubectl get pod -n magedu NAME READY STATUS RESTARTS AGE deploy-devops-redis-69f975f65d-nmmdk 1/1 Running 0 5d7h magedu-nginx-deployment-658df6889f-qnqm7 1/1 Running 0 2m19s magedu-nginx-deployment-658df6889f-tntkx 1/1 Running 0 2m19s magedu-tomcat-app1-deployment-68b54f67d4-8sfff 2/2 Running 21 (2m52s ago) 14h magedu-tomcat-app1-deployment-68b54f67d4-crkdt 2/2 Running 22 (21m ago) 14h magedu-tomcat-app1-deployment-68b54f67d4-q45fq 2/2 Running 22 (14m ago) 14h mysql-0 2/2 Running 0 3d mysql-1 2/2 Running 0 3d mysql-2 2/2 Running 0 3d redis-0 1/1 Running 0 5d redis-1 1/1 Running 0 5d redis-2 1/1 Running 0 5d redis-3 1/1 Running 0 5d redis-4 1/1 Running 0 5d redis-5 1/1 Running 0 5d root@easzlab-deploy:~/20220821-case/20220821/magedu-limit-case#
新建文件让其超出namespace限制的cpu、内存
root@easzlab-deploy:~/20220821-case/20220821/magedu-limit-case# kubectl describe ns -n magedu magedu #查看此时的namespace状况 Name: magedu Labels: kubernetes.io/metadata.name=magedu Annotations: <none> Status: Active Resource Quotas Name: quota-magedu Resource Used Hard -------- --- --- limits.cpu 6500m 20 limits.memory 5Gi 20Gi pods 15 20 requests.cpu 8800m 20 requests.memory 10468Mi 20Gi requests.nvidia.com/gpu 0 10 services 7 20 No LimitRange resource. root@easzlab-deploy:~/20220821-case/20220821/magedu-limit-case# vi case8-namespace-cpu-limit-test.yaml #编写测试pod yaml文件 root@easzlab-deploy:~/20220821-case/20220821/magedu-limit-case# cat case8-namespace-cpu-limit-test.yaml kind: Deployment apiVersion: apps/v1 metadata: labels: app: magedu-nginx-deployment-label name: magedu-nginx-deployment namespace: magedu spec: replicas: 3 selector: matchLabels: app: magedu-nginx-selector template: metadata: labels: app: magedu-nginx-selector spec: containers: - name: magedu-nginx-container image: nginx:1.16.1 imagePullPolicy: Always ports: - containerPort: 80 protocol: TCP name: http env: - name: "password" value: "123456" - name: "age" value: "18" resources: limits: cpu: 8 memory: 4Gi requests: cpu: 4 memory: 4Gi --- kind: Service apiVersion: v1 metadata: labels: app: magedu-nginx-service-label name: magedu-nginx-service namespace: magedu spec: type: NodePort ports: - name: http port: 80 protocol: TCP targetPort: 8080 nodePort: 30033 selector: app: magedu-nginx-selector root@easzlab-deploy:~/20220821-case/20220821/magedu-limit-case# kubectl apply -f case8-namespace-cpu-limit-test.yaml
deployment.apps/magedu-nginx-deployment configured service/magedu-nginx-service unchanged
root@eazslab-deploy:~/20220821-case/20220821/magedu-limit-case# #此时pod已经无法在创建了 root@easzlab-deploy:~/20220821-case/20220821/magedu-limit-case# kubectl get pod -n magedu NAME READY STATUS RESTARTS AGE deploy-devops-redis-69f975f65d-nmmdk 1/1 Running 0 5d7h magedu-nginx-deployment-658df6889f-tntkx 1/1 Running 0 8m41s magedu-nginx-deployment-7c8f464cfc-frplk 1/1 Running 0 41s magedu-tomcat-app1-deployment-68b54f67d4-8sfff 2/2 Running 21 (9m14s ago) 14h magedu-tomcat-app1-deployment-68b54f67d4-crkdt 2/2 Running 22 (28m ago) 14h magedu-tomcat-app1-deployment-68b54f67d4-q45fq 2/2 Running 23 (43s ago) 14h mysql-0 2/2 Running 0 3d mysql-1 2/2 Running 0 3d mysql-2 2/2 Running 0 3d redis-0 1/1 Running 0 5d redis-1 1/1 Running 0 5d redis-2 1/1 Running 0 5d redis-3 1/1 Running 0 5d redis-4 1/1 Running 0 5d redis-5 1/1 Running 0 5d root@easzlab-deploy:~/20220821-case/20220821/magedu-limit-case#
查看deployments 可以提示资源限制
kubectl get deployment -n magedu magedu-nginx-deployment -o json
root@easzlab-deploy:~/20220821-case/20220821/magedu-limit-case# kubectl get deployment -n magedu magedu-nginx-deployment -o json { "apiVersion": "apps/v1", "kind": "Deployment", "metadata": { "annotations": { "deployment.kubernetes.io/revision": "2", "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"apps/v1\",\"kind\":\"Deployment\",\"metadata\":{\"annotations\":{},\"labels\":{\"app\":\"magedu-nginx-deployment-label\"},\"name\":\"magedu-nginx-deployment\",\"namespace\":\"magedu\"},\"spec\":{\"replicas\":3,\"selector\":{\"matchLabels\":{\"app\":\"magedu-nginx-selector\"}},\"template\":{\"metadata\":{\"labels\":{\"app\":\"magedu-nginx-selector\"}},\"spec\":{\"containers\":[{\"env\":[{\"name\":\"password\",\"value\":\"123456\"},{\"name\":\"age\",\"value\":\"18\"}],\"image\":\"nginx:1.16.1\",\"imagePullPolicy\":\"Always\",\"name\":\"magedu-nginx-container\",\"ports\":[{\"containerPort\":80,\"name\":\"http\",\"protocol\":\"TCP\"}],\"resources\":{\"limits\":{\"cpu\":8,\"memory\":\"4Gi\"},\"requests\":{\"cpu\":4,\"memory\":\"4Gi\"}}}]}}}}\n" }, "creationTimestamp": "2022-08-25T16:09:16Z", "generation": 4, "labels": { "app": "magedu-nginx-deployment-label" }, "name": "magedu-nginx-deployment", "namespace": "magedu", "resourceVersion": "5435774", "uid": "7a034e10-8740-4a86-b067-3eba9549c717" }, "spec": { "progressDeadlineSeconds": 600, "replicas": 3, "revisionHistoryLimit": 10, "selector": { "matchLabels": { "app": "magedu-nginx-selector" } }, "strategy": { "rollingUpdate": { "maxSurge": "25%", "maxUnavailable": "25%" }, "type": "RollingUpdate" }, "template": { "metadata": { "creationTimestamp": null, "labels": { "app": "magedu-nginx-selector" } }, "spec": { "containers": [ { "env": [ { "name": "password", "value": "123456" }, { "name": "age", "value": "18" } ], "image": "nginx:1.16.1", "imagePullPolicy": "Always", "name": "magedu-nginx-container", "ports": [ { "containerPort": 80, "name": "http", "protocol": "TCP" } ], "resources": { "limits": { "cpu": "8", "memory": "4Gi" }, "requests": { "cpu": "4", "memory": "4Gi" } }, "terminationMessagePath": "/dev/termination-log", "terminationMessagePolicy": "File" } ], "dnsPolicy": "ClusterFirst", "restartPolicy": "Always", "schedulerName": "default-scheduler", "securityContext": {}, "terminationGracePeriodSeconds": 30 } } }, "status": { "availableReplicas": 2, "conditions": [ { "lastTransitionTime": "2022-08-25T16:20:13Z", "lastUpdateTime": "2022-08-25T16:28:19Z", "message": "ReplicaSet \"magedu-nginx-deployment-7c8f464cfc\" is progressing.", "reason": "ReplicaSetUpdated", "status": "True", "type": "Progressing" }, { "lastTransitionTime": "2022-08-25T16:28:19Z", "lastUpdateTime": "2022-08-25T16:28:19Z", "message": "pods \"magedu-nginx-deployment-7c8f464cfc-xjl7d\" is forbidden: exceeded quota: quota-magedu, requested: limits.cpu=8, used: limits.cpu=14500m, limited: limits.cpu=20", "reason": "FailedCreate", "status": "True", "type": "ReplicaFailure" }, { "lastTransitionTime": "2022-08-25T16:29:23Z", "lastUpdateTime": "2022-08-25T16:29:23Z", "message": "Deployment does not have minimum availability.", "reason": "MinimumReplicasUnavailable", "status": "False", "type": "Available" } ], "observedGeneration": 4, "readyReplicas": 2, "replicas": 2, "unavailableReplicas": 2, "updatedReplicas": 1 } } root@easzlab-deploy:~/20220821-case/20220821/magedu-limit-case#