zl程序教程

您现在的位置是:首页 >  后端

当前栏目

kubernetes基础概念

2023-09-27 14:26:13 时间

kubernetes是基于容器技术的分布式架构领先方案。具有完备的集群管理能力,包括多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和服务发现机制、内建智能负载均衡器、强大的故障发现和自我修复的能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制、以及多粒度的资源配额管理能力。同时,kubernetes提供了完善的管理工具,这些工具涵盖了包括开发、部署测试、运维监控在内的各个环节。因此、kubernetes是一个全新的基于容器技术的分布式架构解决方案,并且是一个一站式的分布式系统开发和支撑平台。以下简称为K8S。

在k8s中,服务Service是分布式集群架构的核心,拥有如下特征

1、拥有一个唯一指定的名字。

2、拥有一个虚拟IP和端口号。

3、能够提供某种远程服务能力。

4、被映射到了提供这种服务能力的一组容器应用上。

一、Master 是集群控制节点。一般是一台物理主机。每个k8s集群都需要一个master节点来负责整个集群的管理和控制。基本上所有控制指令都发给它。它来负责具体执行过程。

Kubernetes APIServer 提供了HTTP Rest接口的关键服务进程。是k8s里资源增删改查操作的唯一入口,也是集群控制的入口进程。

Kubernetes Controller Manager 所有资源对象的自动化控制中心。

Kubernetes Scheduler 负责资源调度的进程。

etcd server 所有资源对象数据全部保存在etcd中。

二、Node 是集群中除了master节点的其他机器。可以是物理主机也可以是虚拟机。是集群中的工作负载节点。宕机时,工作负载转移到其他机器节点。

kubelet 负责pod对应容器的创建、启停等任务。同时与master节点密切协作,实现集群管理的基本功能。

kube-proxy 实现kubernetes Service通信与负载均衡机制的重要组件。

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

node节点可以动态增加到集群中。在默认情况下,kubelet会向master注册自己。一旦node被纳入集群。kubelet会定期向master节点汇报自身情况。如果master在一段时间内没有收到kubelet的上报信息。master会认为node节点失联,从而开始工作负载大转移。

kubectl get nodes查看所有的节点

kubectl describe node xxx 查看节点详细信息

三、Pod 是kubernetes中最重要也最基本的概念

pod其实有两种类型:普通的pod和静态的pod,后者比较特殊,它并不存放在kubernetes的etcd存储里,而是存放在某个具体的Node上的一个具体文件中,并且只在此node上启动运行。而普通的pod一旦被创建,就会被放入到etcd中存储,随后会被放入到etcd中存储,随后会被k8s master调度到某个具体的node上并进行绑定。随后该pod被对应的node上的kubelet进程实例化成一组相关的docker容器并启动起来。在默认情况下,当pod里的某个容器停止时,k8s会i自动检测到这个问题并且重新启动这个pod(重启pod里的所有容器)通过k8s的健康检查机制。

四、Label 时kubernetes系统中另外一个核心概念。一个label时一个key=value的键值对。key与value由用户自己指定。label可以复交到各种资源对象上,例如node、pod、service、RC等。一个资源对象可以定义任意数量的label,同一个label也可以被添加到任意数量的资源对象上去。label通常在资源对象定义时确定,也可以在对象创建后动态添加或者删除。

label在k8s中重要使用场景:

kube-controller进程通过资源对RC上定义的label来筛选要监控的pod副本数量,从而实现pod副本的数量始终符合预期设定的全自动控制流程。

kube-proxy进程通过service的label来选择对应的pod,自动建立起每个service到对应pod的请求转发路由表,从而实现service的自能负载均衡机制。

通过对某些node定义特定的label,并且在pod定义文件中使用nodeselector这种标签调度策略,kube-scheduler进程可以实现pod定向调度的特性。

五、Replication Controller RC 是kubernetes系统中核心概念之一,其实是定义了一个期望的场景,即声明某种pod的副本数量在任意时刻都符合某个预期值。RC的定义包括如下几个部分

1、pod期待的副本数

2、用于筛选的pod的label Selector

3、当pod副本数量小于预期数量的时候,用于创建新pod的pod模板。

当我们定义了一个RC并提交到kubernetes集群中以后,master节点的controller manager组件就得到通知,定期巡检系统中当前存活的目标pod,并确保目标pod实力的数量刚好等于此RC的期望值。如果数量太多,系统会停掉一些pod,否则就自动创建一些pod。

kubectl scale rc redis-slave --replicas=3动态缩放pod数量

删除RC并不会英雄通过该RC已创建好的pod,为了删除所有pod,可以设置replicas值为0,然后更新该RC,另外kubectl提供了stop和delete命令来一次性删除RC和RC控制的全部pod

RC的一些特性与作用

1、大多数情况下,我们通过定义一个RC实现pod的创建过程和副本数量的自动控制

2、RC里包含完整的pod定义副本。

3、RC通过label selector机制实现对pod副本的自动控制

4、通过改变RC的pod副本数量,可以实现pod的扩容或者缩容功能。

5、通过改变RC里pod模板的镜像版本,可以实现pod的滚动升级功能。

六、Deployment 是kubernetes1.2引入的新概念,引入的目的是为了更好的解决pod的编排问题。我们可以把它看作RC的一次升级,两者相似度超过90%

deployment相对RC的一个最大升级是我们可以随时知道当前pod部署的进度。

deployment的经典使用场景有以下几个

1、创建一个deployment对象来生成对应的replica set并完成pod副本的创建过程。

2、检查deployment的状态来看部署动作是否完成。pod副本数量是否达到预期的值。

3、更新deployment以创建新的pod 比如镜像升级。

4、如果当前deployment不稳定,则回滚到一个早先的deployment版本。

5、挂起或者恢复一个deployment

kubectl create -f xxx.yaml 创建一个deployment

kubectl get deployments 查看deployment信息

kubectl describe deployments 可以清楚的扛到deployment控制的pod的水平扩展过程。

七、Horizontal Pod Autoscaler (HPA)意思是pod横向自动扩容。通过追踪分析RC控制的所有目标pod的负载变化情况来确定是否需要针对性的调整目标pod的副本数。这是HPA的实现原理。

HPA可以有以下两种方式作为pod负载的度量指标

1、CPUUtilizationPercentage

2、应用程序自定义的度量指标,比如服务在美妙内的相应的请求数

CPUUtilizationPercentage 是一个算术平均值,即目标pod所有副本自身的CPU利用率的平均值。一个pod自身的cpu利用率是该pod的cpu使用量除以它的pod request的值。

八、Service 服务 也是kubernetes里最核心的资源对象之一,每个service其实都是一个微服务

九、Volume (存储卷) 是pod中能够被多个容器访问的共享目录,和docker的volume类似,但不能等价。

kubernetes提供了丰富的volume类型

1、emptydir 是在pod分配到node时创建的,初始内容为空。

2、hostPath 为在pod上挂载宿主机上的文件或目录

3、gcePersistentDisk 谷歌公有云提供给的永久磁盘

4、 awsElasticBlockStore 亚马逊公有云提供的EBS Volume存储数据。

5、 NFS 

6、其他

十、Persistent Volume 

十一、Namespace 命名空间 是kubernetes系统中另一个非常重要的概念,用于实现多租户的资源隔离。

kubectl get namespaces 获取所有命名空间

十二、Annotation(注解) 与label类似。