K8S支持在容器界别设置Request和Limit来约束容器所使用的CPU和Memory。
下图单位:
m为minicore
cpu: “1000m” = “1core”
三种QOS设置类别的POD以及相应踢出决策。
查看本机节点名称
kubectl get node
查看本机节点与运行POD的详情
kubectl describe node node_name
#找到Capacity, CPU, Memory, PODs数量, 已启动的POD的资源使用与限制。
注意:本文件仅为样例文件,如需发布,需要configmap文章中的所有yml文件。
petclinic-deployment.yml文件样例修改。
注意resources为新增配置。
apiVersion: apps/v1
kind: Deployment
metadata:
name: petclinic
spec:
replicas: 1
selector:
matchLabels:
app: petclinic
template:
metadata:
labels:
app: petclinic
spec:
containers:
- name: petclinic
# Run this image
image: spring2go/spring-petclinic:1.0.0.RELEASE
resources:
requests:
memory: "128Mi"
# 200 minicore, 1000m = 1core
cpu: "200m"
limits:
memory: "512Mi"
envFrom:
- configMapRef:
name: petclinic-config
---
apiVersion: v1
kind: Service
metadata:
# Unique key of the Service instance
name: petclinic
spec:
ports:
# Accept traffic sent to port 80
- name: http
# port为集群内部服务前通信的端口
port: 8080
targetPort: 8080
nodePort: 31080
selector:
# 下面标签app: petclinic表示本服务会路由指向所有app标签为petclinic的pod。
app: petclinic
type: NodePort
与其他文件搭配发布。需要此文档中的YAML文件一起发布。
可以再次查看节点详情。
查看本机节点名称
kubectl get node
查看本机节点与运行POD的详情
kubectl describe node node_name
#找到Capacity, CPU, Memory, PODs数量, 已启动的POD的资源使用与限制。
下面命令用于删除与当前路径下yml文件对应的POD/Service。
kubectl detele -f .
petclinic-deployment.yml文件样例修改。
修改位置:
启动5个POD,每个容器启动的时候都需要1个G的内存。总量接近5个G,实际上本NODE只给了4G内存。
apiVersion: apps/v1
kind: Deployment
metadata:
name: petclinic
spec:
replicas: 5
selector:
matchLabels:
app: petclinic
template:
metadata:
labels:
app: petclinic
spec:
containers:
- name: petclinic
# Run this image
image: spring2go/spring-petclinic:1.0.0.RELEASE
resources:
requests:
memory: "1024Mi"
# 200 minicore, 1000m = 1core
cpu: "200m"
limits:
memory: "1024Mi"
envFrom:
- configMapRef:
name: petclinic-config
---
apiVersion: v1
kind: Service
metadata:
# Unique key of the Service instance
name: petclinic
spec:
ports:
# Accept traffic sent to port 80
- name: http
# port为集群内部服务前通信的端口
port: 8080
targetPort: 8080
nodePort: 31080
selector:
# 下面标签app: petclinic表示本服务会路由指向所有app标签为petclinic的pod。
app: petclinic
type: NodePort
发布服务之后,查看POD。
kubectl get po
发现pending状态的POD。由于节点内存不够,所以一直pending。
查看本机节点名称
kubectl get node
查看本机节点与运行POD的详情
kubectl describe node node_name
#找到Capacity, CPU, Memory, PODs数量, 已启动的POD的资源使用与限制。
下面命令用于删除与当前路径下yml文件对应的POD/Service。
kubectl detele -f .
petclinic-deployment.yml文件样例修改。
修改位置:
启动5个POD,每个容器启动的时候都需要1个G的内存。总量接近5个G,实际上本NODE只给了4G内存。
apiVersion: apps/v1
kind: Deployment
metadata:
name: petclinic
spec:
replicas: 1
selector:
matchLabels:
app: petclinic
template:
metadata:
labels:
app: petclinic
spec:
containers:
- name: petclinic
# Run this image
image: spring2go/spring-petclinic:1.0.0.RELEASE
resources:
requests:
memory: "20Mi"
# 200 minicore, 1000m = 1core
cpu: "200m"
limits:
memory: "20Mi"
envFrom:
- configMapRef:
name: petclinic-config
---
apiVersion: v1
kind: Service
metadata:
# Unique key of the Service instance
name: petclinic
spec:
ports:
# Accept traffic sent to port 80
- name: http
# port为集群内部服务前通信的端口
port: 8080
targetPort: 8080
nodePort: 31080
selector:
# 下面标签app: petclinic表示本服务会路由指向所有app标签为petclinic的pod。
app: petclinic
type: NodePort
发布服务之后,查看POD。
kubectl get po
#发现CrashLoopBackOff状态的POD。Restarts次数为1。因为该应用本身需要的运行内存大于20兆。
kubectl get po
#发现OOMKilled状态的POD。Restarts次数为2。K8S Limit生效,将POD Kill掉。
环境清理。
下面命令用于删除与当前路径下yml文件对应的deployment/Service。
kubectl detele -f .