K8S基础

一、 Kubernetes(k8s)概念

1.1定义

1.2 作用

1.3 功能

1.4 使用目的

1.6 小结

二、Kubernetes架构与组件

2.1 Master

2.1.1 Kube-ApiServer

2.1.2 Kube-Scheduler调度器

2.1.3 Kube-Controller-Manager控制器管理器

2.1.4 Kube-Etcd键值存储

2.1.5 Kuberctl

2.2 Node

2.2.1 Kubelet

2.2.2 Kube-Proxy

2.2.3 Docker-Engine

三、工作流程

四、核心概念 

五、总结


一、 Kubernetes(k8s)概念

1.1定义

Kubernetes 是一个全新的基于容器技术的分布式架构解决方案,是 Google 开源的一个容器集群管理系统,Kubernetes 简称 K8S。在Docker等容器技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。

Kubernetes 是一个一站式的完备的分布式系统开发和支撑平台,更是一个开放平台,对现有的编程语言、编程框架、中间件没有任何侵入性。

Kubernetes 提供了完善的管理工具,这些工具涵盖了开发、部署测试、运维监控在内的各个环节。

Kubernetes 具有完备的集群管理能力,包括多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和服务发现机制、内建智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制、多粒度的资源配额管理能力。

作用:用于自动部署、扩展和管理“容器化(containerized)应用程序"的开源系统。可以理解成 K8S 是负责自动化运维管理多个容器化程序(比如Docker)的集群,是一个生态极其丰富的容器编排框架工具。

由来: k8s出google的Borg系统(博格系统,qoogle内部使用的大规模容器编排工具)作为原型,后经Go语言延用Borg的思路重写并捐献给cNCF基金会开源。

1.2 作用

用于自动部署、扩展和管理“容器化(containerized)应用程序"的开源系统。可以理解成 K8S 是负责自动化运维管理多个容器化程序(比如Docker)的集群,是一个生态极其丰富的容器编排框架工具。

由来: k8s出google的Borg系统(博格系统,qoogle内部使用的大规模容器编排工具)作为原型,后经Go语言延用Borg的思路重写并捐献给cNCF基金会开源。

1.3 功能

(1)使用 Docker 等容器技术对应用程序包装(package)、实例化(instantiate)、运行(run)。

(2)以集群的方式运行、管理跨机器的容器。

(3)解决 Docker 跨机器容器之间的通讯问题。

(4)K8S 的自我修复机制使得容器集群总是运行在用户期望的状态。

1.4 使用目的

试想下传统的后端部署办法:把程序包(包括可执行二进制文件、配置文件等)放到服务器上,接着运行启动脚本把程序跑起来,同时启动守护脚本定期检查程序运行状态、必要的话重新拉起程序。

设想一下,如果服务的请求量上来,已部署的服务响应不过来怎么办?传统的做法往往是,如果请求量、内存、CPU超过阈值做了告警,运维人员马上再加几台服务器,部署好服务之后,接入负载均衡来分担已有服务的压力。
这样问题就出现了:从监控告警到部署服务,中间需要人力介入。那么,有没有办法自动完成服务的部署、更新、卸载和扩容、缩容呢?
而这就是 K8S 要做的事情:自动化运维管理容器化(Docker)程序。

K8S 的目标是让部署容器化应用简单高效。

K8S 解决了裸跑Docker 的若干痛点:

(1)单机使用,无法有效集群

(2)随着容器数量的上升,管理成本攀升

(3)没有有效的容灾、自愈机制

(4)没有预设编排模板,无法实现快速、大规模容器调度

(5)没有统一的配置管理中心工具

(6)没有容器生命周期的管理工具

(7)没有图形化运维管理工具

1.5 特性

(1)自我修复

在节点故障时,重新启动失败的容器,替换和重新部署,保证预期的副本数量;杀死健康检查失败的容器,并且在未准备好之前不会处理用户的请求,确保线上服务不中断。

