上面简单说了一下 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
今天就到这里,学习所得,若有偏差,还请斧正
欢迎点赞,关注,收藏
朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力
好了,本次就到这里
技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。
我是阿兵云原生,欢迎点赞关注收藏,下次见~
更多的可以查看 零声每晚八点直播:https://ke.qq.com/course/417774