【云原生】容器编排工具Kubernetes

本文介绍了Kubernetes(k8s),它源于Google,用于容器编排管理。对比了docker编排,阐述其特性与功能。详细讲解核心组件及工作原理,介绍Pod控制器,如Deployment、ReplicaSet等,还说明了五大标签选择器,包括Label、Service等,助力实现灵活应用管理。

目录

一、 K8S介绍

官网地址:

1.1docker编排与k8s编排相比

1.2特性

1.3功能

二、K8S重要组件

2.1核心组件

(1)Kube-apiserver

(2)Kube-controller-manager

(3)Kube-scheduler

(4)Node

①kubelet

②kube-proxy

③docker

(5)etcd

2.2Kubernetes工作原理

三、Pod

3.1 Pod控制器

(1)Deployment

(2)ReplicaSet

(3)StatefulSet

(4)DaemonSe

(5)Job 和 CronJob

四、五大标签选择器

4.1Label(标签)

4.2Service

(1)三个流量调度模式

4.3Ingress

4.4Name

(1)资源

4.5Namespace(命名空间选择器)


一、 K8S介绍

Kubernetes 发布于 2014年6月, 源于希腊语,意为 “舵手” 或 “领航员”,由于 kubernetes从k 到s中间有8个字母,所以简称k8s。

Google 在十年前就已经将容器化作为基础架构,borg 就是 Google 内部的大型集群管理系统,borg 系统并不开源。在docker 大规模容器化后,Google 为了迅速占领 docker 容器化管理, Google 基于 borg 的设计理念使用 Go 语言开发新的组件系统 Kubernetes,并且开源给了CNCF。

官网地址:

k8s官网地址:Kubernetes Documentation | Kubernetes

中文版:https://kubernetes.io/zh/docs/concepts/overview/what-is-kubernetes/

1.1docker编排与k8s编排相比

  • 单机使用,无法有效集群
  • 随着容器数量的上升,管理成本攀升
  • 没有有效的容灾、自愈机制
  • 没有预设编排模版,无法实现快速、大规模容器调度
  • 没有统一的配置管理中心工具
  • 没有容器生命周期的管理工具
  • 没有图形化运维管理工具

1.2特性

 弹性伸缩  以最小的成本运行服务

 自我修复 
 自动发布(默认回滚发布模式)
 集中化配置管理和密钥管理(密钥是加密的)
 存储编排,支持外挂存储并对外挂存储资源进行编排
 任务批量处理运行
 提供一次性任务,定时任务;满足批量数据处理和分析的场景。

1.3功能

以集群的方式运行、管理跨机器的容器
解决docker跨机器容器之间的通讯问题
K8S的自我修复机制使得容器集群总在运行在用户期望的状态

二、K8S重要组件

2.1核心组件

(1)Kube-apiserver

(2)Kube-controller-manager

负责管理各种控制器,监控集群状态并自动执行相应操作。

(3)Kube-scheduler

根据资源需求和调度策略,将 Pod 调度到合适的节点上运行。

预选策略(predicate)

优选策略(priorities)

(4)Node

①kubelet

运行在每个节点上,负责管理容器和 Pod 生命周期,并与 API Server 通信。

②kube-proxy

负责为 Pod 提供网络代理和负载均衡功能。

③docker

容器引擎,运行容器,负责本机容器的创建删除

(5)etcd

分布式键值存储系统,用于存储集群的配置数据和状态。

这些核心组件共同协作,实现了 k8s 的主要功能,如容器编排、自动扩展、服务发现和负载均衡等。此外,还有其他辅助性的组件如 DNS 服务(CoreDNS)、日志收集(Fluentd)、监控(Prometheus)等,它们可以根据具体需求来选择是否部署。

2.2Kubernetes工作原理

