kubernetes 基本概念

  文章内容有部分来源于

  https://znunwm.top/archives/k8s-xiang-xi-jiao-cheng#5.-pod%E8%AF%A6%E8%A7%A3

   学习的目标是适用yml配置文件,使我们要构建的点描述出来。

  Kubernetes(简称 K8s)是一个开源的容器编排平台,旨在自动化容器化应用程序的部署、扩展和管理。它提供了丰富的功能集,包括但不限于声明式配置、自我修复、负载均衡和服务发现等。

  Kubernetes本质是一组服务器集群,它可以在集群的每个节点上运行特定的程序,来对节点中的容器进行管理。目的是实现资源管理的自动化,主要提供了如下的主要功能:

  • 自我修复:一旦某一个容器崩溃,能够在1秒中左右迅速启动新的容器
  • 弹性伸缩:可以根据需要,自动对集群中正在运行的容器数量进行调整
  • 服务发现:服务可以通过自动发现的形式找到它所依赖的服务
  • 负载均衡:如果一个服务起动了多个容器,能够自动实现请求的负载均衡
  • 存储编排:可以根据容器自身的需求自动创建存储卷

以下是关于 Kubernetes 的一些关键知识点。

1.3 kubernetes组件

  master:集群的控制平面,负责集群的决策 ( 管理 )

  • ApiServer : 资源操作的唯一入口,接收用户输入的命令,提供认证、授权、API注册和发现等机制
  • Scheduler : 负责集群资源调度,按照预定的调度策略将Pod调度到相应的node节点上
  • ControllerManager : 负责维护集群的状态,比如程序部署安排、故障检测、自动扩展、滚动更新等
  • Etcd :负责存储集群中各种资源对象的信息

 node:集群的数据平面,负责为容器提供运行环境 ( 干活 )

  • Kubelet : 负责维护容器的生命周期,即通过控制docker,来创建、更新、销毁容器
  • KubeProxy : 负责提供集群内部的服务发现和负载均衡
  • Docker : 负责节点上容器的各种操作

 

   下面,以部署一个nginx服务来说明kubernetes系统各个组件调用关系:

    1.首先要明确,一旦kubernetes环境启动之后,master和node都会将自身的信息存储到etcd数据库
    2.一个nginx服务的安装请求会首先被发送到master节点的apiServer组件
    3.apiServer组件会调用scheduler组件来决定到底应该把这个服务安装到哪个node节点上
  4.在此时,它会从etcd中读取各个node节点的信息,然后按照一定的算法进行选择,并将结果告知apiServer
  5.apiServer调用controller-manager去调度Node节点安装nginx服务
    6.kubelet接收到指令后,会通知docker,然后由docker来启动一个nginx的pod
    7.pod是kubernetes的最小操作单元,容器必须跑在pod中至此,
    8.一个nginx服务就运行了,如果需要访问nginx,就需要通过kube-proxy来对pod产生访问的代理
  这样,外界用户就可以访问集群中的nginx服务了

  kubernetes概念

  • Master:集群控制节点每个集群需要至少一个master节点负责集群的管控
  • Node:工作负载节点,由master分配容器到这些node工作节点上,然后node节点上的docker负责容器的运行
  • Pod:kubernetes的最小控制单元,最小的可部署单元,容器都是运行在pod中的,一个pod中可以有1个或者多个容器
  • Controller:控制器,通过它来实现对pod的管理,比如启动pod、停止pod、伸缩pod的数量等等
  • Service:定义了一组 Pod 的逻辑集合和访问策略,pod对外服务的统一入口,下面可以维护者同一类的多个pod
  • Label:标签,用于对pod进行分类,同一类pod会拥有相同的标签
  • NameSpace:命名空间,用来隔离pod的运行环境
  • Deployment:用于声明式地管理和更新无状态应用程序的状态。它可以确保指定数量的 Pod 副本始终处于运行状态,并支持滚动更新和回滚。Deployment 是最常用的控制器之一,适用于大多数 Web 应用程序
  • StatefulSet:与 Deployment 类似,但专为有状态应用设计提供有序的部署、扩展和删除操作,以及持久化的存储。StatefulSet 保证了 Pod 的唯一身份标识和顺序启动/终止特性
  • DaemonSet:确保所有(或某些)节点上运行一个 Pod 的副本,常用于日志收集、监控等全局服务。DaemonSet 保证每个符合条件的节点上都有一个 Pod 运行。
  • Job 和 CronJob:Job 用于执行一次性任务,而 CronJob 则用于定时执行任务。两者都适合批处理作业或其他非长期运行的服务。
  • ConfigMap 和 Secret:用于将配置数据和敏感信息(如密码)从镜像中分离出来,以便更安全地管理和更新。ConfigMap 和 Secret 可以被 Pod 作为环境变量或挂载为文件系统的一部分使用。
  • Volume:用于挂载持久存储到 Pod 中,支持多种类型的存储后端,如本地磁盘、云存储等。Volume 确保了 Pod 在重启或迁移时能够保持其数据不变

  2.控制器(Controller)

  控制器通过 API Server 监控集群的状态,并根据需要创建、更新或删除资源来达到期望的状态。常见的控制器包括:  

  • ReplicaSet:确保指定数量的 Pod 副本保持运行。通常由 Deployment 控制器自动创建和管理。
  • Horizontal Pod Autoscaler (HPA):根据 CPU 使用率或其他自定义指标自动调整 Pod 数量。HPA 可以根据预设规则动态增加或减少 Pod 的数量,以适应流量的变化

    3.API Server

  API Server 是 Kubernetes 控制平面的前端,提供了 RESTful 接口供用户和其他组件与集群交互。所有的集群管理操作都是通过 API Server 进行的。API Server 不仅负责接收来自用户的请求,还负责验证、授权以及将命令分发给其他控制平面组件。

  4.etcd

  etcd 是一个高可用的键值存储系统,用于保存集群的所有配置数据和状态信息。它是 Kubernetes 控制平面的一部分,确保数据的一致性和持久性。etcd 在 Kubernetes 架构中扮演着至关重要的角色,因为它存储了所有集群级别的元数据

  5. 调度器(Scheduler)

      调度器负责决定将 Pod 分配到哪个节点上运行。它会考虑各种因素,如资源需求、亲和性规则、污点和容忍度等,以实现最佳的资源利用率和性能。调度器在选择节点时还会考虑到节点的健康状况和当前负载情况

  6. kubelet

  kubelet 是运行在每个节点上的代理,负责与 API Server 通信并管理该节点上的 Pod 生命周期。它还会定期向 API Server 汇报节点的状态。kubelet 是 Kubernetes 架构中的重要组成部分,它确保了 Pod 在节点上的正确执行

  7. kube-proxy

  kube-proxy 是 Kubernetes 网络代理,运行在每个节点上,维护网络规则并执行流量转发,以确保 Service 和 Pod 之间的正确通信。kube-proxy 支持多种模式,包括 iptables 和 IPVS,以优化网络性能

  8. CNI(Container Network Interface)

  CNI 是一种标准接口,用于定义容器网络插件Kubernetes 支持多种 CNI 插件,如 Calico、Flannel、Weave Net 等,以满足不同的网络需求。CNI 插件允许容器之间进行跨主机通信,并且对于多租户环境至关重要

  9. Ingress

  Ingress 是一种 API 对象,用于管理外部对集群内服务的 HTTP(S) 访问。它通常与 Ingress Controller 结合使用,后者实现了路由规则并将流量分发给适当的服务。Ingress 提供了比普通 Service 更灵活的入口点配置选项

  10. Helm

  虽然不是 Kubernetes 的一部分,但 Helm 是一个流行的包管理工具,用于简化 Kubernetes 应用程序的部署和管理。它允许你通过 Chart 来打包、分发和安装复杂的 Kubernetes 应用。Helm 使得复杂应用的部署变得更加简单和可重复

  11. 安全性

  • RBAC(基于角色的访问控制):用于定义和限制用户、服务账户对集群资源的访问权限。RBAC 确保只有授权用户才能执行特定的操作,增强了集群的安全性

  • Network Policies:用于定义 Pod 之间的网络通信规则,增强网络安全。Network Policies 可以限制哪些 Pod 可以相互通信,从而减少潜在的安全风险

TLS 加密:确保 API Server 和其他组件之间的通信安全。TLS 加密防止了中间人攻击,并保护敏感信息免受窃听

  12. 日志和监控

  • Prometheus:常用的监控解决方案,支持多维度数据模型和灵活的查询语言。Prometheus 可以收集集群内的各种指标,并提供警报机制,帮助运维人员及时发现问题
  • ELK Stack (Elasticsearch, Logstash, Kibana) 或 EFK Stack (Elasticsearch, Fluentd, Kibana):用于集中收集、处理和可视化日志数据。这些工具可以帮助开发者分析日志,快速定位问题所在
posted @ 2024-12-26 22:26  洛飞  阅读(6)  评论(0编辑  收藏  举报