K8S核心组件介绍

简介: K8S核心组件介绍

一:pod核心原理

1:pod是什么
  • Pod 是一组容器和卷(目录和文件)的集合,同一个Pod里的容器共享同一个网络命名空间,可以使用 localhost 互相通信
  • pod是k8s管理的最小的单位
  • pod也是一个容器,这个容器装的是docker创建的容器
  • 容器本质是进程,K8S是操作系统,pod就是类似进程组
  • pod有自己的ip地址,主机名,pod相当于独立主机,可以封装一个容器或者多个容器
2:pod是用来干什么
  • 通常相关情况下,在服务部署得时候,使用pod来管理一组相关的服务(一个pod中要么部署一个服务,要么部署一组有关系的服务)
  • 一组相关的服务:在链式调用的调用链路上的服务,叫做一组相关的服务。
3:服务集群如何实现
  • 实现服务集群:只需要复制多个pod副本即可,这个是k8s的管理的先进之处,k8s如何继续扩容,只需要控制pod数量即可
4:pod底层网络,数据存储如何进行
  • 一个pod结构图如下:
  • pod结构图
  • 在单个pod中,可能有一组相关的服务,nginx,商品服务,商品数据库三个容器
  • 当一个微服务请求过来之后,会先经过nginx,再去访问服务,服务再去访问商品库,每个容器相当于单个沙箱环境,有单独的ip和port,这样的不同的容器之间的访问就相当于远程访问,这样的访问的效率就会降低。所以每个pod容器就有一个pause容器。
  • pause容器有两个作用:1:共享网络 2:共享存储。
  • pause容器相当于一个网卡,一个pod的不同容器之间的访问就相当于本地localhost访问。
  • 不同的容器也会将存储的东西都放到pause中,这样不同容器的访问存储就相当于访问本地文件,这样效率就会大幅提高

二:副本控制器-ReplicaSet

1:副本控制器的功能
  • 控制pod副本(服务集群)的数量,永远与预期设定的数量保持一致。
  • 例如 设置ReplicaSet = 3 ,就会创建三个pod,如果一个pod服务宕机,副本控制器会立马创建一个新的pod,永远保证副本数量为3,如下:
  • 副本控制器
2:ReplicaSet和ReplicationController区别
2.1:什么是ReplicationController
  • 在旧版本的K8S中,只有ReplicationController对象,主要确保pod按照指定的副本数量进行运行,如果有容器退出,就会自动创建新的pod来替代。异常多出来的容器也会自动回收,通过Replicationcontroller,K8S实现了集群的高可用性。
2.2:ReplicaSet和ReplicationController区别
  • ReplicaSet是k8s官网强烈建议推荐的。是ReplicationController的代替物,两者的用法基本相同,区别就是ReplicaSet支持复合式的标签选择器(Label-Selector)
2.3 Label-Selector(标签选择器)的作用
  • 上个图中我们看到一个副本控制器设置三个pod,如果前两个pod在一个机器中,另外一个pod在另一台机器中,ReplicaSet是如何通过标签选择器控制pod的数量,我们可以看下图
  • 标签选择器
  • 前两个pod属于server1,后一个pod属于server2,对于三个pod都打了同样的复合标签
selector:
    app = webService
    release = 1.0
  • 这样副本控制器ReplicaSet对于不同的服务器上的相同的pod我们都可以通过标签控制器进行控制
  • ReplicationController只能通过单标签对pod进行管理,所以尽量用ReplicaSet替代ReplicationSet来管理pod

三:资源部署对象-Deployment

1:什么是deployment
  • deployment是一个创建和更新副本应用(多个副本pod)的对象。
2:为何有deployment的存在
  • 1:在我们的集群服务中,如果一个pod挂掉,对应的服务也会挂掉,所以k8s提供了一个deployment对象用来监控这些实例,如果托管实例的节点关闭或被删除,则Deployment 控制器会将该实例替换为群集中另一个节点上的实例
  • 2:我们在平时业务开发中会经常有版本的迭代。如何保证我们一个创建一个新pod后而停用一个旧个pod,而我们的副本控制器ReplicaSet是不支持滚动更新,Deployment对象可以满足我们的的滚动更新操作
