kubernetes核心模块(代码片段)

刘小豆豆豆 刘小豆豆豆     2023-04-01     359

关键词:

上文中讲了K8s的全生命周期,本篇介绍K8S的核心模块
K8s的核心模块主要有Cluster 、Master 、Node 、Pod 、Service等等

一、k8s的核心技术概念:


1、Cluster

Cluster 是计算、存储和网络资源的集合,Kubernetes 利用这些资源运行各种基于容器的应用。

2、Master

Kubernetes里的Master指的是集群控制节点,负责整个集群的管理和控制,用于接收Kubernetes的绝大多数控制命令,master负责具体的执行过程。高可用部署建议用3台服务器,推荐选举。一旦master宕机或者不可用,那么对集群内容器应用的管理都将失效。

Master Node 由 API Server、Scheduler、ClusterState Store(ETCD 数据库)和 Controller MangerServer 所组成。

  1. Kubernetes API Server(kube-apiserver)
    Kubernetes API,集群的统一入口,各组件协调者,以HTTP API提供接口服务,Kubernetes里所有资源的增删改查和监听操作都交给APIServer处理后再提交给Etcd存储。
  2. Kubernetes Controller Manager(kube-controller-manager)
    Kubernetes里所有资源对象的自动化控制中心,可以理解为资源对象的大总管
  3. kube-scheduler
    负责资源调度(Pod调度)的进程

3、Node


Node是集群工作节点 由 Master 管理,运行用户业务应用容器,每个Node都会被Master分配一些工作负载(Docker容器),当某个Node宕机时,其上的工作负载会被Master自动转移到其他Node节点上。Node 还负责监控并汇报容器的状态,并根据 Master 的要求管理容器的生命周期。

Worker Node 包含 kubelet、kube proxy 和 ContainerRuntime:

  1. kubelet
    kubelet是Master在Node节点上的Agent,管理本机运行容器的生命周期,负责Pod对应容器的创建、启停等任务。同时与Master密切协作,实现集群管理的基本功能,获取Node节点上Pod的运行状态等。

    kubelet是主要的节点代理,它会监视已分配给节点的pod,具体功能: 安装Pod所需的volume。 下载Pod的Secrets。
    Pod中运行的 docker(或experimentally,rkt)容器。 定期执行容器健康检查。 通过创建一个
    Pod(如果需要的话),向系统的其余部分报告 Pod 的状态。 向系统的其他部分报告节点的状态。

  2. kube-proxy
    在Node节点上实现Pod网络代理,实现Kubernetes Service的通信和负载均衡机制的重要组件。kube-proxy通过在主机上维护网络规则并执行连接转发来实现Kubernetes服务抽象。

  3. docker
    Docker引擎,负责本机的容器的创建和管理工作

二、其他概念

1、volume(存储卷)

Volume是Pod中能够被多个容器访问的共享目录。Kubernetes的Volume概念与Docker的Volume比较类似,但不完全相同。Kubernetes中的Volume与Pod生命周期相同,但与容器的生命周期不相关。当容器终止或者重启时,Volume中的数据也不会丢失。另外,Kubernetes支持多种类型的Volume,并且一个Pod可以同时使用任意多个Volume。

2、Pod

Pod 是 Kubernetes 的最小工作单元。每个 Pod 包含一个或多个容器还有卷。Pod 中的容器会作为一个整体被 Master 调度到一个 Node 上运行,一个Pod里的所有容器共用一个namespaces,共享同一个网络命名空间,可以使用localhost互相通信。Pod是短暂的,不是持续性实体。
因此会有这些问题:

  1. 如果Pod是短暂的,那么怎么才能持久化容器数据使其能够跨重启而存在呢?
    Kubernetes支持卷的概念,因此可以使用持久化的卷类型。
  2. 是否手动创建Pod,如果想要创建同一个容器的多份拷贝,需要一个个分别创建出来么?
    可以手动创建单个Pod,但是也可以使用Replication Controller使用Pod模板创建出多份拷贝,下文会详细介绍。
  3. 如果Pod是短暂的,那么重启时IP地址可能会改变,那么怎么才能从前端容器正确可靠地指向后台容器呢?
    这时可以使用Service,上一篇文章中提到过。

3、Service

Service是一组逻辑pod的抽象,为一组pod提供统一入口,用户只需与service打交道。 Service提供DNS解析名称,负责追踪pod动态变化并更新转发表,通过负载均衡算法最终将流量转发到后端的pod。Kubernetes里的每个Service其实也可以理解为我们的微服务架构中的一个微服务。
Service对外提供多种入口:

  1. ClusterIP:
    Service在集群内的唯一ip地址,虚拟的IP,只能在 Kubernetes集群里访问。通过ClusterIP,负载均衡的访问后端的Pod
  2. NodeIP + NodePort:
    Service会在集群的每个Node上都启动一个端口,通过NodeIP:NodePort访问后端的Pod。

