【k8s】(五) kubernetes 核心技术-Controller 控制器

目录

一、Replication Controller (RC 管理pod副本)

二、Replica Set (RS 管理pod副本)

三、Deployment (pod编排)

四、Horizontal Pod Autoscaler (HPA 自动扩容)

4.1 概念

4.2 手动扩容和缩容

4.3 自动扩容和缩容


一、Replication Controller (RC 管理pod副本)

(1)Replication Controller(RC)是 Kubernetes 系统中核心概念之一,当我们定义了一个 RC并提交到
 Kubernetes 集群中以后,Master 节点上的 Controller Manager 组件就得到通知,定期检查系统中存活的 
Pod,并确保目标 Pod 实例的数量刚好等于 RC 的预期值,如果有过多或过少的 Pod 运行,系统就会停掉或创建
一些 Pod.此外我们也可以通过修改 RC 的副本数量,来实现 Pod 的动态缩放功能。


kubectl scale rc nginx --replicas=5

(2)由于 Replication Controller 与 Kubernetes 代码中的模块 Replication Controller 同名,所以
在 Kubernetes v1.2 时, 它就升级成了另外一个新的概念 Replica Sets,官方解释为下一代的 RC。

(3)它与 RC 区别是:Replica Sets 支持基于集合的 Label selector,而 RC 只支持基于等式的 Label Selector。

(4)我们很少单独使用 Replica Set,它主要被 Deployment 这个更高层面的资源对象所使用,
从而形成一整套Pod 创建、删除、更新的编排机制。

(5)最好不要越过 RC 直接创建 Pod, 因为 Replication Controller 会通过 RC 管理 Pod 副本,
实现自动创建、补足、替换、删除 Pod 副本,这样就能提高应用的容灾能力,减少由于节点崩溃等
意外状况造成的损失。即使应用程序只有一个 Pod 副本,也强烈建议使用 RC 来 定义 Pod。

二、Replica Set (RS 管理pod副本)

    ReplicaSet 跟 ReplicationController 没有本质的不同,只是名字不一样,并且ReplicaSet 
支持集合式的 selector(ReplicationController 仅支持等式)。Kubernetes 官方强烈建议避免
直接使用 ReplicaSet,而应该通过 Deployment 来创建 RS 和Pod。由于 ReplicaSet 是 
ReplicationController 的代替物,因此用法基本相同,唯一的区别在于 ReplicaSet 支持集合式的 
selector。

三、Deployment(pod编排)

  (1)Deployment 是 Kubenetes v1.2 引入的新概念,引入的目的是为了更好的解决 Pod 的编排问题
  (2)【Deployment 内部使用了 Replica Set 来实现】。
  (3)Deployment 的定义与 Replica Set 的定义很类似,除了 API 声明与 Kind 类型有所区别。
apiVersion: extensions/v1beta1 kind: Deployment
metadata:
name: frontend spec:
replicas: 1 selector:
matchLabels:
tier: frontend matchExpressions:
- {key: tier, operator: In, values: [frontend]} template:
metadata:
labels:
app: app-demo tier: frontend
spec:
containers:
- name: tomcat-demo image: tomcat ports:
- containerPort: 8080

四、Horizontal Pod Autoscaler (HPA自动扩容)

4.1 概念

 (1)Horizontal Pod Autoscal(Pod 横向扩容 简称 HPA)与 RC、Deployment 一样,
也属于一种Kubernetes 资源对象。通过追踪分析 RC 控制的所有目标 Pod 的负载变化情况,
来确定是否需要针对性地调整目标 Pod 的副本数,这是 HPA 的 实现原理。

 (2)Kubernetes 对 Pod 扩容与缩容提供了手动和自动两种模式,手动模式通过 kubectl scale
命令对一个 Deployment/RC 进行 Pod 副本数量的设置。自动模式则需要用户根据某个性能指标或者
自定义业务指标,并指定 Pod 副本数量的范围,系统将自动在这个范围内根据性能指标的变化进行调整。

4.2 手动扩容和缩容


kubectl scale deployment frontend --replicas 1

4.3 自动扩容和缩容

  HPA 控制器基本 Master 的 kube-controller-manager 服务启动参数 
--horizontal-pod-autoscaler-sync-period 定义的时长(默认值为 30s),
周期性地监测 Pod 的 CPU 使用率,并在满足条件时对 RC 或 Deployment 
中的 Pod 副 本数量进行调整,以符合用户定义的平均Pod CPU 使用率
apiVersion: extensions/v1beta1 kind: Deployment
metadata:
name: nginx-deployment spec:
replicas: 1 template:
metadata: name: nginx labels:
app: nginx spec:
containers:
- name: nginx image: nginx
resources:
requests:
cpu: 50m ports:
- containerPort: 80
-------------------------------
apiVersion: v1 kind: Service metadata:
name: nginx-svc spec:
ports:
- port: 80 selector:
app: nginx
-----------------------------------
apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata:
name: nginx-hpa spec:
scaleTargetRef:
apiVersion: app/v1beta1 kind: Deployment
name: nginx-deployment minReplicas: 1
maxReplicas: 10
targetCPUUtilizationPercentage: 50

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mateo-520

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值