一.k8s的概念篇
1.k8s的概念
- Kubernetes
- 功能定位:面向大规模容器化应用的集群管理,提供自动化部署、扩展、服务发现和故障恢复能力,适用于复杂分布式系统。
- 架构设计:基于多节点集群(Master/Node),包含Pod、Deployment、Service等核心组件,支持跨主机编排。
- 自动化运维
- 自我修复:自动重启失败的容器、替换故障节点,并确保服务在健康检查通过后才对外暴露。
- 滚动更新与回滚:通过声明式配置逐步更新应用版本,若出现问题则自动回滚至稳定状态。
- 负载均衡与服务发现:为容器组(Pod)提供稳定的DNS名称或IP地址,动态分配流量以避免单点故障。
- 弹性伸缩
- 支持手动或基于CPU/内存使用率的自动扩缩容,适应业务流量波动。
- 例如,电商大促时可快速扩展实例,低峰期自动回收资源以节省成本。
- 跨平台与多云支持
- 可在公有云、私有云及混合云环境中运行,实现应用的跨云迁移和统一管理。
- 亚马逊云、腾讯云等主流平台均提供托管Kubernetes服务(如EKS、TKE)。
- 资源优化与编排
- 根据容器声明的CPU/内存需求,智能调度Pod到最优节点,提升集群利用率。
- 支持多种存储系统(如NFS、云存储)的自动挂载。
2.K8s的功能优点
Kubernetes(k8s)作为容器编排领域的标杆工具,其核心功能和优势使其成为企业级应用和云原生架构的首选。以下是其核心功能与优点的详细解析:
一、核心功能
- 自动化容器编排
- 智能调度:根据资源需求(CPU/内存)、节点亲和性(Node Affinity)等策略,自动将容器调度到最优节点。
- 滚动更新:逐步替换旧版本容器,确保服务不中断,支持自定义更新策略(如分批发布)。
- 回滚机制:若新版本异常,自动回退至历史稳定版本,降低发布风险。
- 服务发现与负载均衡
- Service:为动态变化的Pod提供稳定访问入口(ClusterIP、NodePort、LoadBalancer),通过标签选择器(Label Selector)关联后端Pod。
- Ingress:管理外部访问路由,支持基于域名或路径的流量分发(如Nginx Ingress)。
- 弹性伸缩
- HPA(Horizontal Pod Autoscaler):基于CPU、内存或自定义指标(如QPS)自动扩缩Pod数量。
- VPA(Vertical Pod Autoscaler):动态调整单个Pod的资源配额,优化资源利用率。
- Cluster Autoscaler:根据负载自动增减集群节点(云环境下)。
- 自我修复
- 健康检查:通过存活探针(Liveness Probe)重启不健康的容器,就绪探针(Readiness Probe)确保流量只路由到就绪实例。
- 故障转移:节点宕机时,自动在其他节点重建Pod,保障服务可用性。
- 存储管理
- PV/PVC:抽象存储资源,支持动态卷供给(Dynamic Provisioning),适配云存储、NFS等多种存储类型。
- StatefulSet:为有状态应用(如数据库)提供持久化存储和有序部署能力。
- 配置与密钥管理
- ConfigMap:将配置信息(如环境变量)与容器镜像解耦,实现配置热更新。
- Secret:安全存储敏感数据(如密码、证书),支持Base64编码和加密存储。
二、核心优势
- 高可用性与可靠性
- 通过多副本(ReplicaSet)和跨节点分布,避免单点故障。
- 结合etcd的分布式一致性,确保集群状态强一致。
- 多云与混合云支持
- 无缝运行在AWS、Azure、腾讯云等公有云,或OpenStack、VMware私有云。
- 通过Kubefed实现多集群联邦,统一管理跨云资源。
- 资源利用率优化
- 通过资源配额(Resource Quota)和限制(LimitRange),避免资源争抢。
- 基于Bin Packing算法调度,减少碎片化资源浪费。
- 丰富的扩展能力
- CRD(Custom Resource Definition):自定义资源类型,扩展API功能。
- Operator模式:通过自定义控制器管理复杂应用(如Prometheus Operator)。
- CNI/CSI插件:支持灵活的网络和存储方案(如Calico、Ceph)。
- 强大的生态系统
- 监控:集成Prometheus、Grafana实现指标采集与可视化。
- 日志:通过EFK(Elasticsearch+Fluentd+Kibana)集中管理日志。
- CI/CD:与Jenkins、Argo CD等工具对接,实现自动化流水线。
- 服务网格:结合Istio,提供细粒度流量控制和安全策略。
- 社区与企业级支持
- 活跃社区:CNCF基金会背书,版本迭代快(每3-4个月发布新版本)。
- 商业支持:Red Hat OpenShift、Rancher等企业级发行版提供SLA保障。
三、适用场景
- 微服务架构
管理数百个服务实例,通过Service Mesh实现服务间通信治理。 - 大规模Web应用
自动扩缩应对流量高峰,如电商大促、在线教育直播。 - 数据处理与分析
运行Spark、Flink等批处理作业,自动重试失败任务。 - AI/机器学习
分布式训练任务调度,GPU资源动态分配。 - 边缘计算
通过KubeEdge将容器编排能力延伸至边缘设备。
四、对比其他工具的独特优势
| 功能项 | Kubernetes | Docker Swarm | 1Panel |
|---|---|---|---|
| 集群规模 | 支持数千节点的大规模集群 | 适合中小规模(≤100节点) | 单机/小规模 |
| 扩展性 | 通过CRD、Operator深度扩展 | 仅支持基础插件 | 依赖Docker生态 |
| 自动化能力 | 内置HPA、自愈、滚动更新等高级功能 | 仅支持基础扩缩容 | 无自动化扩缩容 |
| 生态系统 | 丰富的工具链(Helm、Istio等) | 生态较弱 | 应用商店模板为主 |
| 学习曲线 | 陡峭,需掌握核心概念和YAML | 简单,类似Docker CLI | 极低,图形化操作 |
3.k8s集群架构
一、节点架构图

