k8s基础_k8s核心概念
一: 什么是容器编排
容器编排的解释:
-
容器编排工具,就是用来管理一大堆服务器上的复杂多容器程序,从创建、运行到销毁,全程自动管控整套程序的完整生命周期。
-
容器编排工具为开发人员和基础设施团队提供了一个抽象层来处理大规模的容器化部署。
微服务和传统VM的问题:
- 微服务将应用程序分解为不同的微应用程序,开发者倾向于在每个VM中部署一个微服务,这样会导致资源利用率降低;
- 一般而言,与单一应用程序部署相比,微服务部署需要更多的基础设施;
- 由于基础设施成本的增加,许多组织未能看到微服务的价值。
容器编排的能力概述:
- 集群管理
- 不管是物理服务器、虚拟机,不管机器性能好坏、是本地机房还是云服务器,全部打包当成一台超大电脑统一管。
- 部署
- 不用人工一台台装程序,能自动批量装容器应用;支持多版本共存、不停机滚动更新,更新出问题还能一键回退到老版本。
- 可伸缩
- 访问量变大自动多开程序实例,流量变小自动关掉多余实例,也支持手动调整,全程为了系统不卡顿。
- 健康管理
- 实时监控服务器和程序有没有坏,一旦发现机器卡死、程序崩溃,直接把故障节点 / 故障实例踢出集群,避免影响整体业务。
- 底层硬件屏蔽
- 开发写代码不用管程序跑在哪台机器、服务器够不够用,编排工具自动安排运行位置,对开发来说底层就像一台资源用不完的超级电脑。
- 资源优化
- 自动把容器分摊到空闲服务器上,充分榨干机器性能、省钱;分配时会遵守你设定的限制:比如内存上限、端口占用、程序依赖、健康条件等规则。
- 服务高可用
- 就算某台服务器彻底坏了,工具会立刻在别的好机器上重新拉起对应的程序,保证业务不中断。
一句话总概括
容器编排工具(代表 Kubernetes)把一堆服务器整合为统一资源池,全自动完成程序部署、扩容缩容、故障巡检、资源合理分配,机器坏了自动转移业务,开发不用操心底层硬件细节,省心省钱还稳定。
二: k8s简介
概念
-
Kubernetes是一个完备的分布式系统支撑平台,具有完备的集群管理能力,多扩展多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和发现机制、內建智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制以及多粒度的资源配额管理能力。
-
同时Kubernetes提供完善的管理工具,涵盖了包括开发、部署测试、运维监控在内的各个环节。
关键特征
- 服务进程(Service)
咱们跑的 Redis、网站、数据库这类程序,都是靠 IP + 端口对外提供服务。
但容器会经常重启、漂移到别的机器,后端程序的 IP 会变,传统方式调用很麻烦。
K8s 里的 Service 是固定不变的访问入口,自带负载均衡和故障自愈:
不管后端多少个程序实例、哪怕实例崩了重建换 IP,外部只用访问 Service 固定地址,完全感知不到后端变动。每个后端程序实例对应一个 Endpoint(IP + 端口)。
- 隔离功能(Pod、Label 标签)
容器能把程序隔离开,K8s 就用最小单元 Pod 来装一组相关容器。
给每个 Pod 贴专属标签(比如`name=mysql`),Service 通过**标签选择器**匹配对应标签的 Pod,自动绑定,实现 Service 和后端程序的关联。
- 集群管理(Master / Node 两种节点)
集群机器分成两类:
- Master 主控节点:管整个集群大脑,负责调度、扩容、监控、权限控制,全自动运维;
- Node 工作节点:真正跑业务 Pod,上面的 kubelet 负责管理 Pod 生命周期,kube-proxy 实现 Service 的负载均衡。
- 扩容管理(RC 控制器,现在多用 Deployment)
传统系统手动加机器、扩服务特别麻烦,K8s 靠 RC 解决自动扩容缩容:
RC 配置里写三件事:要什么 Pod 模板、需要跑多少份副本、匹配哪个 Pod 标签。
创建 RC 后它会 24 小时盯着 Pod 数量:如果程序崩了、副本少了,自动新建 Pod 调度到空闲节点,直到达到设定数量,全程不用人工操作。
三: k8s资源(面试重点)
K8S资源是声明式的配置对象(如 Pod、Deployment、Service),用来描述你想在集群里运行什么、怎么运行。
- 类比:K8S 资源 = 餐厅里的桌椅、菜单、订单、食材
Master
Master(管理结点)主要负责 资源调度,控制副本,和提供统一访问集群的入口。
# 一: 编写执行Deployment(管理POD)
Deployment(调度器,POD管理器)是一个更高层次的API对象,它管理ReplicaSets和Pod(创建,管理pod),并提供声明式更新等功能
# 二: 查看Event事件
是一个针对Pod的事件记录,记录了事件最早产生的时间、最后重复时间、重复次数、发起者、类型,以及导致此事件的原因等信息。Event通常关联到具体资源对象上,是排查故障的重要参考信息
Node
- Node是Kubernetes集群架构中运行Pod的服务节点(亦叫agent或minion)。Node是Kubernetes集群操作的单元,用来承载被分配Pod的运行,是Pod运行的宿主机,由Master管理,并汇报容器状态给Master,同时根据Master要求管理容器生命周期。
# 一: Namespace(命名空间)
Namespace 就是给集群做逻辑分区,方便多人 / 多环境共用一套服务器,只分开管理权限和资源,不切断 Pod 之间的网络。想彻底断网隔离,得额外开防火墙规则(NetworkPolicy)。
# 二: Pod(包括Pause容器和业务容器)
Pause容器: Pause 先搭建好统一网络环境,所有业务容器共享一套网卡、IP,内部直接localhost互访;网络全部由 pause 接管,业务容器只负责跑业务,不用管网络配置。
业务容器:就是你真正要跑的服务:Nginx、MySQL、Tomcat、后端项目这些,全部依附 pause 提供的网络环境运行,不能单独存在。
# 三: label
Label = 自定义贴纸;Selector = 按贴纸筛选物品的规则,K8s 靠贴纸实现自动管控、负载分发。
四: k8s架构和组件(面试重点)
架构

