k8s-架构原理

k8s是google公司使用go语言开发,借鉴borg系统开发出来的。

k8s架构介绍

k8s集群服务器主要分为两类角色,分别为master和node。

master节点包含如下组件:

api server: k8s网关,所有指令请求都必须经过apiserver。
scheduler: 调度器 根据调度算法,将请求资源调度到某一个node节点。
controller: 控制器,维护k8s资源对象。
etcd: 分布式存储组件,用于存储资源对象。

node节点包含如下组件:

docker: 运行容器的基础环境,容器引擎。
kubelet: 每个node节点都存在一份,在node节点上的资源操作指令均由kubelet执行,从etcd扫描相关请求,在节点上执行请求。

调度过程:scheduler不直接对node节点进行资源操作,而是将相关操作通过apiserver将信息指令数据存储到etcd,kubelet扫描etcd,获取相关数据信息执行指令。

kube-proxy: 代理服务,负载均衡
fluentd: 日志收集服务
pod: 是k8s管理的基本单位(最小单元),pod 内部是容器

k8s核心组件原理:

k8s是用来管理容器的,但是不直接操作容器,最小操作单元为pod
特点:

  • 1个master有一群node节点与之对应
  • master节点不存储容器,只负责调度、网关、控制器、资源对象存储 容器是存储在node节点
  • pod内部可以有一个或者多个容器
  • kubelet负责本地的pod维护
  • kube-proxy负责负载均衡,在多个pod之间做负载均衡

关于pod

pod是一个虚拟化的分组(有自己的ip地址、主机名),pod相当于独立主机,可以封装一个或多个容器。通常情况下,一个pod中要么部署一个服务,要么部署多个相关的服务
1、pod底层网络和数据存储:
pod底层网络和存储主要依赖pause容器,该容器作用如下:

  • 共享网络
  • 共享存储

2、pod内部容器使用localhost相互访问
3、pod内部容器创建之前必须先创建pause

Kubernetes 是一个用于自动化部署、扩展和管理容器化应用的开源系统。它的设计目的是为了简化跨多台主机运行的应用程序的管理,使得开发者可以更加专注于编写代码而不是担心运行环境的问题 [^1]。 ### 架构设计 Kubernetes 的架构设计通常分为控制平面(Control Plane)和工作节点(Worker Nodes)。控制平面负责集群的整体管理和决策,包括调度任务到工作节点、维护应用的状态等。工作节点则是实际运行容器化应用的地方 [^2]。 #### 控制平面组件 - **API Server**: 提供了 RESTful API 接口,是所有管理命令的入口。 - **etcd**: 分布式键值存储,保存集群的所有数据。 - **Controller Manager**: 包含一系列控制器,确保集群的实际状态与期望状态一致。 - **Scheduler**: 负责将新创建的 Pod 调度到一个合适的 Node 上运行 [^1]。 #### 工作节点组件 - **Kubelet**: 每个节点上的代理,负责与 API Server 通信,并确保容器处于期望状态。 - **Kube-proxy**: 实现了 Kubernetes 的服务抽象,提供了网络规则和负载均衡功能。 - **Container Runtime**: 如 Docker 或 containerd,负责运行容器 [^4]。 ### 核心对象模型 Kubernetes 中的核心对象模型包括 Pod、Service、Volume、Namespace 等。其中,Pod 是最小的可部署单元,Service 定义了一种访问策略,使得一组 Pod 可以被访问 [^1]。 ### 调度与编排 Kubernetes 的调度器负责Pod 分配到具有足够资源的节点上运行。调度过程考虑了多种因素,如资源需求、亲和性/反亲和性规则等 [^1]。 ### 网络与存储 Kubernetes 提供了网络模型,确保每个 Pod 都有一个唯一的 IP 地址,并且允许 Pod直接通信。对于存储,Kubernetes 支持多种存储卷类型,允许容器持久化数据 [^3]。 ### 高可用与自我修复 Kubernetes 设计了高可用机制,确保即使某些节点失败,整个集群仍然能够正常工作。此外,它还具有自我修复的能力,能够重启失败的容器或替换被破坏的 Pod [^2]。 通过这些组件和服务,Kubernetes 能够提供一个强大且灵活的平台来管理容器化的应用。 ```python # 示例代码:创建一个简单的 Kubernetes Deployment apiVersion = "apps/v1" kind = "Deployment" metadata = { "name": "nginx-deployment", "labels": { "app": "nginx" } } spec = { "replicas": 3, "selector": { "matchLabels": { "app": "nginx" } }, "template": { "metadata": { "labels": { "app": "nginx" } }, "spec": { "containers": [ { "name": "nginx", "image": "nginx:1.14.2", "ports": [ {"containerPort": 80} ] } ] } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值