Kubernetes通过定期的健康检查机制监测应用程序的状态,如果发现容器处于不正常状态,还会自动进行恢复,以确保应用程序的可用性...等问题。

(2)弹性伸缩

使用命令、UI或者基于CPU使用情况自动快速扩容和缩容应用程序实例,保证应用业务高峰并发时的高可用性;业务低峰时回收资源,以最小成本运行服务。

Kubernetes能够根据应用程序的负载自动进行伸缩,增加或减少容器实例的数量,以满足应用程序的性能需求。

(3)自动部署和回滚

K8S采用滚动更新策略更新应用,一次更新一个Pod,而不是同时删除所有Pod,如果更新过程中出现问题,将回滚更改,确保升级不影响业务。

(4)服务发现和负载均衡

K8S为多个容器提供一个统一访问入口(内部IP地址和一个DNS名称),并且负载均衡关联的所有容器,使得用户无需考虑容器IP问题。

(5)集中化配置管理和密钥管理

管理机密数据和应用程序配置,而不需要把敏感数据暴露在镜像里,提高敏感数据安全性。并可以将一些常用的配置存储在K8S中,方便应用程序使用。

(6)存储编排

支持外挂存储并对外挂存储资源进行编排

挂载外部存储系统,无论是来自本地存储,公有云,还是网络存储,都作为集群资源的一部分使用,极大提高存储使用灵活性。

(7)任务批量处理运行

提供一次性任务,定时任务;满足批量数据处理和分析的场景。 

1.6 小结

K8s 全称 Kubernetes,是一种开源的容器编排平台,用于自动化部署,可以扩展和管理化应用程序。它提供了一种容器编排和管理的方式,还可以帮助开发人员更轻松的管理化应用程序。

Kubernetes 官方文档:https://kubernetes.io/zh/

二、Kubernetes架构与组件

2.1 Master

Master 是 K8S 的集群控制节点,每个 K8S 集群里需要有一个 Master 节点来负责整个集群的管理和控制,基本上 K8S 所有的控制命令都是发给它,它来负责具体的执行过程。Master 节点通常会占据一个独立的服务器,因为它太重要了,如果它不可用,那么所有的控制命令都将失效。

2.1.1 Kube-ApiServer

资源操作的唯一入口,各组件协调者,接收用户输入的命令,提供认证、授权、API注册和发现等机制,以 HTTP Rest 提供接口服务,所有对象资源的增、删、改、查和监听操作都交给 apiserver 处理后再提交给 Etcd 存储。

可以理解成 API Server 是 K8S 的请求入口服务。API Server 负责接收 K8S 所有请求(来自 UI 界面或者 CLI 命令行工具), 然后根据用户的具体请求,去通知其他组件干活。可以说 API Server 是 K8S 集群架构的大脑。

2.1.2 Kube-Scheduler调度器

负责集群资源调度,按照预定的调度策略将Pod调度到相应的node节点上。根据调度算法为新创建的 Pod 选择一个 Node 节点,可以任意部署,可以部署在同一个节点上,也可以部署在不同的节点上。

可以理解成 K8S 所有 Node 节点的调度器。当用户要部署服务时,Scheduler 会根据调度算法选择最合适的 Node 节点来部署 Pod。

(1)预选策略(predicate)

(2)优选策略(priorities)

API Server 接收到请求创建一批 Pod ,API Server 会让 Controller-manager 按照所预设的模板去创建 Pod,Controller-manager 会通过 API Server 去找 Scheduler 为新创建的 Pod 选择最适合的 Node 节点。比如运行这个 Pod 需要 2C4G 的资源,Scheduler 会通过预选策略过滤掉不满足策略的 Node 节点。Node 节点中还剩多少资源是通过汇报给 API Server 存储在 etcd 里,API Server 会调用一个方法找到 etcd 里所有 Node 节点的剩余资源,再对比 Pod 所需要的资源,如果某个 Node 节点的资源不足或者不满足 预选策略的条件则无法通过预选。预选阶段筛选出的节点,在优选阶段会根据优先策略为通过预选的 Node 节点进行打分排名, 选择得分最高的 Node。例如,资源越富裕、负载越小的 Node 可能具有越高的排名。

