k8s之基础概念
1. k8s 架构
K8s 属于经典的主从模型(Master-Slave 架构),由 Master 和 Node 节点构成:
- Master 节点:负责集群的管理,协调集群中的所有活动。例如应用的运行、修改、更新等。
- Node 节点:为 Kubernetes 集群中的工作节点,可以是 VM 虚拟机、物理机。每个 node 上有一个 Kubelet(负责每个节点的运行状态,以及与 master 节点通信,执行 master 节点的指令),同时 Node 节点上至少还需要运行 container runtime(比如 docker,这样才能够运行相关镜像)。
简单的示意图架构图如下所示:
完整的架构图如下所示,其中 Node 中的 pod 可以理解为运行应用程序的容器,例如运行java的一个微服务jar包,至于其他的组件,将在后面进行详细介绍。
2. Master 节点
Master节点是整个k8s的大脑
Master 节点也被称之为控制平面组件,也就是上图中红色框中的区域。Master 节点一般来说,由如下构成:
kube-apiserver:提供 RESTful API,供用户、kubectl、其他组件和外部系统调用。无状态,可水平扩展,通常部署多个实例实现高可用。
etcd:分布式键值数据库,存储集群的所有配置数据和状态信息(如节点、Pod、Service 等对象的状态,配置文件)。所有组件通过 apiserver 读写 etcd,不直接访问。一般来说是部署多个节点,使用 Raft 协议保证一致性。
kube-scheduler:负责 Pod 的调度,决定将新创建的 Pod 分配到哪个 Node 上运行。
kube-controller-manager(图中 c-m):运行控制器进程,确保集群的实际状态与期望状态一致。这句话听起来似乎有点抽象,但是实际上我们可以把它理解为一个管家,它不断检查集群的“实际状态”,并努力让它与用户定义的“期望状态”保持一致。 例如说,我希望我的集群中有 3 个 nginx pod 在运行(通过相关配置文件进行定义),突然有一个 pod 挂了,gg 了,那么 c-m 就会重新拉起来一个 pod,执行顺序如下:
- c-m 从 apiserver 读取“期望状态”(比如 replicas: 3)
- 从 apiserver 读取“当前实际状态”(比如现在只有 2 个 Pod 在运行)
- 如果不一致 → 执行操作(比如创建 1 个新 Pod)
- 写回 apiserver,更新状态
- 休息一会儿,然后重复步骤 1~5
cloud-controller-manager(图中 c-c-m):是 Kubernetes 与底层云平台(如 AWS、Azure、阿里云等)之间的“翻译官”和“对接员”,专门处理那些需要和云厂商 API 交互的功能。
3. Node 节点
Master 节点我们已经理解了,那么什么是 Node 节点呢。Node 节点(也称之为 Worker 节点),就是真正“运行应用”的 worker。在现实世界,Node 节点可以是一台物理服务器,一台 VM 虚拟机(一个 Node 节点严格对应一台“计算实例”),但是注意,Node 节点不是容器(Node 是运行容器的宿主机)。下图中,红色框框里面的内容便是 Node 节点。
Node 节点主要包含如下组件:
- kubelet:负责与 Master 通信、接收调度指令、调用容器运行时启动或终止 Pod,并向 api-server 持续上报节点和容器的健康状态。执行探针,挂载卷,设置网络等等。每个 node 必须要有一个 kubelet。
- Container Runtime(容器运行时):根据 kubelet 的指令,拉取镜像、创建/启动/停止容器,管理容器的生命周期。如果简单的理解,你就可以把他看成一个 docker,可以运行相关的镜像。
- kube-proxy:在 每个 Node 上维护网络规则(如 iptables 或 IPVS),将访问流量(Service 的流量)转发到后端 Pod。每个 Node 都需要运行 kube-proxy,因为如果一个容器不跟外界通信,那么也毫无意义。
- cAdvisor:用于自动发现并收集当前 Node 节点上所有容器(包括 Pod 中的容器)的资源使用情况和性能数据,比如 CPU、内存、磁盘 I/O、网络使用率等。
4. 命名空间
k8s 集群在搭建好之后,需要提供给多个部门或者小组进行使用。而在我们开发和生产过程中,大概率不同小组可能会出现相同的资源(例如应用,服务)名,同时每个小组需要的计算资源数量也可能不同,以及每个小组的权限也不同(例如开发团队不能访问生产环境)。为了解决这个问题,k8s 提出了命名空间(namespace)的概念(默认的命名空间是default),命名空间有如下好处:
资源隔离
- 不同命名空间中的资源名称可以重复(例如两个命名空间中都可以有名为
web-app
的 Deployment)。 - 避免资源命名冲突。
- 限制资源使用(配合 ResourceQuota 和 LimitRange)。
- 不同命名空间中的资源名称可以重复(例如两个命名空间中都可以有名为
权限控制(RBAC)
- 可以为不同命名空间设置不同的访问权限。例如:开发团队只能访问
dev
命名空间,运维团队可访问prod
。
- 可以为不同命名空间设置不同的访问权限。例如:开发团队只能访问
环境隔离
- 将开发(dev)、测试(test)、预发布(staging)、生产(prod)环境部署在不同命名空间中,便于管理。
简化管理
- 可以按命名空间批量操作资源(如删除整个命名空间及其所有资源)。
- 日志、监控、网络策略等也可以按命名空间维度配置。
但是需要注意的是,在 k8s 集群中,不同的命名空间里面应用,其网络是互通的。如果要避免网络互通,则需要进行相关的网络配置。在比较大型的网络开发中,还是推荐将生产和测试集群分开部署,而不是依赖于命名空间进行隔离。
5. 参考
k8s之基础概念的更多相关文章
- Kubernetes(K8s)基础概念 —— 凿壁偷光
Kubernetes(K8s)基础概念 -- 凿壁偷光 K8s是什么:全称 kubernetes (k12345678s) 作用:用于自动部署,扩展和管理"容器化应用程序"的 ...
- 【k8s】基础概念 + 工作原理
工作原理: 原理图 工作原理描述: 1>用户通过kubectl或者API server的REST API接口,提交需要运行的docker容器(创建pod请求): 2>api server将 ...
- K8S的基础概念
一.Kubernetes介绍 1.什么是Kubernetes? Kubernetes(通常称为K8s,K8s是将8个字母"ubernete"替换为"8"的缩写) ...
- kubernetes基础概念知多少
kubernetes(简称k8s)是一种用于在一组主机上运行和协同容器化应用程序的管理平台,皆在提供高可用.高扩展性和可预测性的方式来管理容器应用的生命周期.通过k8s,用户可以定义程序运行方式.部署 ...
- K8s(一)----容器编排工具基础概念
kubernetes(k8s)容器编排工具基础概念 Kubernetes (K8s): 中文社区:https://www.kubernetes.org.cn/replication-controlle ...
- Kubernetes 学习笔记(一):基础概念
个人笔记,仅本人查阅使用,不保证正确. 零.微服务 微服务架构专注于应用解耦合,通过将应用彻底地组件化和服务化,每个微服务只包含一个非常小的功能,比如权限管理.日志收集等等.由这一组微服务组合起来,提 ...
- 1-2、kubernetes架构概述和kubernetes基础概念
kubernetes https://draveness.me/understanding-kubernetes http://kubernetes.kansea.com/docs/ master/n ...
- 5分钟让你理解K8S必备架构概念,以及网络模型(中)
写在前面 在这用XMind画了一张导图记录Redis的学习笔记和一些面试解析(源文件对部分节点有详细备注和参考资料,欢迎关注我的公众号:阿风的架构笔记 后台发送[导图]拿下载链接, 已经完善更新): ...
- 5分钟让你理解K8S必备架构概念,以及网络模型(下)
写在前面 在这用XMind画了一张导图记录Redis的学习笔记和一些面试解析(源文件对部分节点有详细备注和参考资料,欢迎关注我的公众号:阿风的架构笔记 后台发送[导图]拿下载链接, 已经完善更新): ...
- 4、kubernetes基础概念
一.基础概念 1.Master节点 整个集群的控制中枢.Master节点是Kubernetes集群的控制节点,在生产环境中不建议部署集群核心组件外的任何Pod,公司业务的Pod更是不建议部署到Mast ...
随机推荐
- Rust修仙之道 第十四章 宏灵境 · 灵咒重铸之术
第十四章:宏灵境 · 灵咒重铸之术 "术之极者,可铸术自身:言之极者,语法亦可铸." 顾行云在整理灵术模块时,发现冗余术式重复繁复,若能一术生万术,岂非大成? 此时,一道灵书显现: ...
- 前端开发系列074-JQuery篇之框架源码解读[开始]
我将花点时间写几篇关于jQuery框架源码解读的系列文章,参考版本为当前最新的jQuery 3.3.1版本,本文主要介绍jQuery框架最新版本的基本信息以及如何开始等相关的内容. 准备说明 我自己在 ...
- 前端开发系列045-基础篇之TypeScript语言特性(五)
本文主要对TypeScript中的泛型进行展开介绍.主要包括以下内容 ❏ 泛型函数类型 ❏ 泛型接口(Interface) ❏ 泛型类(Class) ❏ 泛型约束 一.泛型函数的类型 在以前的文章中, ...
- 前端开发系列035-基础篇之Symbol符号类型
本文介绍ES6新增加的数据类型 `Symbol` , 包括基本使用.注意事项以及常用内置 Symbol等. Symbol 类型介绍 Symbol 是 ES6提供的新特性,表示一种新的原始数据类型,我们 ...
- HashMap居然可以和它直接合体???
LinkedHashMap集合继承于HashMap,学习LinkedHashMap重点对比 LinkedHashMap 与 HashMap 的异同 特别强调两者的 Entry(节点)数据结构.数据结构 ...
- 重新 开始 && ZCY
今天去见识了 淘宝的花名 好羡慕 这些 企业 活在了最好的时代 时代的宠儿. 千羽 见识了 高薪的优雅 衣食足而知荣辱 仓廪实而知礼节! 可能我会一辈子漂泊. 可是我想找到 我 ...
- spring中常见的注解 autowired
简介 spring中常见的注解 autowired 简单概括就是 自动注入 autowired 默认按照类型去容器中查找 如果找到多个相同类型的组件,再将属性名作为组件的id去容器中查找 猜测: 将抽 ...
- 关于RestCloud iPaaS平台的板块详解
当今的企业分工越来越细,上下游合作越来越紧密.各企业之间的业务系统需要相互协作完成业务.外部API依赖越来越多.同时企业系统运行在多个混合云环境及SaaS中,私有端大量业务系统与云端系统形成了错综复杂 ...
- EvalEx示例
项目做久了,难免会发现有些需求总是反复无常,今天想这样,明天想那样,但是逻辑本身又不是很复杂,比如: A.很多系统为了鼓励用户,会出一些奖励政策:连续打卡(或登录)X天,奖虚拟币Y枚.但是这个X,Y的 ...
- freeswitch笔记(6)-会议功能简介
电话会议是一个常用功能,freeswitch当然支持,下面是基本用法: 一.发起会议 conference test bgdial user/1004 上面的命令表示,发起1个名为test的会话,同时 ...