【k8s 系列】k8s 学习十一,Label,RC,HPA

「这是我参与11月更文挑战的第 26 天,活动详情查看:2021最后一次更文挑战

上面简单说了一下 pod 的基本知识点,待到后面会使用到 pod 的一些高阶知识点的时候,还可以再细细琢磨底层原理

我们接着继续学习 Lable , RC,HPA 的相关知识点

Label 是什么?

label 就是标签,例如之前我们手写的 yaml 文件中,每一个键值对都是 label,如 key =value

label 一般是在定义资源的时候就确定了,当然我们也可以在对象创建之后进行动态的添加,编辑,和删除

我们写的 label 可以附加到 Node,Service,Pod,RC 中,每一类资源都可以定义任意数量的 label, 同一个 label 也是可以被添加到任意数量的资源对象上的

这一点确实是很灵活了有么有

label 为什么要附加到各种资源对象上呢?

因为 label 和 label selector 都是不能单独定义的,他们必须要依附在某一类资源对象上,这是为了能够去管理这些资源,使用 label selector 对他们分组

例如写一个 openresty ,写一个 RC 使用 openresty ,Service 调用 openresty 的 label selector

apiVersion: v1
kind: ReplicationController	
metadata: 
  name: openresty
spec:
  replicas: 2
  selector:
    app: openresty
  tmplate:
    metadata:
      labels:
        app: openresty
      spec:
        containers:
        - name: openresty
        ports:
        - containerPort: 80
----------------------------
apiVersion: v1
kind: Service	
metadata: 
  name: openresty
spec:
  type: NodePort
  ports:
  - port: 80
    nodePort: 30125
  selector:
    app: openresty
复制代码

RC 是什么?

RC 是什么,前面解释到,就是 ReplicationController 副本控制器

当我们定义一个 RC ,提交给 K8S 的时候,这是一个期望值,Master 节点上的 Controller Manager 组件得到通知后,就会去定期检查 pod ,会确保 pod 的数量和我们预期的数量一致

如果当前检测到的数量和我们的预期数量不一致,那么控制器就会对 pod 做增加和删除的操作,这就可以实现 pod 动态扩缩功能

之前我们也有提到,我们可以使用如下指令来设置我们期望的副本数

kubectl scale rc 服务名 --replicas=具体的数字
复制代码

RC 和 Replica Sets 有何区别?

他俩在本质上没有什么区别,只是 Replica Sets 支持的更多

RC Replica Sets
支持基于等式的 label selector 支持基于集合的 label selector
K8S 1.2 之后出现的,Replica Sets 主要是被 Deployment 这样的资源对象所使用

为了提高我们应用的容灾能力,哪怕程序只有 1 个 pod 副本,也要通过 RC 的方式去管理,因为 RC 可以管理 pod 的创建,删除,更新等编排机制,不用 pod 自己瞎操心

HPA 是什么?

HPA 就是 Horizontal Pod Autoscal ,pod 的横向扩容,他也是 K8S 的一种资源对象

HPA 的简单原理

HAP 通过追踪和分析 RC 的 pod 的负载变化情况,酌情调整目标 pod 的副本数

K8S 提供 2 种方式来对 pod 扩容和缩容

  • 第一种是我们使用命令的方式对 RC,Deployment 进行扩容和缩容
kubectl scale rc/deployment 服务名 --replicas 数量
复制代码
  • 第二种是使用 HPA 的方式,自动扩容和缩容

自动的模式就**需要用户根据指定的一个性能指标,还要预先指定一个副本的数量范围,**系统就会自动的在我们设定的范围内根据性能指标进行调整

HPA 小案例

  • 写一个 自己 nginx deployment
apiVersion: extension/v1beta1
kind: Deployment
metadata:
  name: my nginx deployment
spec:
  replicas: 2
  template:
    metadata:
      name: my deployment
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        resources:
          requrests:
            cpu: 50m
        ports:
        - containerPort: 80
复制代码
  • 写一个 service

写一个 service ,命名为 mynginx-svc

apiVersion: v1
kind: Service
metadata:
  name: mynginx-svc
spec:
  ports:
  - port: 80
  selector:
    app: nginx
复制代码
  • 写一个 hpa

hpa 设置最小的副本数 2, 最大的副本数 5个,CPU 在 70 % 以下 ,引用 my nginx deployment

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: mynginx-hpa
spec:
  scaletargetRef:
    apiversion: app/v1beta1
    kind: deployment
    name: my nginx deployment
  minReplicas: 2
  maxReplicas: 5
  targetCPUUtillizationPercentage: 70
复制代码

今天就到这里,学习所得,若有偏差,还请斧正

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是小魔童哪吒,欢迎点赞关注收藏,下次见~

猜你喜欢

转载自juejin.im/post/7035265352124596238