详细介绍:Kubernetes(K8s)的技术架构(核心概念、调度和资源管理、安全性、持续集成与持续部署、网络和服务发现)

目录

前言

亲爱的家人们,创作很不容易,若对您有帮助的话,请点赞收藏加关注哦,您的关注是我持续创作的动力,谢谢大家!有问题请私信或联系邮箱:fn_kobe@163.com

简介:

Kubernetes(简称K8s)是一种开源的容器编排平台,广泛应用于自动化部署、扩展和管理容器化应用程序。K8s可以运行在多种环境中,包括公有云、私有云以及本地数据中心。Kubernetes的核心功能是通过声明式配置管理集群中的应用容器,确保应用高效、稳定地运行。

Kubernetes是一个功能强大的容器编排平台,其设计的核心目标是简化大规模容器化应用的管理。通过声明式配置和自动化的调度、扩展、负载均衡等功能,Kubernetes使得开发和运维人员能够高效地管理复杂的容器化应用。然而,要深入理解和熟练运用Kubernetes,需要不断探索和实践各种组件和功能的细节。

1、K8s架构概述

Kubernetes的架构采用了客户端-服务器模型,由多个组件组成。主要组件包括控制面(Control Plane)和工作节点(Worker Nodes)

1.1、控制面(Control Plane)

控制面负责集群的整体管理和决策,如应用的部署、监控、扩缩容等。控制面组件通常包括以下几项:
①API Server(kube-apiserver):API Server是K8s集群的前端,它暴露K8s API并接收来自用户、开发者或K8s内部组件的请求。它是所有K8s组件交互的核心。

②etcd:一个强一致性的键值存储,K8s用它来存储所有的集群状态和配置数据。etcd确保所有配置的一致性和持久性。

③Controller Manager(kube-controller-manager):负责集群的控制逻辑,自动维护集群的状态。例如,部署应用、检查Pod是否运行,自动修复错误等。

④Scheduler(kube-scheduler):负责将未分配的Pod调度到合适的节点上。它依据资源利用率、硬件能力、亲和性和拓扑规则等因素进行决策。

⑤Cloud Controller Manager:如果K8s运行在云环境中,云控制器管理器与云提供商的API进行交互,管理集群资源的生命周期。

1.2、工作节点(Worker Node)

工作节点是K8s集群的执行环境,负责运行应用程序。每个工作节点上都有以下组件:

①Kubelet:Kubelet是每个工作节点上的核心代理,负责管理Pod的生命周期,包括确保容器运行在预期的状态,处理从API Server来的Pod定义,报告Pod的状态等。

②Kube Proxy:Kube Proxy负责为Pod之间的通信提供网络代理功能。它维护每个节点的网络规则,确保服务发现和负载均衡。

③Container Runtime:容器运行时负责拉取容器镜像并运行容器。常用的容器运行时有Docker、containerd等。

2、Kubernetes核心概念

Kubernetes是基于一系列核心概念来组织和管理容器化应用的,理解这些概念对于有效使用K8s至关重要。

2.1、Pod

Pod是Kubernetes中最小的可调度单元。Pod可以包含一个或多个容器(通常是一个容器)。所有容器共享同一个网络空间和存储卷,因此可以高效地协同工作。Pod通常用于运行单一的应用程序实例,多个容器放在同一个Pod中可以帮助它们共享数据和网络。

2.2、ReplicaSet

ReplicaSet确保指定数量的Pod副本在任何时间点都在集群中运行。它能够自动修复Pod的失败,确保Pod副本的数量与预期一致。ReplicaSet常常与Deployment配合使用,后者提供了更多的功能和控制。

2.3、Deployment

Deployment是管理Pod和ReplicaSet的控制器,简化了Pod的部署和更新操作。通过声明式的配置,用户可以创建、更新和回滚应用程序版本。Deployment会在后台管理ReplicaSet和Pod,确保Pod的副本数与声明一致。

2.4、Service

Service是一种抽象的资源,它定义了如何访问Pod。Service为Pod提供了稳定的网络访问入口,并能自动地进行负载均衡。常见的Service类型包括:

ClusterIP:默认类型,在集群内为Pod提供内部访问。

NodePort:为Pod提供一个可通过集群节点的固定端口访问的入口。

LoadBalancer:在支持的云平台上,通过外部负载均衡器暴露Service。

ExternalName:将Service映射到外部DNS名称。

2.5、Namespace

Namespace用于将Kubernetes资源进行逻辑隔离,它可以将多个项目或团队的资源划分到不同的命名空间中。每个命名空间是一个虚拟的集群,资源在不同命名空间之间不能直接访问。

2.6、ConfigMap与Secret

ConfigMap:用于存储配置信息,K8s中的应用可以动态加载这些配置信息,而无需重新构建镜像。

Secret:类似于ConfigMap,但专门用于存储敏感信息,如密码、API密钥等。

2.7、Persistent Volume(PV)与Persistent Volume Claim(PVC)