2.1.3 Kube-Controller-Manager控制器管理器

运行管理控制器,是 K8S 集群中处理常规任务的后台线程,是 K8S 集群里所有资源对象的自动化控制中心。一个资源对应一个控制器,而 controller-manager 就是负责管理这些控制器的。负责维护集群的状态,比如程序部署安排、故障检测、自动扩展、滚动更新等。由一系列控制器组成,通过 API Server 监控整个集群的状态,并确保集群处于预期的工作状态,比如当某个 Node 意外宕机时,Controller Manager 会及时发现并执行自动化修复流程,确保集群始终处于预期的工作状态。

Replication Controller(副本控制器):负责保证集群中一个 RC(资源对象 Replication Controller)所关联的 Pod 副本数始终保持预设值。可以理解成确保集群中有且仅有 N 个 Pod 实例,N 是 RC 中定义的 Pod 副本数量。
Node Controller(节点控制器):负责监控和管理集群中的Node节点,并确保其状态正常。
Service Controller(服务控制器):属于 K8S 集群与外部的云平台之间的一个接口控制器。负责监控Service对象的变化,并更新负载均衡器以确保服务的可访问性。
Endpoints Controller(端点控制器):填充端点对象(即连接 Services 和 Pods),负责监听 Service 和对应的 Pod 副本的变化。 可以理解端点是一个服务暴露出来的访问点,如果需要访问一个服务,则必须知道它的 endpoint。
Service Account & Token Controllers(服务帐户和令牌控制器):为新的命名空间创建默认帐户和 API 访问令牌。
ResourceQuota Controller(资源配额控制器):确保指定的资源对象在任何时候都不会超量占用系统物理资源。
Namespace Controller(命名空间控制器):管理 namespace 的生命周期。
这些组件,使得 Kubernetes 集群能够实现自动化的资源管理,并且,提高了集群的可靠性、可用性和可扩展性。

2.1.4 Kube-Etcd键值存储

Etcd是一个分布式的键值存储系统,主要用途是共享配置和服务发现,保存集群状态数据,存储集群的配置信息、状态信息、和元数据。所有的集群状态,都被存储在etcd中,包括:节点信息、资源分配情况、Pod状态;比如 Pod、Service 等对象信息。负责存储集群中各种资源对象的信息,k/v方式存储,所有的 k8s 集群数据存放在此。etcd还提供了强一致性的分布式存储,并支持Watch机制用于实时监控集群状态的变化。K8S 中仅 API Server 才具备读写权限,其他组件必须通过 API Server 的接口才能读写数据。

2.1.5 Kuberctl

命令行配置工具

2.2 Node

除了 Master,K8S 集群中的其它机器被称为 Node 节点,Node 节点是 K8S 集群中的工作负载节点,每个 Node 都会被 Master 分配一些工作负载,当某个 Node 宕机时,其上的工作负载会被 Master 自动转移到其它节点上去。

在 Kubernetes 集群中,在每个 Node(又称 Worker Node)上都会启动一个 kubelet 服务进程。该进程用于处理 Master 下发到本节点的任务,管理 Pod 及 Pod 中的容器。每个 kubelet 进程都会在 API Server 上注册节点自身的信息,定期向 Master 汇报节点资源的使用情况,并通过 cAdvisor 监控容器和节点资源。 

2.2.1 Kubelet

负责维护容器的生命周期,即通过控制docker,来创建、更新、销毁容器,会按固定频率检查节点健康状态并上报给 APIServer,该状态会记录在 Node 对象的 status 中。kubelet 是 Master 在 Node 节点上的 Agent(代理),与 Master 密切协作,管理本机运行容器的生命周期,负责 Pod 对应的容器的创建、启停等任务,实现集群管理的基本功能。

