Kubernetes核心概念
Kubernetes(简称 K8s)是一个开源的容器编排平台,用于自动化应用程序的部署、扩展和管理。它最初由 Google 开发,现在由 Cloud Native Computing Foundation(CNCF)维护。Kubernetes 旨在简化容器化应用的管理,使得在不同环境中(如本地开发、测试、生产环境)运行和扩展容器变得更加高效和可靠。
KubernetesKubernetes, also known as K8s, is an open source system for automating deployment, scaling, and management of containerized applications.It groups containers that make up an application into logical units for easy management and discovery. Kubernetes builds upon 15 years of experience of running production workloads at Google, combined with best-of-breed ideas and practices from the community.Planet Scale Designed on the same principles that allow Google to run billions of containers a week, Kubernetes can scale without increasing your operations team.https://kubernetes.io主要用于以下几个方面:
-
自动化部署:Kubernetes 可以自动化应用程序的部署过程,使得你可以定义应用的期望状态,然后由 Kubernetes 自动执行部署任务,包括创建、更新和管理容器。
-
扩展和缩放:根据负载的需求,Kubernetes 可以自动调整应用的实例数量(即 Pod 的数量)。当负载增加时,它会自动增加容器实例;当负载减少时,它会减少容器实例,确保资源的高效使用。
-
负载均衡:Kubernetes 可以在多个容器实例之间分配流量,确保请求得到均衡处理,从而提高应用的可用性和性能。
-
服务发现:在 Kubernetes 中,服务发现是自动化的,容器可以通过服务名而不是 IP 地址进行通信,这简化了服务之间的互操作。
-
自愈能力:如果某个容器出现故障,Kubernetes 会自动重启容器或将其替换为新的实例,以确保应用的高可用性。
-
配置管理:Kubernetes 允许将配置信息(如数据库连接字符串、API 密钥等)与应用程序分开管理,使用 ConfigMap 和 Secret 来存储这些配置和敏感信息,减少硬编码的需要。
-
存储管理:Kubernetes 支持自动挂载和管理存储卷,可以根据应用的需要提供持久化存储或临时存储。
-
集群管理:Kubernetes 可以管理多台机器(节点)组成的集群,协调这些节点上的容器化应用,确保它们按照定义的状态运行。
总体来说,Kubernetes 的主要目的是简化和自动化容器化应用的管理,特别是在大规模和动态环境中。
-
k8s-master 负责任务调度,控制节点
-
k8s-node1 承载运⾏pod(容器)
-
k8s-node2 承载运⾏pod(容器)
Master
-
Master主要负责资源调度,控制副本,和提供统⼀访问集群的入口。--核⼼节点也是管理节点
Node
-
Node是Kubernetes集群架构中运⾏Pod的服务节点。Node是Kubernetes集群操作的单元,用来承载被分配Pod的运行,是Pod运行的宿主机,由Master管理,并汇报容器状态给Master,同时根据Master要求管理容器生命周期。
Node IP
-
Node节点的IP地址,是Kubernetes集群中每个节点的物理网卡的IP地址,是真实存在的物理网络所有属于这个网络的服务器之间都能通过这个网络直接通信;
Pod
-
在k8s中我们不会直接操作容器,而是把容器包装成Pod再进行管理运行于Node节点上, 若干相关容器的组合。Pod内包含的容器运行在同⼀宿主机上,使用相同的网络命名空间、IP地址和端⼝,能够通过localhost进行通信。Pod是k8s进行创建、调度和管理的最⼩单位,它提供了⽐容器更⾼层次的抽象,使得部署和管理更加灵活。⼀个Pod可以包含⼀个容器或者多个相关容器。
-
Pod 就是 k8s 集群里的"应用";而⼀个平台应用,可以由多个容器组成。
-
如下图,Pause容器是Pod自带的容器,用来完成pod内容器的通信
pause容器
-
每个Pod中都有⼀个pause容器,pause容器做为Pod的网络接⼊点,Pod中其他的容器会使用容器映射模式启动并接入到这个pause容器。
-
属于同一个Pod的所有容器共享网络的namespace。
-
如果Pod所在的Node宕机,会将这个Node上的所有Pod重新调度到其他节点上
Pod Volume
-
Docker Volume对应Kubernetes中的Pod Volume;
-
数据卷,挂载宿主机文件、目录或者外部存储到Pod中,为应用服务提供存储
也可以解决Pod中容器之间共享数据。
资源限制:
每个Pod可以设置限额的计算机资源有CPU和Memory;
master 和node 及pod的关系:
-
Master与Node的关系:Master负责管理和调度Node上的资源,Node则负责执行Master的指令并报告自己的状态。这种关系类似于CEO与员工之间的关系,CEO制定战略和计划,员工则负责执行这些计划并报告工作进展。
-
Node与Pod的关系:Node是Pod运行的场所,Node接收来自Master的指令来创建、更新或销毁Pod。Pod中的容器在Node上运行,并共享Node提供的资源和网络。这种关系类似于员工与项目组之间的关系,员工为项目组提供工作环境和资源,项目组则利用这些资源来执行任务。
-
Pod与容器的关系:Pod是容器的集合,一个Pod可以包含一个或多个容器。这些容器共享相同的网络命名空间和存储卷,并协同工作以提供特定的服务或功能。这种关系类似于项目组中的成员之间的关系,他们共享信息和资源,并共同完成任务。
Event:
-
是⼀个事件记录,记录了事件最早产生的时间、最后重复时间、重复次数、发起者、类型,以及导致此事件的原因等信息。
-
Event通常关联到具体资源对象上,是排查故障的重要参考信息
Pod IP:
-
Pod的IP地址,是Docker Engine根据docker0网桥的IP地址段进行分配的,通常是⼀个虚拟的二层网络,位于不同Node上的Pod能够彼此通信,需要通过Pod IP所在的虚拟二层网络进行通信,而真实的TCP流量则是通过Node IP所在的物理网卡流出的。
Namespace:
-
命名空间将资源对象逻辑上分配到不同Namespace,可以是不同的项⽬、用户等区分管理,并设定控制策略,从⽽实现多租户。命名空间也称为虚拟集群。
Replica Set:
-
确保任何给定时间指定的Pod副本数量,并提供声明式更新等功能。
Deployment:
-
Deployment是⼀个更⾼层次的API/资源对象,它管理ReplicaSets和Pod,并提供声明式更新等功能。
官方建议使⽤Deployment管理ReplicaSets,⽽不是直接使⽤ReplicaSets,这就意味着可能永
远不需要直接操作ReplicaSet对象,因此Deployment将会是使用最频繁的资源对象。
RC-Replication Controller
-
Replication Controller⽤来管理Pod的副本,保证集群中存在指定数量的Pod副本。集群中副本的数量大于指定数量,则会停⽌指定数量之外的多余pod数量,反之,则会启动少于指定数量个数的容器,保证数量不变。Replication Controller是实现弹性伸缩、动态扩容和滚动升级的核⼼。
Kubernetes架构和组件
主从分布式架构,Master/Node:
-
Master 节点(控制器)
Master 节点是 Kubernetes 集群的控制中心,负责集群的管理和协调。它包括以下几个核心组件:
-
API 服务器(kube-apiserver):
-
作用:处理所有的 API 请求,包括管理、调度和监控。它是集群的入口点,所有的操作(如创建、更新、删除资源)都通过 API 服务器进行。
-
比喻:就像数据中心的总控制室,接受来自外部的请求和命令。
-
-
调度器(kube-scheduler):
-
作用:负责将 Pod 分配到合适的 Node 上。调度器基于资源需求、策略和约束条件进行决策。
-
比喻:像任务调度员,将任务分配到合适的服务器上。
-
-
控制器管理器(kube-controller-manager):
-
作用:管理集群中的控制器,确保系统的状态符合预期。例如,ReplicaSet 控制器确保 Pod 的副本数目符合定义。
-
比喻:相当于系统监控人员,保持系统的正常运行,并进行调整以确保一致性。
-
-
etcd:
-
作用:分布式键值存储,用于保存所有的集群数据和状态信息(如配置和状态)。
-
比喻:数据中心的数据库,保存了所有操作和配置信息。
-
2. Worker 节点(Node)
Worker 节点是 Kubernetes 集群的实际计算资源,运行容器化应用程序。每个 Node 上有以下几个重要组件:
-
kubelet:
-
作用:负责管理 Node 上的 Pod 和容器,确保它们按照期望状态运行,并向 API 服务器报告状态。
-
比喻:像服务器上的运维人员,确保容器正常运行,并处理问题。
-
kubelet 负责在 Node 上管理 Pod 的生命周期,确保 Pod 内的容器按照定义的状态运行。
-
报告状态:kubelet 向 Master 节点报告 Node 的状态和 Pod 的运行情况。
-
执行命令:根据 Master 节点的指令,kubelet 执行相应的操作,如启动、停止或重启容器。
-
-
-
kube-proxy:
-
作用:负责管理 Node 上的网络通信和负载均衡,确保服务能够在集群内外正确地访问和负载均衡。
-
比喻:网络管理员,配置网络规则和负载均衡,确保数据流动顺畅。
-
-
容器运行时(Container Runtime):
-
作用:实际运行容器的程序,如 Docker 或 containerd。
-
比喻:数据中心中的服务器硬件,实际承载和运行应用程序。
-
3. Pods 和 控制器
-
Pod:
-
作用:Kubernetes 的基本运行单位,包含一个或多个容器,这些容器共享网络和存储资源。
-
比喻:就像数据中心中运行的应用程序实例,封装了一个或多个相关的服务进程。
-
-
控制器(如 ReplicaSet、Deployment):
-
作用:管理 Pod 的副本、生命周期等。例如,Deployment 控制器负责滚动更新和回滚。
-
比喻:像系统维护人员,管理和调整应用程序实例的数量和版本。
-
4. 服务(Service)
-
作用:提供一个稳定的访问入口(IP 地址和端口)来访问一组 Pod,进行负载均衡和服务发现。
-
比喻:就像数据中心中的负载均衡器,为外部请求提供一个统一的入口,分发到实际的服务器上。
5. Ingress
-
作用:管理外部访问到集群内服务的规则,提供 HTTP 和 HTTPS 路由功能。
-
比喻:数据中心的边界网关,控制外部流量如何进入数据中心内的具体服务。
总结
-
Master 节点(控制面):负责集群的管理、调度和控制,类似数据中心的总控制室。
-
Worker 节点(Node):提供计算资源和运行环境,类似数据中心的实际服务器。
-
Pod:基本的应用运行单元,封装了一个或多个容器。
-
控制器:管理 Pod 的副本和状态,确保系统的期望状态。
-
Service:提供稳定的服务入口,进行负载均衡。
-
Ingress:管理外部访问的规则,提供路由和安全功能。
常用镜像仓库
daocloud的docker镜像库:
-
daocloud.io/library
docker-hub的k8s镜像库:
-
mirrorgooglecontainers
aliyun的k8s镜像库:
-
registry.cn-hangzhou.aliyuncs.com/google-containers
aliyun的docker镜像库web⻚面:
Kubernetes集群部署方式
方式1. minikube
Minikube是⼀个工具,可以在本地快速运行⼀个单点的Kubernetes,尝试Kubernetes或⽇常开发的用户使用。不能用于生产环境。
官方地址:Install Tools | Kubernetes/
方式2. kubeadm
Kubeadm也是⼀个工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。
官方地址:Kubeadm | Kubernetes/
方式3. 直接使⽤epel-release yum源
缺点就是版本略低
方式4. 二进制包
从官方下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群
官方也提供了⼀个互动测试环境供大家测试:
https://kubernetes.io/cn/docs/tutorials/kubernetes-basics/cluster-interactive/