4、Replication Controller

Replication Controller是管理Pod的工具,kubernetes通过它来管理集群中的Pod。RC是Kubernetes系统中的核心概念之一,它能够保证Pod持续运行,并且在任何时候都有指定数量的Pod副本,在此基础上提供一些高级特性,比如滚动升级和弹性伸缩。

如果为某个Pod创建了Replication Controller并且指定3个副本,它会创建3个Pod,并且持续监控它们。如果某个Pod不响应,那么Replication Controller会替换它,保持总数为3。如果之前不响应的Pod恢复了,现在就有4个Pod了,那么Replication Controller会将其中一个终止保持总数为3。如果在运行中将副本总数改为5,Replication Controller会立刻启动2个新Pod,保证总数为5。
还可以按照这样的方式缩小Pod,这个特性在执行滚动升级时很有用。
当创建Replication Controller时,需要指定两个东西:

Pod模板:用来创建Pod副本的模板
Label:Replication Controller需要监控的Pod的标签。

4、Label

Label是Kubernetes系统中的一个核心概念。 Label以 key / value 键值对的形式附加到各种对象上,如Pod、Service、RC、Node等。Label定义了这些对象的可识别属性,用来对它们进行管理和选择。 Label可以在创建时附加到对象上,也可以在对象创建后通过API进行管理。
在为对象定义好Label后,其他对象就可以使用Label Selector(选择器)来定义其作用的对象了。
Label Selector的定义由多个逗号分隔的条件组成。

“labels”: “key1”: “value1”, “key2”: “value2”

当前有两种Label Selector:基于等式的(Equality-based)和基于集合的(Set-based),在使用时可以将多个Label进行组合来选择。

  • 基于等式的Label Selector使用等式类的表达式来进行选择:
    name = redis-slave: 选择所有包含Label中key="name"且value="redis-slave"的对象;
    env != production: 选择所有包括Label中的key="env"且value不等于"production"的对象。

  • 基于集合的Label Selector使用集合操作的表达式来进行选择:
    name in (redis-master, redis-slave): 选择所有包含Label中的key="name"且value="redis-master"或"redis-slave"的对象;
    name not in (php-frontend): 选择所有包含Label中的key="name"且value不等于"php-frontend"的对象。

在某些对象需要对另一些对象进行选择时,可以将多个Label Selector进行组合,使用逗号","进行分隔即可。基于等式的LabelSelector和基于集合的Label Selector可以任意组合。例如:

name=redis-slave,env!=production name not in

(php-frontend),env!=production

5、ReplicaSet

ReplicaSet 实现了 Pod 的多副本管理。使用 Deployment 时会自动创建 ReplicaSet,也就是说 Deployment 是通过 ReplicaSet 来管理 Pod 的多个副本,所以我们通常不需要直接使用 ReplicaSet。

6、Deployment

应用管理者,是用于部署应用的对象,Deployment内部使用了Replica Set来实现的,我们可以把Deployment看做RC的一次升级。

7、Namespace

命名空间,Namespace在很多情况下用于实现多租户的资源隔离。Namespace通过集群内部的资源对象"分配"到不同的Namespace中,形成逻辑上纷纷组的不同项目,便于不同的分组共享使用整个集群的资源的同时还能被分别管理。

8、Job

Job 用于运行结束就删除的应用。而其他 Controller 中的 Pod 通常是长期持续运行。

云原生训练营模块四kubernetes架构原则和对象设计(代码片段)

Kubernetes架构原则和对象设计K8s安装K8s概念K8s架构控制器的工作流程了解KubectlKubernetes生态系统常用Kubernetes对象及其分组核心技术概念和API对象TypeMeta核心对象概览课后练习K8s安装CentOS7利用Kubeadm快速部署Kubernetes集群K8s概念Kubernete... 查看详情

kubernetes核心组件之apiserver(代码片段)

文章目录APIServer简介kubernetesAPIServer的功能结构分析流程分析组件构成集群功能模块之间的通信kubelet与APIServer交互kube-controller-manager与APIServer交互kube-scheduler与APIServer交互API版本API级别API访问控制认证、授权、准入控制APIServer简介... 查看详情

kubernetes——核心模块

...念:ClusterCluster是计算、存储和网络资源的集合,Kubernetes利用这些资源运行各种基于容器的应用。MasterKubernetes里的Master指的是集群控制节点, 查看详情

kubernetes—核心资源对象—networkpolicy(代码片段)