Node 节点的监视器,以及与 Master 节点的通讯器。Kubelet 是 Master 节点安插在 Node 节点上的“眼线”,它会定时向 API Server 汇报自己 Node 节点上运行的服务的状态,并接受来自 Master 节点的指示采取调整措施。

从 Master 节点获取自己节点上 Pod 的期望状态(比如运行什么容器、运行的副本数量、网络或者存储如何配置等), 直接跟容器引擎交互实现容器的生命周期管理,如果自己节点上 Pod 的状态与期望状态不一致,则调用对应的容器平台接口(即 docker 的接口)达到这个状态。

管理镜像和容器的清理工作,保证节点上镜像不会占满磁盘空间,退出的容器不会占用太多资源。

2.2.2 Kube-Proxy

负责提供集群内部的服务发现和负载均衡,主要就是为 Service 提供服务的,来实现内部从 Pod 到 Service 和外部 NodePort 到 Service 的访问,维护网络规则和四层负载均衡工作。

在每个 Node 节点上实现 Pod 网络代理,是 Kubernetes Service 资源的载体,负责维护网络规则和四层负载均衡工作。 负责写入规则至iptables、ipvs实现服务映射访问的。

Kube-Proxy 本身不是直接给 Pod 提供网络,Pod 的网络是由 Kubelet 提供的,Kube-Proxy 实际上维护的是虚拟的 Pod 集群网络。
Kube-apiserver 通过监控 Kube-Proxy 进行对 Kubernetes Service 的更新和端点的维护。

在 K8S 集群中微服务的负载均衡是由 Kube-proxy 实现的。Kube-proxy 是 K8S 集群内部的负载均衡器。它是一个分布式代理服务器,在 K8S 的每个节点上都会运行一个 Kube-proxy 组件。

2.2.3 Docker-Engine

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

Node 节点可以在运行期间动态增加到 K8S 集群中,前提是这个节点上已经正确安装、配置和启动了上述关键组件。在默认情况下 kubelet 会向 Master 注册自己,一旦 Node 被纳入集群管理范围,kubelet 就会定时向 Master 节点汇报自身的情况,例如操作系统、Docker 版本、机器的 CPU 和内存情况,以及之前有哪些 Pod 在运行等,这样 Master 可以获知每个 Node 的资源使用情况,并实现高效均衡的资源调度策略。而某个 Node 超过指定时间不上报信息时,会被 Master 判定为“失联”,Node 的状态被标记为不可用(Not Ready),随后 Master 会触发“工作负载大转移”的自动流程。

三、工作流程

(1)用户通过客户端发送创建Pod的请求到master节点上的apiserver。

(2)apiserver会先把请求信息写入到etcd中保存,再找controller-manager根据预设的资源配置模板创建Pod资源。

(3)然后controller-manager会通过apiserver去找scheduler为新创建的Pod选择最合适的node节点。

(4)scheduler通过调度算法的预选策略和优选策略筛选出最合适的node节点进行调度。

(5)然后再通过apiserver找到对应的node节点上的kubelet去创建和管理Pod。

(6)kubelet会跟容器引擎交互来管理Pod/容器的生命周期。

(7)用户还可通过apiserver在kube-proxy上写入网络规则,创建service资源,实现对Pod的服务发现和负载均衡。

四、核心概念 

Kubernetes 包含多种类型的资源对象:Pod、Label、Service、Replication Controller 等。

所有的资源对象都可以通过 Kubernetes 提供的 kubectl 工具进行增、删、改、查等操作,并将其保存在 etcd 中持久化存储。

Kubernets其实是一个高度自动化的资源控制系统,通过跟踪对比etcd存储里保存的资源期望状态与当前环境中的实际资源状态的差异,来实现自动控制和自动纠错等高级功能。