用户通过kubectl工具发送请求通过认证给kube apiserver来创建pod请求,apiserver会将相关信息写入etcd当中,随后apiserver会找kube controller-manager创建相应pod,controller-manager会通过apiserver会在etcd读取数据寻找相应pod信息,之后apiserver找到scheduler去调度pod,关于pod调到哪里还是通过apiserver读取etcd里的数据获得相关node节点信息,并找到最适合运行pod的节点,最后scheduler通过算法调度出预选策略优选策略,算出应该把pod调度到哪个node节点上运行,之后scheduler通过apiserver找到对应node节点上的kubelet组件,通过这个组件创建并维护pod,相关容器则是通过docker创建。然后这些pod通过kube proxy关联起来成为集群,kube proxy使用service资源使用统一IP地址暴露出去,外部用户就可以通过这个ip地址轮巡到pod里面所运行的业务了。kubelet会监事这个node上面啊运行了多少资源,以及pod相关的状态和信息,发送给apiserver,apiserver会将信息写入etcd并保存起来。pod的维护由controller-manager来做,当pod的数量不满足预设的数量时,它就会再去创建到相应的预设数量来保证pod的总量。

三、Pod

一个Pid可以放多个容器,一个Pid中的容器可以共享资源,不同Pid中的容器不能相互访问(默认情况)。

3.1 Pod控制器

(1)Deployment

建立在 ReplicaSet 之上,提供了更高级别的应用程序部署功能。可以方便地进行滚动更新、版本回滚等操作。

(2)ReplicaSet

用于管理 Pod 的副本数量,确保指定数量的 Pod 始终处于运行状态。支持滚动更新应用程序。

(3)StatefulSet

用于管理有状态的应用程序,每个 Pod 都有唯一标识和稳定的网络标识。适用于需要持久化存储和有序部署的应用程序。

(4)DaemonSe

确保每个节点上都运行一个 Pod 的控制器。适用于在每个节点上运行系统级别的守护进程。

(5)Job 和 CronJob

用于批处理任务或定时任务的控制器。执行完任务后会自动停止 Pod。

这些控制器根据用户定义的规则和策略,自动管理 Pod 的生命周期,确保集群中的应用程序正常运行和扩展。通过这些控制器,可以实现灵活的应用程序管理和自动化操作。

四、五大标签选择器

4.1Label(标签)

Label Selector 基于标签对资源进行选择和过滤。标签是键值对的形式,可以附加在各种 Kubernetes 资源上,如 Pod、Service、Deployment 等。通过 Label Selector,可以根据标签的匹配规则来选择特定的资源。

4.2Service

Service 是 Kubernetes 资源,用于暴露应用程序内部的 Pod。它定义了一组逻辑上相关的 Pod,并为它们创建了一个稳定的网络终结点(Endpoint)。通过 Service,可以为应用程序提供一个统一的入口,使得客户端能够访问后端 Pod 的服务。Service 可以是 ClusterIP、NodePort、LoadBalancer 或 ExternalName 类型,用于不同的网络访问方式。

(1)三个流量调度模式

userspace(废弃)

ipvs(推荐,性能最好)

通过ip地址直接转发

IP tables(濒临废弃)(默认)

从上到下转发

4.3Ingress

Ingress 是一种 Kubernetes 资源,用于将外部流量引导到集群内部的服务。它充当了流量入口的角色,通过定义规则和路由来决定如何将请求转发到后端的 Service 中的 Pod。Ingress 可以实现负载均衡、HTTPS/TLS 加密、URL 路由等功能,提供了更高级别的流量控制和管理。

4.4Name

Name 是 Kubernetes 资源的一个属性,用于标识该资源的名称。每个资源都必须具有唯一的名称。例如,Pod、Deployment、Service 等所有资源都需要指定一个名称以便在集群中进行引用和操作。

(1)资源

    api     版本
    kind       类别
    metadata     元数据信息
    spec清单
    status    状态

4.5Namespace(命名空间选择器)

Namespace Selector 用于选择特定的命名空间(Namespace)。命名空间是 Kubernetes 中用于组织和隔离资源的一种机制,通过命名空间选择器可以选择所需的命名空间中的资源。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值