二、多master节点高可用架构图

三、k8s组件

控制平面组件(API Server、Scheduler、Controller Manager、etcd)负责集群的管理和协调。
工作节点组件(Kubelet、Kube-proxy、Calico、CoreDNS、Docker)负责运行和管理应用程序。
控制平面(Master)组件
1. API Server
- 作用:API Server 是 Kubernetes 集群的统一入口,负责处理所有来自用户、工具或内部组件的 API 请求。提供了k8s各类资源对象(pod、deployment、service等)的增删改查、是整个系统的数据总线和数据中心、并提供认证、授权、访问控制、api注册和发现等机制、并将操作对象持久化到etcd中。
- 功能:
- 接收来自
kubectl或其他客户端的指令。 - 验证请求的合法性。
- 将请求转换为对集群状态的修改(如创建、更新、删除资源)。
- 提供集群状态的查询接口。
- 接收来自
- 重要性:它是集群的“大脑”,所有集群操作都通过 API Server 进行。
2. Scheduler
- 作用:Scheduler 负责将新创建的 Pod 分配到合适的工作节点上。
- 功能:
- 根据 Pod 的资源需求(CPU、内存等)和节点的资源情况,选择最合适的节点。
- 考虑亲和性和反亲和性规则(例如,将 Pod 放在靠近某些服务的节点上,或避免放在某些节点上)。
- 确保 Pod 的分布符合高可用性和性能要求。
- 重要性:它决定了 Pod 的部署位置,直接影响集群的资源利用率和性能。
3. Controller Manager
- 作用:Controller Manager 是一个后台线程,负责运行各种控制器,确保集群的实际状态与期望状态一致。负责集群内的Node、Pod、服务端点(Endpoint)、命名空间(Namespace)、服务账号(ServiceAccount)、资源定额(ResourceQuota)的管理、当某个Node意外宕机时、Controller Manager会及时发现并执行自动化修复流程、确保集群处于预期的工作状态。
- 功能:
- Replication Controller:确保指定数量的 Pod 副本始终运行。
- Deployment Controller:管理 Deployment 资源,实现应用的滚动更新和扩缩容。
- DaemonSet Controller:确保每个节点上运行指定的 Pod(如日志收集器)。
- Job Controller:管理一次性任务(如数据库备份)。
- Node Controller:监控节点状态,标记不健康的节点。
- 重要性:它是集群的“管家”,负责维护集群的稳定性和一致性。
4. etcd
- 作用:etcd 是一个轻量级、分布式的键值存储系统,用于存储 Kubernetes 集群的所有状态信息。etcd中的数据变更是通过API SERVER进行的。
- 功能:
- 存储集群的配置信息(如节点信息、Pod 配置、Service 等)。
- 提供数据的持久化和高可用性。
- 支持事务操作,确保集群状态的一致性。
- 重要性:它是集群的“数据库”,所有集群状态都依赖于 etcd 的存储。如果 etcd 出现问题,整个集群可能会瘫痪。
工作节点(Worker)组件
1. Kubelet
- 作用:Kubelet 是在每个工作节点上运行的代理,负责管理 Pod 的生命周期。定期默认每10s(可调)调用apiserver的REST接口报告自身状态、API server接收这些信息后、将节点状态更新到ETCD中、kubelet也通过API server监听Pod信息、从而对Node机器上的Pod进行管理、如创建、删除、更新Pod。
- 功能:
- 确保容器运行在 Pod 中,并按照定义启动和停止。
- 监控容器的健康状态,定期向控制平面报告 Pod 的状态。
- 管理 Pod 的存储卷、网络配置等。
- 重要性:它是工作节点的“管家”,确保 Pod 按照定义运行。
2. Kube-proxy
- 作用:Kube-proxy 是 Kubernetes 网络代理,负责实现 Service 的网络功能和负载均衡。是实现service的通信与负载均衡机制的重要组件、负责为pod创建代理服务、从api service获取所有service信息、并根据service信息创建代理服务、实现service到POD的请求路由和转发、从而实现k8s层级的虚拟转发网络、将到service的请求转发到后端的Pod上。
- 功能:
- 为每个 Service 提供一个虚拟 IP(ClusterIP),并将其转发到后端 Pod。
- 支持负载均衡,将请求分发到多个 Pod。
- 维护节点的网络规则,确保 Pod 之间的通信。
- 重要性:它实现了 Kubernetes 的服务发现和负载均衡功能。
3. Calico
- 作用:Calico 是一种开源的网络插件,用于实现 Kubernetes 集群的网络管理。
- 功能:
- 提供 Pod 之间的网络连接。
- 支持网络策略(Network Policies),控制 Pod 之间的通信。
- 实现跨节点的网络通信,确保 Pod 可以在不同节点之间通信。
- 重要性:它是集群网络的“基础设施”,确保 Pod 之间的网络隔离和安全。
4. CoreDNS
- 作用:CoreDNS 是 Kubernetes 的默认 DNS 服务,用于实现服务发现。
- 功能:
- 为每个 Service 提供 DNS 解析,方便 Pod 通过域名访问服务。
- 提供缓存功能,加速 DNS 查询。
- 支持自定义解析规则。
- 重要性:它使得 Pod 可以通过域名访问其他服务,简化了服务间的通信。
5. Docker
- 作用:Docker 是一种容器运行时,用于运行容器。
- 功能:
- 拉取镜像并创建容器。
- 管理容器的生命周期(启动、停止、删除)。
- 提供容器的隔离环境。
- 重要性:它是容器的“运行环境”,虽然 Kubernetes 也支持其他容器运行时(如 containerd),但 Docker 是最常用的。
4.k8s的基本概念和术语
1. Master
- 定义:集群控制节点、在每个Kubernetes集群里都需要有一个master来负责整个集群的管理和控制、基本上所有K8s的所有控制命令都发给它、它负责具体的执行过程、我们后面执行的所有命令基本上都是在master上运行的、master通常会占据一个独立的服务器(高可用部署建议用三台服务器)、是整个集群的首脑、如果它宕机、或者不可用、那么集群内容器应用的管理都将失效。
- 作用:通过集群,Kubernetes 可以实现资源的统一管理和应用的分布式运行,提供高可用性和可扩展性。
2. 集群(Cluster)
- 定义:集群是由一组节点(Node)组成的集合,这些节点可以是物理服务器或虚拟机。
- 作用:通过集群,Kubernetes 可以实现资源的统一管理和应用的分布式运行,提供高可用性和可扩展性。
3. 节点(Node)
- 定义:节点是 Kubernetes 集群中的工作机器,分为控制平面节点(Master Node)和工作节点(Worker Node)。除了master、k8s集群中的其他机器被称为Node、Node是K8s集群中的工作负载节点、每个Node都会被Master分配一些工作负载(Docker容器)、当某个Node宕机时、其上的工作负载会被Master自动转移到其他节点上面。
- 每个Node上都运行着以下关键进程
- kubelet:负责Pod对应的容器的创建、启动停止等任务、同时与Master密切协作、实现集群管理的基本功能。
- kube-proxy:实现k8s service的通信与负载均衡机制的重要组件。
- Docker Engine:docker引擎,负责本机的容器创建和管理工作。
- 控制平面节点:运行控制平面组件,负责管理和协调整个集群。
- 工作节点:运行用户的应用程序容器。
4. Pod
- 定义:Pod 是 Kubernetes 中最小的可部署单元,它是一个或多个容器的集合,这些容器共享存储和网络。每个pod都有一个特殊的被称为根容器的Pause的容器、Pause容器对应的镜像属于K8S平台的一部分、处理Pause容器、每个Pod还包含一个或多个紧密相关的用户业务容器。pause也叫初始化容器、主要为pod提供共享网络、volume等。