1.Master

集群控制节点,每个集群需要至少一个master节点负责集群的管控

2.Node

工作负载节点,由master分配容器到这些node工作节点上,然后node节点上的docker负责容器的运行

3.Pod

Pod 是 K8S 中最重要也是最基本的概念,Pod 是最小的部署单元,是一组容器的集合,容器都是运行在pod中的。每个 Pod 都由一个特殊的根容器 Pause 容器,以及一个或多个紧密相关的用户业务容器组成。一个 Pod 代表集群上正在运行的一个进程。可以把把 Pod 理解成豌豆荚,Pod内的每个容器是一颗颗豌豆。

Pause 容器作为 Pod 的根容器,以它的状态代表整个容器组的状态。K8S 为每个 Pod 都分配了唯一的 IP 地址,称之为 Pod IP。Pod 里的多个业务容器共享 Pause 容器的IP,共享 Pause 容器挂载的 Volume。

一个 Pod 由一个或多个容器组成,Pod 中容器共享网络、存储和计算资源,在同一台 Docker 主机上运行。

一个 Pod 里可以运行多个容器,又叫边车模式(SideCar)。而在生产环境中一般都是单个容器或者具有强关联互补的多个容器组成一个 Pod。

边车模式:举例为共享单车的篮子,共享单车规定一车只能载一人,假设在共享单车的篮子里可以再坐一个人,那一辆共享单车就可以载两个人,这就是边车模式

同一个 Pod 之间的容器可以通过 localhost 互相访问,并且可以挂载 Pod 内所有的数据卷;但是不同的 Pod 之间的容器不能用 localhost 访问,也不能挂载其他 Pod 的数据卷。

4.Pod控制器

Pod 控制器是 Pod 启动的一种模版,用来保证在K8S里启动的 Pod 应始终按照用户的预期运行(副本数、生命周期、健康状态检查等)。

K8S 内提供了众多的 Pod 控制器,常用的有以下几种

4.1 Deployment

无状态应用部署。Deployment 的作用是管理和控制 Pod 和 ReplicaSet,管控它们运行在用户期望的状态中。

无状态:假设打开百度的页面,百度一直没有更新其logo以及页面内容,这就是无状态

有状态:假设数据库每天都有数据的增删改查,数据每天都在更新变动,这就是有状态

4.2 ReplicaSet

确保预期的 Pod 副本数量。ReplicaSet 的作用就是管理和控制 Pod,管控他们好好干活。但是,ReplicaSet 受控于 Deployment。

可以理解成 Deployment 就是总包工头,主要负责监督底下的工人 Pod 干活,确保每时每刻有用户要求数量的 Pod 在工作。如果一旦发现某个工人 Pod 不行了,就赶紧新拉一个 Pod 过来替换它。而ReplicaSet 就是总包工头手下的小包工头。

从 K8S 使用者角度来看,用户会直接操作 Deployment 部署服务,而当 Deployment 被部署的时候,K8S 会自动生成要求的 ReplicaSet 和 Pod。用户只需要关心 Deployment 而不操心 ReplicaSet。

资源对象 Replication Controller 是 ReplicaSet 的前身,官方推荐用 Deployment 取代 Replication Controller 来部署服务。

4.3 Daemonset

确保所有节点运行同一类 Pod,保证每个节点上都有一个此类 Pod 运行,通常用于实现系统级后台任务。

4.4 Statefulset

有状态应用部署

4.5 Job

一次性任务。根据用户的设置,Job 管理的 Pod 把任务成功完成就自动退出了。

4.6 Cronjob

周期性计划性任务

5.Controller

控制器,通过它来实现对pod的管理,比如启动pod、停止pod、伸缩pod的数量等等

6.Label

