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;如果创建多个,可能按照第一个在起作用。