5分钟让你理解K8S必备架构概念,以及网络模型(中)

在这用XMind画了一张导图记录Redis的学习笔记和一些面试解析(源文件对部分节点有详细备注和参考资料,欢迎关注我的公众号:阿风的架构笔记 后台发送【导图】拿下载链接, 已经完善更新):

5分钟让你理解K8S必备架构概念,以及网络模型(中)

前言

在上一篇文章中介绍了K8S的基础架构流程,以及核心的组件;这篇文章继续K8S的相关的概念

上篇介绍到了NodePort Service解决了外部请求K8S内部的应用的问题。下面我们看看如何搭建应用服务集群的?

应用集群

图片

在传统应用中,我们一般利用nginx反向代理,通过配置域名指向多个IP地址,从而实现了应用的集群。如果需要增加应用或减少应用,都需要调整nginx的配置;还是相当繁琐的。

那K8S是如何实现应用集群的呢?

副本集ReplicaSet

图片

上一篇文章中介绍了利用NodePort Service 的Selector 选择Label标签,路由到后端的其中一个Pod。

上图中由3个Pod组成的应用集群,那如何保证Pod集群的高可用呢?如果其中一个Pod挂了,被删除了,K8S会怎么处理?

K8S有个Replica Set组件,从字面上面来看就是副本集意思;它的作用就是用来保证Pod的高可用,如果我们在Replica Set中定义了应用数量为3,那么它会保证应用数量;即使一个pod挂了,它会自动会启动1个,始终保证pod应用数量为3。

图片

编写yaml

apiVersion: extensions/v1beta1 #指定api版本 kind: ReplicaSet #指定创建资源的角色/类型 metadata: name: mc-user spec: replicas: 3 #副本集数量 template: #pod模板 metadata: #资源的元数据/属性 labels: #标签定义 app: mc-user #标签值 spec: # 指定该资源的内容 containers: #容器定义 - name: mc-user #容器的名字 image: rainbow/mc-user:1.0.RELEASE #容器镜像

上面就是定义了 mc-user的pod,副本集数始终为3。Service的yaml和之前一样,注意Selector的Label,可提供给外部访问端口31001

apiVersion: v1 kind: Service metadata: name: mc-user spec: ports: - name: http port: 8080 targetPort: 8080 nodePort: 31001 selector: app: mc-user type: NodePort

执行kubectl apply -f 命令,启动ReplicaSet和Service

我们可以试着查看启动的3个pod,并选择其中一个pod将它删除。

# kubectl get all # kubectl delete po mc-user-6adfw

我们再查看pod

kubectl get all

还是有3个pod,可以看出即使删除了一个pod;ReplicaSet会又帮我们启动了一个pod。

这个就是ReplicaSet的自愈能力,自我恢复能力。

滚动发布Rolling Update

我们先来谈谈什么是滚动发布?滚动发布是一种高级发布策略,按批次依次替换老版本,逐步升级到新版本。发布过程中,应用不中断,用户体验平滑。

图片

现在Pod中是V1的版本,现在我们想升级到V2版本,整个流程是什么样子呢?

图片

先删除其中一个V1的pod

图片

然后发布V2的Pod

图片

再删除一个V1的pod

图片

再启动一个V2的Pod

图片

再删除最后一个V1的pod

图片

最终升级完成。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zygpzj.html