标签,用于对pod进行分类,同一类pod会拥有相同的标签。附加到某个资源上,用于关联对象、查询和筛选。一个 Label 是一个 key=value 的键值对,key 与 value 由用户自己指定。Label 可以附加到各种资源上,一个资源对象可以定义任意数量的 Label,同一个 Label 也可以被添加到任意数量的资源上。

我们可以通过给指定的资源对象捆绑一个或多个不同的 Label 来实现多维度的资源分组管理功能,以便于灵活、方便地进行资源分配、调度、配置、部署等工作。

与 Label 类似的,还有 Annotation(注释)。
区别在于有效的标签值必须为63个字符或更少,并且必须为空或以字母数字字符([a-z0-9A-Z])开头和结尾,中间可以包含横杠(-)、下划线(_)、点(.)和字母或数字。注释值则没有字符长度限制。

K8S 通过 Label Selector(标签选择器)来查询和筛选拥有某些 Label 的资源对象。Label Selector 有基于等式( name=label1 )和基于集合( name in (label1, label2) )的两种方式。

给某个资源对象定义一个 Label,就相当于给它打了一个标签;随后可以通过标签选择器(Label selector)查询和筛选拥有某些 Label 的资源对象。
标签选择器目前有两种:基于等值关系(等于、不等于)和基于集合关系(属于、不属于、存在)。

7.Service

pod对外服务的统一入口,下面可以维护者同一类的多个pod。

Service 定义了一个服务的访问入口,通过 Label Selector 与 Pod 副本集群之间“无缝对接”,定义了一组 Pod 的访问策略,防止 Pod 失联。

创建 Service 时,K8S会自动为它分配一个全局唯一的虚拟 IP 地址,即 Cluster IP。服务发现就是通过 Service 的 Name 和 Service 的 ClusterIP 地址做一个 DNS 域名映射来解决的。

在K8S的集群里,虽然每个Pod会被分配一个单独的IP地址,但由于Pod是有生命周期的(它们可以被创建,而且销毁之后不会再启动),随时可能会因为业务的变更,导致这个 IP 地址也会随着 Pod 的销毁而消失。

K8S 中的 Service 并不是我们常说的“服务”的含义,而更像是网关层,可以看作一组提供相同服务的Pod的对外访问接口、流量均衡器。

Service 作用于哪些 Pod 是通过标签选择器来定义的。

在 K8S 集群中,Service 可以看作一组提供相同服务的 Pod 的对外访问接口。客户端需要访问的服务就是 Service 对象。每个 Service 都有一个固定的虚拟 ip(这个 ip 也被称为 Cluster IP),自动并且动态地绑定后端的 Pod,所有的网络请求直接访问 Service 的虚拟 ip,Service 会自动向后端做转发。
Service 除了提供稳定的对外访问方式之外,还能起到负载均衡(Load Balance)的功能,自动把请求流量分布到后端所有的服务上,Service 可以做到对客户透明地进行水平扩展(scale)。
而实现 service 这一功能的关键,就是 kube-proxy。kube-proxy 运行在每个节点上,监听 API Server 中服务对象的变化, 可通过以下三种流量调度模式: userspace(废弃)、iptables(濒临废弃)、ipvs(推荐,性能最好)来实现网络的转发。

Service 是 K8S 服务的核心,屏蔽了服务细节,统一对外暴露服务接口,真正做到了“微服务”。

比如我们的一个服务 A,部署了 3 个副本,也就是 3 个 Pod; 对于用户来说,只需要关注一个 Service 的入口就可以,而不需要操心究竟应该请求哪一个 Pod。
优势非常明显:一方面外部用户不需要感知因为 Pod 上服务的意外崩溃、K8S 重新拉起 Pod 而造成的 IP 变更, 外部用户也不需要感知因升级、变更服务带来的 Pod 替换而造成的 IP 变化。

假设我们定义了3个Pod,客户端访问请求会经过Ingress,到达Service1之后,通过标签选择器,选择将客户端请求分发给哪一台或者哪几台服务器进行相应 

8.Ingress