目录文章目录目录NetworkPolicyNetworkPolicyRulesIngressRuleEgressRuleNetworkPolicyRuleSelectorsnamespaceSelectorpodSelectorNetworkPolicy通过设置NetworkPolicy,可以允许被LabelSelector选定的Pods被哪些IP地址访问(Ingres 查看详情

kubernetes五大核心资源(代码片段)

NamespaceNamespace是kubernetes系统中的一种非常重要资源,它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离。默认情况下,kubernetes集群中的所有的Pod都是可以相互访问的。但是在实际中,可能不想让两... 查看详情

kubernetes—核心资源对象—controller(代码片段)

...)DaemonSet(守护进程控制器)Job(任务控制器)ControllerKubernetes提供了多种Controllers来对Pods进行管理,包括:Deployment、ReplicaSet、DaemonSet、StatefuleSet、Job 查看详情

云原生核心技术之——kubernetes(代码片段)

...大家介绍的便是云原生技术体系中的‘容器编排引擎——Kubernetes’。回顾:::hljs-center图云原生核心技术:::微服务化的服务与容器在轻量、敏捷 查看详情

kubernetes集群核心概念pod(代码片段)

Kubernetes集群核心概念Pod一、工作负载(workloads)二、pod介绍2.1pod定义与分类2.1.1Pod定义2.1.2Pod分类2.2查看pod方法2.3pod的YAML资源清单格式三、pod创建与验证3.1命令创建pod(v1.18变化)3.1.1创建一个名为pod-nginx的pod3.1.2验证3.2YAML创建pod3.2.1... 查看详情

kubernetes之k8s核心原理--第一篇(代码片段)

...,好吧,只能通过两篇文章向大家介绍K8s核心原理。一、KubernetesAPIServer原理分析1.kubernetesAPIServer介绍  kubernetesAPIserver的和核心功能是提供了kubernetes各类资源对象(pod、RC、service等)的增、删、改、查以及watch等HTTP 查看详情

kubernetes之k8s核心原理--第二篇(代码片段)

六、共享存储原理  Kubernetes对有状态或者对数据需要持久化的应用,不仅需要将容器内的目录挂载到宿主机的目录或者empDir临时存储卷,而且需要更加可靠的存储来保存应用产生的重要数据,以便于容器应用重建以后,... 查看详情

云原生训练营模块六kubernetes控制平面组件:apiserver(代码片段)

...0、APIServer概念1、认证基于webhook的认证服务集成构建符合Kubernetes规范的认证服务1、开发认证服务2、配置apiserver2、鉴权Role与ClusterRole账户/组的管理3、准入准入控制准入控制插件4、限流计数器固定窗口算法漏斗算法令牌桶... 查看详情

kubernetes概述(代码片段)

文章目录Kubernetes简介Kubernetes是一个平台Kubernetes不是什么核心组件Kubernetes基本概念ContainerPodNodeNamespaceServiceLabelAnnotationsKubernetes简介Kubernetes是谷歌开源的容器集群管理系统,是Google多年大规模容器管理技术Borg的开源版本࿰... 查看详情

kubernetes基础(代码片段)

Kubernetes基础文章目录Kubernetes基础Pod是什么?Pod的作用Pod控制器LabelLabel为什么要用LabelLabel选择器NodeKubernetes集群架构masternode(worker节点)Kubernetes的特性Kubernetes进阶核心组件HPAserviceAddOns附件dnspod部署Kubernetes安 查看详情

kubernetes从基础认识k8s核心pod相关概念(代码片段)

...文档,直接使用案例,进行修改即可!官网地址:https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/assign-pods-nodes/删除不需要的部分,根据规则添加需要的参数即可得到需要的,代码如下:注意:区分大小写,相同层级的要对齐编... 查看详情

云无关桌面端基于kubernetes的平台otomi(代码片段)

...thub.com/redkubes/otomi-coreOtomi是一个开源的、云无关的、基于kubernetes的平台,通过类似桌面的用户界面安全地部署、运行和管理应用程序。Otomi易于安装,具有直观的桌面 查看详情

云原生|从零开始学kubernetes十八kubernetes核心技术service实战(代码片段)

该篇文章已经被专栏《从零开始学k8s》收录上一篇文章:k8s核心技术service点击跳转service实战创建Service资源Service的四种类型Service的端口创建Service:type类型是ClusterIP写在最后创建Service资源#查看定义Service资源需要的字段有哪... 查看详情

kubernetes核心概念(代码片段)

1、Kubernetes概念核心功能服务的发现与负载的均衡容器的自动装箱,我们也会把它叫做scheduling,就是“调度”,把一个容器放到一个集群的某一个机器上Kubernetes会帮助我们去做存储的编排,让存储的声明周期与容... 查看详情

typescript角度-核心模块保障(代码片段)

查看详情