3:部署模型
  • 在我们整个的项目版本发布更新操作中,我们用到的一个K8S部署模型如下,Deploymet控制着ReplicaSet实现滚动更新,Replicaset控制着pod,如下图步骤
    部署模型
  • 当我们从V1版本要更新到V2版本,首先要生产一个新的RS对象,发布一个pod后,就会替代一个旧的pod,新的pod由新的RS对象控制。
4:deployment和replicaset的区别
  • ReplicaSet的主要用途是被Deployment对象用于pod的创建,更新,删除,RS是Deployment的一部分,Deployment控制的是RS对象
  • Deployment在实例运行后,会持续监控rs和pod的数量和状态的变化。

四:有状态服务部署组件-StatefulSet

1:什么是StatefulSet
  • StatefulSet是为了部署有状态服务而设计的组件。
2: 无状态服务 & 有状态服务
  • 无状态服务:没有实时数据要存储,各个请求对于服务器来说统一无差别处理。我们现在的微服务和一些中间件服务(mq)之类的就属于无状态服务。如果把一个服务抽离出去,一段时间再加入机器网络,集群网络可以继续使用
  • 有状态服务:有实时的数据进行存储,用于处理业务请求。比如我们的数据库mysql,redis,有状态服务集群中,如果把一个服务抽离出去,一段时间再加入机器网络,集群网络无法使用
3:为什么使用StatefulSet
  • 如果我们容器部署有状态服务mysql 我们就会发现问题:
  • 1:容器是有生命周期的,一旦宕机,数据就会丢失。
  • 2:如果pod部署,pod也是有生命周期,数据也会丢失。
  • 所以k8s不能使用deployment部署模型来部署有状态服务。通常情况下,deployment被用来部署无状态服务,那么对于有状态服务的部署,使用statefulSet有状态服务部署。
4:StatefulSet部署模型

StatefulSet部署模型

  • 通过模型,对于有数据存储的有状态的服务,我们会有个一个pvc文件系统来存储持久化的数据,如果pod重新建立,StatefulSet可以保证pod对应的持久化的数据的pvc文件系统的hostname不变,这样就可以保证有状态服务的部署。
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
Kubernetes API 调度
Kubernetes 架构解析:理解其核心组件
【8月更文第29天】Kubernetes(简称 K8s)是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用。它提供了一个可移植、可扩展的环境来运行分布式系统。本文将深入探讨 Kubernetes 的架构设计,包括其核心组件如何协同工作以实现这些功能。
1179 3
|
Kubernetes API 调度
在K8S中,各个组件及其作用是什么?
在K8S中,各个组件及其作用是什么?
|
Kubernetes 容器
Kubernetes附加组件Dashboard部署实战篇
关于如何在Kubernetes集群中部署和配置Dashboard组件的详细实战指南,涵盖了从创建证书、部署Dashboard、设置服务访问到登录认证的完整流程。
1723 0
Kubernetes附加组件Dashboard部署实战篇
|
Kubernetes 调度 容器
k8s descheduler 组件安装
k8s descheduler 组件安装
|
存储 Kubernetes API
在K8S中,Kubernetes的组件有哪些?
在K8S中,Kubernetes的组件有哪些?
|
存储 Kubernetes API
在K8S中,各组件是如何实现高可用的?
在K8S中,各组件是如何实现高可用的?
|
存储 Kubernetes API
在K8S中,各个组件及其作用是什么呢?
在K8S中,各个组件及其作用是什么呢?
|
Kubernetes 负载均衡 网络协议
在K8S中,DNS组件有什么特性?
在K8S中,DNS组件有什么特性?
|
存储 Kubernetes API
在K8S中,calico有哪些组件?都是做什么的?
在K8S中,calico有哪些组件?都是做什么的?
|
域名解析 Kubernetes 负载均衡
在K8S中,外部访问容器服务,比如说提供了一个域名,链路怎么走?数据经过哪些组件?
在K8S中,外部访问容器服务,比如说提供了一个域名,链路怎么走?数据经过哪些组件?

推荐镜像

更多