Service 主要负责 K8S 集群内部的网络拓扑,那么集群外部怎么访问集群内部呢?这个时候就需要 Ingress 了。Ingress 是整个 K8S 集群的接入层,负责集群内外通讯。
Ingress 是 K8S 集群里工作在 OSI 网络参考模型下,第7层的应用,对外暴露的接囗,典型的访问方式是 http/https。
Service 只能进行第四层的流量调度,表现形式是 ip+port。Ingress 则可以调度不同业务域、不同URL访问路径的业务流量。

比如:客户端请求 http://www.baidu.com:port  ---> Ingress ---> Service ---> Pod

9.ReplicaSet(RC)

ReplicaSet 用来确保预期的 Pod 副本数量,如果有过多的 Pod 副本在运行,系统就会停掉一些 Pod,否则系统就会再自动创建一些 Pod。

我们很少单独使用 ReplicaSet,它主要被 Deployment 这个更高层的资源对象使用,从而形成一整套 Pod 创建、删除、更新的编排机制。

10.Deployment

Deployment 用于部署无状态应用,Deployment 为 Pod 和 ReplicaSet 提供声明式更新,只需要在 Deployment 描述想要的目标状态,Deployment 就会将 Pod 和 ReplicaSet 的实际状态改变到目标状态。

11.Horizontal Pod Autoscaler(HPA)

HPA 为 Pod 横向自动扩容,也是 K8S 的一种资源对象。HPA 通过追踪分析 RC 的所有目标 Pod 的负载变化情况,来确定是否需要针对性调整目标 Pod 的副本数量。

12.Name

由于 K8S 内部,使用 “资源” 来定义每一种逻辑概念(功能),所以每种 “资源”,都应该有自己的 “名称”。
“资源” 有 api 版本(apiversion)、类别(kind)、元数据(metadata)、定义清单(spec)、状态(status)等配置信息。
“名称” 通常定义在 “资源” 的 “元数据” 信息里。在同一个 namespace 空间中必须是唯一的。

13.NameSpace

命名空间,用来隔离pod的运行环境。随着项目增多、人员增加、集群规模的扩大,需要一种能够逻辑上隔离 K8S 内各种 “资源” 的方法,这就是 Namespace。

Namespace 多用于实现多租户的资源隔离。Namespace 通过将集群内部的资源对象“分配”到不同的Namespace中,形成逻辑上分组的不同项目、小组或用户组。

Namespace 是为了把一个 K8S 集群划分为若干个资源不可共享的虚拟集群组而诞生的。
不同 Namespace 内的 “资源” 名称可以相同,相同 Namespace 内的同种 “资源”,“名称” 不能相同。

K8S 集群在启动后,会创建一个名为 default 的 Namespace,如果不特别指明 Namespace,创建的 Pod、RC、Service 都将被创建到 default 下。

当我们给每个租户创建一个 Namespace 来实现多租户的资源隔离时,还可以结合 K8S 的资源配额管理,限定不同租户能占用的资源,例如 CPU 使用量、内存使用量等。

合理的使用 K8S 的 Namespace,可以使得集群管理员能够更好的对交付到 K8S 里的服务进行分类管理和浏览。

K8S 里默认存在的 Namespace 有:default、kube-system、kube-public 等。

查询 K8S 里特定 “资源” 要带上相应的 Namespace。

kubernetes在集群启动之后,会默认创建几个namespace:default、kube-node-lease、kube-public、kube-system

默认情况下,kubernetes集群中的所有的Pod都是可以相互访问的。但是在实际中,可能不想让两个Pod之间进行互相的访问,那此时就可以将两个Pod划分到不同的namespace下。kubernetes通过将集群内部的资源分配到不同的Namespace中,可以形成逻辑上的"组",以方便不同的组的资源进行隔离使用和管理。

五、总结

