k8s之基础组件说明

目录

前言

优势

微服务架构

自动化部署

弹性伸缩

多租户环境

持续集成和持续部署

K8S 架构

1.1 Master 节点

1.1.1 API Server

1.1.2 Etcd

1.1.3 Controller Manager

1.1.4 Scheduler

1.2 Node 节点

1.2.1 kubelet

1.2.2 kube-proxy

1.2.3 容器

1.3 组件与插件

1.3.1 CoreDNS

1.3.2 Dashboard

1.3.3 Heapster

1.3.4 Ingress Controller

1.3.5 Federation

1.4 pod概念

理解总结



前言

K8S,全称 Kubernetes,是一个用于管理容器的开源平台。它可以让用户更加方便地部署、扩展和管理容器化应用程序,并通过自动化的方式实现负载均衡、服务发现和自动弹性伸缩等功能。

具体来说,Kubernetes 可以将应用程序打包成容器,并将这些容器部署到一个集群中,然后自动处理容器的生命周期管理、自动扩容等操作,让用户更加专注于应用程序的开发和业务逻辑。同时,Kubernetes 还提供了一系列的资源管理机制,如资源调度、容器网络、存储编排等,控制整个容器集群的运行状态,并保证应用程序在容器集群中的高可用性和可靠性。

总之,Kubernetes 提供了一种优秀的容器化应用程序管理解决方案,可以让用户更加轻松地部署、扩展和管理容器化应用程序,提高应用程序的可靠性和稳定性。

优势

  • 微服务架构

Kubernetes 可以将微服务打包成容器,并将这些容器部署到一个集群中,并且在多个容器之间提供负载均衡和服务发现等功能,帮助用户更加方便地管理复杂的微服务架构。

  • 自动化部署

Kubernetes 可以根据用户自定义的部署规范,自动将应用程序部署到指定的服务器或容器中,提高了部署的标准化和自动化程度,减少了出错可能性和手工操作的繁琐性。

  • 弹性伸缩

Kubernetes 可以根据应用程序的负载情况,进行自动的容器伸缩操作,让用户可以更加高效地利用资源并提高应用程序的性能和可靠性。

  • 多租户环境

Kubernetes 支持多租户环境,可以为不同的用户或部门提供独立的 Kubernetes 集群,并管理这些集群的资源配额、权限控制等,帮助用户更好地管理多个租户共享的资源。

  • 持续集成和持续部署

Kubernetes 可以与持续集成和持续部署工具集成,实现自动化部署、测试、发布等操作,可以大大提高开发和发布效率。

K8S 架构

Kubernetes 中一个集群通常由多个节点(Node)组成,其中 Master 节点作为整个集群的控制中心,主要负责集群的管理和调度工作。

1.1 Master 节点

1.1.1 API Server

API Server 是 Kubernetes 最核心的组件之一,它提供了 Kubernetes 集群中各个组件之间的通信和管理接口,所有操作都需要通过 API Server 发起和处理。当用户使用 kubectl 命令或者其他 Kubernetes 客户端工具时,实际上是通过 API Server 和集群进行交互的。

1.1.2 Etcd

Etcd 是 Kubernetes 集群中的分布式键值存储系统,用于保存集群中的所有状态信息和元数据。所有与 Kubernetes 集群相关的信息,包括 Pod、Service、Deployment 等对象的创建、更新和删除等操作,都将被记录在 Etcd 中。(持久化数据)这样可以使得 Kubernetes 系统具有高可用性和复原能力,并且允许多个 Master 节点之间进行数据同步和共享。

1.1.3 Controller Manager

Controller Manager 是 Kubernetes 集群中的另一个核心组件,它负责监控和维护集群中所有资源对象的状态,以及进行自动化控制和管理操作。Controller Manager 中包含多个控制器,每个控制器负责监控和维护一种资源对象的状态,如 Deployment、ReplicaSet、DaemonSet 等,同时根据用户的需求,自动进行相应的容器调度、扩容、缩容等操作。

1.1.4 Scheduler

Scheduler 是 Kubernetes 集群中的另一个重要组件,主要负责根据集群中各个节点的负载情况,以及用户的调度策略,将新创建的 Pod 分配到合适的节点上。Scheduler 会根据 Pod 的资源需求、节点的资源情况、节点之间的网络距离等因素进行智能调度,从而实现负载均衡和资源最大化利用的目标。


1.2 Node 节点

除了 Master 节点外,Kubernetes 集群中还包括多个 Node 节点,它们是容器化应用程序真正运行的地方。

1.2.1 kubelet

kubelet 是运行在每个 Node 节点上的代理程序,它负责与 Master 节点上的 API Server 进行通信,并根据 Master 节点下发的指令,调度和管理本地节点上的容器。kubelet 可以监控本地节点上的容器状态,如启动、停止、健康状况等,并定期向 Master 节点报告节点状态信息。

1.2.2 kube-proxy

kube-proxy 是 Kubernetes 集群中的网络代理组件,它主要负责实现集群内 Service 的负载均衡和访问控制等功能。每个 Node 节点上都会部署一个 kube-proxy 组件,负责写入规则至iptables,IPVS,实现服务映射访问的