Persistent Volume (PV):是K8s集群中的存储资源,由管理员进行预先配置。PV可以是物理存储(如NFS、iSCSI)或云存储(如EBS、GCE)等。

Persistent Volume Claim (PVC):用户申请存储的请求,PVC与PV关联,确保应用能够在Pod中持久化存储。

2.8、StatefulSet

StatefulSet是K8s中管理有状态应用的控制器。与Deployment不同,StatefulSet为每个Pod分配唯一的标识符,并保证Pod的顺序性和稳定性。它适用于数据库等有状态服务。

2.9、DaemonSet

DaemonSet确保在每个节点上运行一个Pod副本。DaemonSet常用于日志收集、监控代理等需要在每个节点上运行的应用。

2.10、Job与CronJob

Job:控制器用于管理批处理任务,确保指定数量的Pod成功完成工作。

CronJob:用于定时执行任务,类似Linux的cron,允许用户按指定时间间隔运行Job。

3、K8s调度与资源管理

K8s的调度器负责将Pod分配到合适的节点上,调度决策会考虑以下因素:
①资源需求 :每个Pod可以声明所需的CPU、内存等资源,调度器会确保节点有足够的资源来满足Pod的需求。
②亲和性与反亲和性 :用户可以为Pod定义亲和性(Affinity)规则,确保Pod在特定的节点或区域上运行;反亲和性(Anti-Affinity)则是避免Pod在某些节点上运行。
③Taints与Tolerations :Taints与Tolerations机制用于防止Pod调度到不合适的节点上。
④Pod优先级与抢占:K8s支持Pod优先级,优先级高的Pod可以抢占低优先级Pod的资源。

4、K8s网络与服务发现

Kubernetes使用CNI(Container Network Interface)来管理容器网络,确保容器之间能够相互通信。K8s的网络模式主要有以下特点:
①Pod网络 :每个Pod都有一个唯一的IP地址,Pod之间可以直接通信,而不需要通过宿主机。
②Service与负载均衡:K8s中的Service为Pod提供稳定的访问入口,且可实现负载均衡。

5、K8s安全性

Kubernetes的安全性涉及多个方面,包括身份验证、授权、密钥管理等:
①RBAC(Role-Based Access Control ):RBAC是Kubernetes的访问控制模型,用于定义哪些用户或服务可以访问哪些资源。
②PodSecurityPolicy :PodSecurityPolicy允许集群管理员定义Pod的安全约束。
③Network Policies :Kubernetes的网络策略可以定义哪些Pod之间可以相互通信,从而增强网络层面的安全性。
⑤Secrets:Secrets用于存储敏感信息,如密码和API密钥。

6、K8s监控与日志管理

Kubernetes本身不提供内置的日志管理和监控系统,但它支持与外部系统集成来实现这些功能。常见的解决方案包括:
①Prometheus :Kubernetes集群的监控工具,收集资源使用情况、Pod状态等信息,并通过Alertmanager进行告警。
②Fluentd、Elasticsearch和Kibana(EFK堆栈):这是一种常见的日志管理方案,Fluentd用于收集日志,Elasticsearch用于存储日志,Kibana用于日志的可视化。

7、K8s持续集成与持续部署(CI/CD)

Kubernetes支持与CI/CD工具(如Jenkins、GitLab CI等)集成,以实现自动化部署。通过K8s的Helm工具,用户可以轻松地管理Kubernetes应用的发布和回滚。

相关推荐
Softmaxmap19 分钟前
从零做一个中文小模型:600 亿 token 数据、mHC + Engram 结构、到强化学习的全流程(开源)
架构
你三大爷23 分钟前
从 Hessian 迁移到 protostuff:深嵌套模型反序列化耗时与高并发类加载锁的根治实战
后端·架构
女神下凡2 小时前
芯参谋(107):杰理AC_中科蓝讯_开发指南
linux·服务器·网络·单片机·嵌入式硬件
一条Go5 小时前
接收方合并去重:同一个人为什么只该收到一次通知
后端·架构·github
吴建旭 智宅焕6 小时前
智能家居全国交付标准化架构的轻重分离设计:重勘测节点与轻执行流程的系统实现
架构·智能家居
flash俊杰6 小时前
v0.5-01 让桌面 AI 助手记得住:预算组装、递归摘要、长期记忆与评估基线
数据库·安全·架构
leo在掘金6 小时前
只挂了11小时,5000台开发机被塞进SSH公钥
后端·架构
ZzT6 小时前
Claude Code 连续压缩 3 次,丢掉 33% 到 57% 的用户指令;/compact 后加一段提示词降到 0
ai编程·claude
爱和冰阔落7 小时前
【Linux网络】TCP 半包粘包怎么解决?从长度报头、JSON 拆包到网络计算器完整实战
linux·运维·网络·tcp/ip
aifannihao7 小时前
GitHub Actions 锁文件实测:6 个 uses 只锁住 2 个
python·ci/cd·标准库·供应链安全·github actions