- 特点:
- Pod 中的容器共享同一个网络命名空间,因此可以使用
localhost相互通信。 - Pod 有自己独立的存储卷,可以供多个容器共享。
- Pod 中的容器共享同一个网络命名空间,因此可以使用
- 作用:Pod 用于封装应用的容器,提供了比单个容器更强大的功能,比如数据共享和协同工作。
为什么会有一个pod容器
**原因一:**在一组容器作为一个单元的情况下、我们难以简单地对整体进行判断及有效的行动、比如一个容器死亡了、此时算是整体死亡嘛、是N/M的死亡率嘛?引入业务无关的pause容器作为pod的根容器、以它的状态代表整个容器组的状态、就简单巧妙的解决了这个难题。
**原因二:**pod里的多个业务容器共享pause容器的IP、共享Pause容器挂接的Volume、这样既简化了密切关联的Pause容器之间的通信问题、也很好的解决了它们之间的文件共享问题。
5. 服务(Service)
- 定义:Service 是一组提供相同功能的 Pod 的集合,并且可以通过 DNS 名称访问。
- 特点:
- Service 提供一个稳定的虚拟 IP(ClusterIP)和端口。
- Service 可以实现负载均衡,将请求分发到后端的 Pod。
- 作用:Service 用于实现服务发现和负载均衡,使得应用之间的通信更加方便。
6. 部署(Deployment)
- 定义:Deployment 是一种控制器,用于管理应用程序的部署和更新。
- 功能:
- 声明应用程序的期望状态,如副本数量、容器镜像等。
- 自动处理 Pod 的创建、更新和删除。
- 支持滚动更新和回滚。
- 作用:Deployment 用于实现应用的自动化部署和版本管理。
7. ReplicaSet
- 定义:ReplicaSet 是另一种控制器,用于确保特定数量的 Pod 副本始终运行。
- 作用:ReplicaSet 保证应用的高可用性,当 Pod 失效时自动替换。
- 与 Deployment 的关系:Deployment 通常会创建 ReplicaSet 来管理 Pod 的副本。
8. Job
- 定义:Job 是一种控制器,用于运行仅执行一次的任务。
- 特点:
- Job 会一直运行,直到任务完成。
- 支持并行执行。
- 作用:Job 用于执行批处理任务,如数据备份、日志分析等。
8. ConfigMap 和 Secret
- ConfigMap:
- 定义:用于存储配置数据的键值对。
- 作用:将配置与容器镜像分离,方便配置的动态更新。
- Secret:
- 定义:用于存储敏感信息,如密码、密钥等。
- 作用:安全地存储和传递敏感信息,避免直接暴露在配置文件中。
9. PersistentVolume(PV)和 PersistentVolumeClaim(PVC)
- PersistentVolume(PV):
- 定义:PV 是集群中的存储资源,由管理员配置。
- 作用:为用户提供存储空间,数据可以持久化保存。
- PersistentVolumeClaim(PVC):
- 定义:PVC 是用户对存储资源的请求。
- 作用:用户通过 PVC 申请特定大小和访问模式的存储,Kubernetes 会根据 PVC 的要求分配合适的 PV。
10. Namespace(命名空间)
- 定义:Namespace 是一种用于隔离集群资源的机制。
- 作用:
- 将集群资源划分为多个虚拟集群,便于多团队或项目的管理。
- 可以通过 Namespace 控制资源的访问权限。
11. 节点选择器(Node Selector)
- 定义:Node Selector 是一种机制,用于将 Pod 调度到特定的节点上。
- 作用:通过标签选择器匹配节点的标签,实现 Pod 的定向调度。
12. 污点和容忍(Taints and Tolerations)
- 污点(Taints):
- 定义:污点是一种标记,用于阻止 Pod 被调度到特定的节点上。
- 作用:保护节点资源,避免不必要的 Pod 被调度到关键节点。
- 容忍(Tolerations):
- 定义:容忍是一种机制,用于使 Pod 忽略节点的污点。
- 作用:允许特定的 Pod 被调度到带有污点的节点上。
13. 水平扩展(Horizontal Scaling)
- 定义:水平扩展是指通过增加或减少 Pod 副本来调整应用的容量。
- 作用:根据负载动态扩展应用,提高资源利用率。
14. 容器运行时(Container Runtime)
- 定义:容器运行时是用于运行容器的软件。
- 常见运行时:Docker、containerd 等。
- 作用:负责容器的创建、启动、停止和删除等操作。