kubectl cordon nodename
kubectl uncordon nodename
之前讲过,namespace可以设定限额和默认请求资源量,这里详细说下:
kubectl create namespace limit-example
apiVersion: v1
kind: LimitRange
metadata:
name: mylimits
namespace: limit-example
spec:
limits:
- type: Pod
max:
cpu: 4
memory: 2Gi
min:
cpu: 200m
memory: 6Mi
maxLimitRequestRatio:
cpu: 3
memory: 2
- type: Container
default:
cpu: 300m
memory: 200Mi
defaultRequest:
cpu: 200m
memory: 100Mi
max:
cpu: 2
memory: 1Gi
min:
cpu: 100m
memory: 3Mi
maxLimitRequestRatio:
cpu: 5
memory: 4
解释LimitRange中spec.limits数组,可以设置Container或者Pod的资源限制,两者都可以设置max,min,maxLimitRequestRatio三种参数。容器还可以设置default和defaultRequest。这几个参数什么意思呢?
【注:cpu不加单位则是核心,m是1/1000核。内存:Gi是G,Mi是M】
qos:如果pod或容器的request=limit则Guaranteed(完全可靠),如果没有定义request和limit则BestEffort(尽力而为,最不可靠),如果limit>request则Burstable(弹性,较为可靠)
在资源紧张的时候,k8s会杀死越不可靠的容器或pod,所以如果有的服务是非常重要的,则需要配置request=limit
资源配额,他是用来限制整个namespace下所有pod使用资源的总量的。
apiVersion: v1
kind: ResourceQuota
metadata:
name: mylimits
namespace: rq-example
spec:
hard:
pods: 4
requests.cpu: 1
requests.memory: 1Gi
limits.cpu: 2
limits.memory: 2Gi
replicationcontrollers: 6
services: 6
除了设置cpu内存总额,还可以设置各种资源如pod service rc等的数目上限。
多个namespace在操作的时候,需要在后面追加--namespace参数,比较麻烦。context就解决了这个问题。
# 创建context
kubectl config set-context dev --namespace=development
kubectl config set-context pro --namespace=default
# 查看context
kubectl config view
# 切换context
kubectl config use-context dev