tags: k8s,docker,kubernetes

k8s运维指南

1 Node管理-隔离与恢复

kubectl cordon nodename
kubectl uncordon nodename

2 集群隔离机制

2.1 namespace

之前讲过,namespace可以设定限额和默认请求资源量,这里详细说下:

2.1.1 LimitRange

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

2.1.2 ResourceQuota

资源配额,他是用来限制整个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等的数目上限。 quota

2.2 context

多个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