1.2.3 容器

容器运行时是 Kubernetes 中用于运行容器的底层组件,它负责将容器镜像转换为可以运行的进程,并提供容器的隔离、资源管理和网络管理等功能。Kubernetes 支持多种容器运行时,如 Docker、CRI-O、containerd 等,用户可以根据实际需求选择合适的容器运行时。容器运行时通常与 kubelet 紧密集成,在 Kubernetes 集群中发挥着至关重要的作用。


1.3 组件与插件

除了核心组件外,Kubernetes 还提供了许多组件和插件,以拓展其功能和实现更多的服务。以下是几个常用的 Kubernetes 组件和插件:

1.3.1 CoreDNS

Core DNS 是 Kubernetes 集群中的域名解析系统,它为集群中所有容器提供了简单而可靠的 DNS 服务。通过 Kubernetes DNS,用户可以使用容器名称或 Service 名称等别名方式,轻松地访问到集群中运行的各种应用程序和服务。

1.3.2 Dashboard

Dashboard 是 Kubernetes 集群中的 Web 界面管理工具,它提供了一个易于使用和定制化的界面,让用户可以在不熟悉命令行操作的情况下,轻松地监控和管理集群中的资源对象和应用程序。Dashboard 支持多种自定义插件和主题,用户可以根据自己的需要进行定制和扩展。

1.3.3 Heapster

Heapster 是 Kubernetes 集群中的监控工具,它可以收集和分析各种容器和节点的性能指标,并将结果汇总和展示给用户。Heapster 支持多种存储后端,如 InfluxDB、ElasticSearch 等,用户可以选择适合自己的存储方式。

1.3.4 Ingress Controller

Ingress Controller 是 Kubernetes 集群中的负载均衡和流量路由组件,它可以将外部请求路由到集群内的不同 Service 或 Pod 上,并提供了多种负载均衡算法和路由规则。Ingress Controller 支持多种后端实现,如 Nginx、HAProxy 等,用户可以根据自己的需求进行选择和配置。 以上是 Kubernetes 中一些常用的组件和插件介绍,它们可以帮助用户更加高效地管理和操作 Kubernetes 集群中的容器应用程序。Kubernetes 的丰富生态系统和庞大社区,为用户提供了各种完善的支持和解决方案,让用户可以更加轻松地使用和掌握 Kubernetes。

1.3.5 Federation

提供一个可以跨集群中心多k8s统一管理功能

1.4 pod概念

Pod 是 Kubernetes 中最小的调度和管理单元,它代表着集群中运行的一个或多个容器实例。在一个 Pod 中,所有容器共享相同的网络命名空间、进程命名空间和存储卷,因此它们可以互相通信和共享数据。Pod 可以通过控制器进行创建、扩缩容和更新等操作。

理解总结

node、控制器、pod之间的关系

  • 查看这些个pod的详细信息

当前环境一共是三台机器分别为master、node1、node2

  • 生成当前deployment的yaml文件
[root@master ~]# kubectl get deployment -n default -o yaml
apiVersion: v1
items:
- apiVersion: apps/v1
  kind: Deployment
  metadata:
    annotations:
      deployment.kubernetes.io/revision: "1"
    creationTimestamp: "2024-02-01T14:35:32Z"
    generation: 1
    name: redis-test
    namespace: default
    resourceVersion: "90681"
    selfLink: /apis/apps/v1/namespaces/default/deployments/redis-test
    uid: 9874faa8-2e18-4f76-955c-aa6537406f1a
  spec:
    progressDeadlineSeconds: 600
    replicas: 3
    revisionHistoryLimit: 10
    selector:
      matchLabels:
        app: my-redis
    strategy:
      rollingUpdate:
        maxSurge: 25%
        maxUnavailable: 25%
      type: RollingUpdate
    template:
      metadata:
        creationTimestamp: null
        labels:
          app: my-redis
      spec:
        containers:
        - image: docker.io/redis
          imagePullPolicy: IfNotPresent
          name: my-redis
          ports:
          - containerPort: 80
            protocol: TCP
          resources: {}
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
        dnsPolicy: ClusterFirst
        restartPolicy: Always
        schedulerName: default-scheduler
        securityContext: {}
        terminationGracePeriodSeconds: 30
  status:
    availableReplicas: 3
    conditions:
    - lastTransitionTime: "2024-02-01T14:35:34Z"
      lastUpdateTime: "2024-02-01T14:35:34Z"
      message: Deployment has minimum availability.
      reason: MinimumReplicasAvailable
      status: "True"
      type: Available
    - lastTransitionTime: "2024-02-01T14:35:32Z"
      lastUpdateTime: "2024-02-01T14:35:34Z"
      message: ReplicaSet "redis-test-f6cd9464d" has successfully progressed.
      reason: NewReplicaSetAvailable
      status: "True"
      type: Progressing
    observedGeneration: 1
    readyReplicas: 3
    replicas: 3
    updatedReplicas: 3
kind: List
metadata:
  resourceVersion: ""
  selfLink: ""