组件
K8S组件是独立进程 / 程序(如 kube-apiserver、kube-scheduler),不是容器。它们运行在 Master 或 Node 上,管理整个集群
master
集群控制节点,负责整个集群的管理和控制,包含以下组件:
# 一: Kubernetes API Server(k8s入口)
k8s系统入口,封装了增删改查操作(通过kubectl命令操作),通过RESTful API接口方式提供给外部客户和内部组件调用.
维护的REST对象持久化到Etcd中存储。
# 二: Kubernetes Scheduler(结点选择,资源调度)
为新建立的Pod进行节点(node)选择(即分配机器),负责集群的资源调度。组件抽离,可以方便替换成其他调度器。
# 三: Kubernetes Controller(控制器,保证程序正常运行)
控制器,目的是保证k8s正常运行。
# 四: 数据库组件(保存集群状态数据)
etcd数据库,可以部署到master上,也可以独立部署
是分布式键值存储系统。用于保存集群状态数据,比如Pod、Service等对象信息。
node
Node节点才是Kubernetes集群中的工作负载节点,每个Node都会被Master分配一些工作负载(Docker容器),当某个Node宕机,其上的工作负载会被Master自动转移到其他节点上去。
# 1.0 kubelet
- kubelet是运行在集群每个结点的守护进程
- 是master与node的桥梁
- 负责管理容器,Kubelet会从Kubernetes API Server接收Pod的创建请求,启动和停止容器,监控容器运行状态并汇报给Kubernetes API Server。
# 2.0 Kubernetes Proxy(为pod创建代理服务)
Kubernetes Proxy会从Kubernetes API Server获取所有的Service信息,并根据Service的信息创建代理服务,实现Service到Pod的请求路由和转发,从而实现Kubernetes层级的虚拟转发网络。
# 3.0 Docker Engine(docker)
Docker引擎,负责本机的容器创建和管理工作;
五: k8s常用镜像仓库
| 名称 | 内容 |
|---|---|
| daocloud的docker镜像库 | docker run -d -P m.daocloud.io/docker.io/library/nginx |
| docker-hub的k8s镜像库 | registry.cn-hangzhou.aliyuncs.com/google_containers |
| aliyun的k8s镜像库 | registry.cn-hangzhou.aliyuncs.com/google-containers |
| aliyun的docker镜像库web页面 | https://cr.console.aliyun.com/cn-hangzhou/images |
| google的镜像库web页面 | https://console.cloud.google.com/gcr/images/google-containers?project=google-containers |
更多推荐
所有评论(0)