K8s 全称 Kubernetes,是一种开源的容器编排平台,用于自动化部署,可以扩展和管理化应用程序。它提供了一种容器编排和管理的方式,还可以帮助开发人员更轻松的管理化应用程序。

k8s特性

(1)自我修复

(2)弹性伸缩

(3)自动部署和回滚

(4)服务发现和负载均衡

(5)集中化配置管理和密钥管理

(6)存储编排

(7)任务批量处理运行

核心组件

Master主控制节点、Node(WorkNode)工作节点

Master组件

APIServer:集群统一入口,以Restful方式交给ETCD进行存储

Scheduler:节点中的调度器,选择(预选和优选)Node节点部署应用

Controller-Manager:处理集群中常规后台任务,一个资源就需要一个控制器,一个Master有多个控制器

ETCD:存储系统,用于保存集群相关的数据(K8s所有的动作,请求等都存放于ETCD中)

Node组件

Kubelet:Master派到Node节点的代表,管理本机容器

Kube-Proxy:提供网络代理,负载均衡等一些操作

Docker:管理自己的容器部署

核心概念

控制器五大类

Label

Service

Ingress

Name

Namespace

Kubernetes和Docker的关系

Docker是一种容器化平台,允许开发者将应用程序,及其所有依赖项打包到一个称为容器的可移植单元中。

Kubernetes是一个容器编排、和管理平台,用于自动化容器的部署、扩展和操作。

角色不同: Docker是一种容器技术的实现,而Kubernetes是一个容器编排和管理平台。
层次关系: Docker可以视为底层的容器引擎,而Kubernetes则是更高层次的容器编排系统。
功能不同: Docker主要关注容器的创建和运行,而Kubernetes关注容器的编排、调度、服务发现和自动化运维。
适用范围: Docker适用于单个主机上的容器化应用,而Kubernetes适用于跨多个主机的分布式、微服务化应用。
通常,这两者一起使用,Docker负责构建和运行容器,而Kubernetes负责在生产环境中对这些容器进行编排和管理。

  • 26
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
k8s(Kubernetes)基础知识点通俗易懂的解释如下: Kubernetes是一种容器编排平台,用于管理和部署容器化应用程序。它提供了一种简单而强大的方式来自动化应用的调度、扩展和管理,使开发人员和运维人员能够以更高效的方式管理容器化应用。 在学习k8s基础知识之前,建议您具备一定的Linux基础和网络基础知识,并了解一些Docker和k8s相关的概念。例如,您可以先掌握一些关于容器的基本概念,比如什么是容器、容器镜像、容器编排等。此外,您还需要了解一些关于k8s的核心概念,比如Pod、Service、Deployment等。 Kubernetes中的Pod是最小的部署单元,它包含一个或多个容器,并共享存储、网络等资源。Pod可以被创建、启动、停止或调度,以确保容器应用程序的高可用性和弹性。 Service是一种抽象,用于将一组Pod暴露给其他应用程序或用户。它为Pod提供了一个稳定的网络地址,并负责负载均衡请求。 Deployment是一种资源对象,它定义了如何部署应用程序。通过Deployment,您可以指定要运行的Pod数量、容器的镜像、升级策略等。 除此之外,还有许多其他的k8s核心概念和功能,如Namespace、ReplicaSet、StatefulSet等,它们可以帮助您更好地管理和扩展容器化应用程序。 总之,k8s基础知识点涉及到了容器编排、Pod、Service、Deployment等核心概念。通过学习这些知识,您将能够更好地理解和使用Kubernetes平台来管理和部署容器化应用程序。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Prometheus+Grafana(Kubernetes)企业级监控](https://download.csdn.net/download/weixin_26833205/19732967)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [云计算虚拟化:k8s进阶-CRD开发基础](https://blog.csdn.net/dustzhu/article/details/112029190)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [视频教程-通俗易懂的消息中间件ActiveMQ教程(含配套资料)-Docker/K8S](https://blog.csdn.net/weixin_33500227/article/details/106513277)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值