一个控制器有三个replicas(副本),那么这三个副本就相当于三个pod,每一个pod里运行着一个名字为redis-test的容器

所以他们之间的关系是这样的:

  • Node   就是真实的物理机或者是虚拟机,也就是容器运行的宿主机
  • 控制器 是基于pod之上的一个逻辑管理区域,定义了我希望pod的个数是三个(副本)
  • pod    就是这三个实际的redis容器
  • Deployment  控制器是工作在ReplicaSet之上的,Deployment通过控制ReplicaSet来控制pod,Deployment有ReplicaSet的所有功能

  • 即Deployment是针对ReplicaSet的更高层次的封装
  • ReplicaSet封装pod
  • pod封装容器
  • 容器运行在node节点上

注:ReplicaSet并不是我们直接使用的控制器,kubernetes建议我们使用Deployment

  • 21
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: K8s架构和组件之间通信是通过API Server实现的。K8s中的所有组件都可以通过API Server进行通信和交互,包括kubelet、kube-proxy、scheduler、controller-manager等。API Server作为K8s的核心组件,负责接收和处理所有的API请求,并将请求转发给相应的组件进行处理。同时,API Server还负责对所有的资源对象进行验证和授权,确保系统的安全性和稳定性。 ### 回答2: K8s是一个容器编排和管理系统,它由多个组件构成,这些组件之间需要进行通信以实现集群管理和应用部署等功能。 K8s的架构中包含以下几个重要组件: 1. Master组件:包括API Server、Controller Manager、Scheduler等。Master组件负责整个集群的管理和决策。它们之间需要通过API Server进行通信。API Server提供了集群内各个组件的接口,其他组件可以通过发送RESTful请求给API Server来获取和操作集群状态。 2. Node组件:包括kubelet、kube-proxy等。Node组件是运行在每个节点上的代理程序,负责与Master组件通信。kubelet是K8s的主要工作进程,它从API Server获取Pod的配置信息,然后将Pod的容器创建、启动和管理工作交给容器运行时(如Docker)。kube-proxy则负责负载均衡和网络代理。 3. Etcd:Etcd是一个分布式键值存储系统,用于存储集群的状态信息,包括节点状态、Pod定义、服务等。Master和Node组件通过与Etcd集群通信来读取和更新集群状态。 4. CNI插件:Container Network Interface(CNI)插件用于管理容器网络。它负责为Pod分配IP地址、配置容器网络和网络隔离等。不同的CNI插件可以与K8s集成,并提供网络通信能力。 以上组件之间的通信方式如下: 1. Master组件之间的通信:Master组件之间通过互相访问API Server进行通信,通过API Server获取集群状态和配置信息。 2. Master和Node组件之间的通信:Master组件与Node组件之间通过kubelet进行通信。Master通过API Server发送指令给kubelet,kubelet再调用容器运行时(如Docker)进行容器的创建和管理。 3. Node和Etcd之间的通信:Node组件通过kubelet与Etcd集群通信,从而读取和更新集群的状态信息。 4. Pod之间的通信:Pod中的容器之间可以通过localhost进行通信,它们可以互相访问和通信。同时,K8s通过CNI插件为每个Pod分配唯一的IP地址,从而允许不同节点上的Pod进行网络通信。 总体而言,K8s通过API Server、kubelet、Etcd和CNI插件等组件之间的通信来实现集群的管理和容器的部署。这些通信机制保证了集群的可靠性、可扩展性和高效性。 ### 回答3: Kubernetesk8s)是一种开源的容器编排引擎,用于管理容器化应用程序的部署、扩展和管理。k8s架构由多个组件组成,包括Master节点上的控制器组件和Worker节点上的工作组件,它们之间通过各种通信机制进行协作和通信。 首先,k8s的控制器组件和工作组件之间通常通过API服务器进行通信。API服务器是k8s集群的主要接口,所有的操作和查询都通过API服务器进行处理。控制器和工作组件通过API服务器提供的API调用各种功能,例如创建、删除和更新资源。 其次,k8s中的控制器组件和工作组件之间还利用了etcd这个分布式键值存储系统来共享集群状态信息。etcd用于存储集群中的各种配置数据和运行时状态,包括Pod、Node和Service等的信息。控制器组件和工作组件可以通过etcd的API来读取和更新这些信息,以实现集群中各个组件的一致性。 另外,k8s中的控制器组件和工作组件之间通过网络通信来实现集群的管理和调度。它们通过kube-proxy组件来管理集群内部和外部的网络连接。kube-proxy负责配置底层网络实现(如iptables或IPVS)来处理流量转发和负载均衡。控制器组件和工作组件可以通过kube-proxy建立网络连接,并通过网络传输API调用和数据。 此外,k8s的控制器组件和工作组件之间还通过事件系统进行通信。每个组件可以通过事件系统发布和监听事件,以便及时获取其他组件的状态和变化。控制器组件可以监听工作组件的事件,并对其状态进行相应的调整。工作组件也可以监听控制器组件的事件,并根据事件进行相应的处理。 总之,k8s架构和组件之间通过API服务器、etcd、网络通信和事件系统等多种通信机制进行协作和通信,保障了集群的正常运行和管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值