k8s4_运维的关注点

3 min read
k8sdockerkubernetes

k8s运维关注点

运维人员是在集群部署之后,出现一些特殊情况的时候能即时解决问题。比如当集群中服务的pod数目不够需要增加副本数等。

RC/Deployment自动维护副本数

RC/Deployment中设置的spec.replica数目会被动态的维护,当数目不够的时候会自动增加,数目过多的时候会删掉一些pod。

Pod资源限定

因为硬件资源有限,故不能一味的增加副本数目,为了更合理的分配副本占用的资源,可以添加资源需要的最低cpu内存和最高能得到的cpu内存。(m是千分之一个核,Mi是一兆内存)

spec:
  containers:
  - name: db
    image: mysql
    resources:
      requests:
        cpu:  "100m"
        memory: "50Mi"
      limits:
        cpu:  "200m"
        memory: "250Mi"

HPA

Pod横向自动扩容,根据一定指标达到阈值(如cpu利用率,每秒请求数目)进行扩容。

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: myhpa
spec:
  maxReplicas: 10
  minReplicas: 1
  scaleTargetRef:
    kind: Deployment
    name: mydep
    targetCPUUtilizationPercentage: 90

对mydep这个deployment进行自动扩容,这个dep中的pod需要设置每个pod分配的cpu资源数。90%是指把分配的cpu看做100%的一个相对度量。这里的Replicas会重新规划dep中已经定义的Replica。这篇文章尝试并验证了hpa的作用,可以跳转去参考。

namespace

我们之前在yml中的metadata中提到过namespace,不写默认是default。namespace中的name具有唯一性。

注意:

  • namespace需要先创建在指定
  • 删除一个namespace会自动删除所有属于该namespace的资源。
  • default和kube-system命名空间不可删除。
  • PersistentVolumes是不属于任何namespace的,但PersistentVolumeClaim是属于某个特定namespace的。
  • Events是否属于namespace取决于产生events的对象。

创建namespace

kubectl create namespace quota-pod-example

namespace可以限制pod的数目通过ResouceQuota,参考文档

namespace可以配置pod默认cpu内存资源通过LimitRange,参考文档

注:一般在namespace创建的时候指定一个ResourceQuota和LimitRange,如果在创建了一些pod后再指定,可能会不起作用,需要重启这些pod;如果创建多个,可能按照第一个在起作用。