胡扯一下
今天是周末,捋一捋k8s资源方面的一些事情,最近也在面试,k8s的问题是真的多。
根据目前我的知识储备,感觉k8s的资源管理分为两大类:预防和应急。预防就是提供给用户手段,让你尽可能的控制资源的使用。应急可以理解为兜底,也是最后的屏障了,当预防的手段没有预防好,就要使用应急手段了。
预防手段
在k8s中资源的使用对象是pod。k8s为pod提供了request和limit的手段来限制资源的使用情况。
- request表示pod启动时,要申请的资源数
- limit表示pod最终能使用的资源数
举个例子,下面的例子是对内存做了限制
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"]
以request和limit为基础,k8s又提供了limitRange和resourceQuota两个对象,可以让用户更方便的控制资源
- limitRange便于用户控制怎么定义request和limits,比如默认值,最大占比等
- resourceQuota设置一个用户最多能使用的资源
应急手段
k8s的应急手段就是资源回收和驱逐,大致就是回收一些不用的东西比如镜像文件或者是exit状态的容器。如果还不满足条件,就进去了驱逐阶段,把一些pod清除了。
pod被驱逐以后还会再重启,如果还是重启到这个节点岂不是再次触发驱逐,这一点有待考究?
先写到这里了,去峡谷转悠一下去