K8s基础架构【1】

一、什么是Kubernetes

Kubernetes(k8s)是一个以容器为中心的基础架构,可以实现在物理集群和虚拟机集群上调度和运行容器,提供容器自动部署、扩展和管理的开源平台。满足了应用程序在生产环境中一些通用需求:应用实例副本、水平自动扩展、命名与发现、负载均衡、滚动升级、资源监控等。

Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化工作负载和服务,有助于声明式配置和自动化。它拥有庞大且快速发展的生态系统。

①Kubernetes 是Google在2014年开源的一个容器集群管理系统,Kubernetes简称K8S。

②K8S用于容器化应用程序的部署,扩展和管理。

③K8S提供了容器编排,资源调度,弹性伸缩,部署管理,服务发现等-一系列功能。

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

二、Kubernetes特性

①轻量级

使用GO语言;相对于解释型语言(Shell.Python,java)Go这种编译性语言效率高,占用内存也比解释性语言要少

②开源

③自我修复

在节点故障时重启失败的容器,替换和重新部署,以保证达到预期的副本数量,并在未准备好之前不会处理客户端请求(类似Esxi的维护模式,请求不会转发到维护的主机上)来确保线上服务不会中断

④弹性伸缩

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

⑤服务发现和负载均衡

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

⑥版本回退

如果发现新发布的程序版本有问题可用立即回退到原来版本

⑦存储编排

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

⑧批量处理

提高一次性任务(job),定时任务(cronjob)来满足批量数据的处理和分析的场景

⑨自动部署和回滚

K8s采用滚动跟新策略跟新应用,一次跟新一个Pod,而不是以下印象到所有Pod,如果更新过程中出现问题,将回滚更改。确保升级并不会影响业务

⑩机密和配置管理  (secret——》安全/认证加密性的数据)

将机密数据和应用程序配置在K8s这边管理,不需要将敏感数据暴露在镜像里,提高敏感数据的安全性,当然把常用的配置存储在K8s中也方便程序的使用

三、Kubernetes集群架构与组件

K8S是属于主从设备模型(Master-Slaver架构),Master节点负责集群的调度、管理、运维Slave节点是集群中的运算工作负载节点

在K8S中,主节点一般叫做Master节点,从节点一般叫做WorkerNode节点,Master节点向Node节点分配工作和负载

Master虽然可用在集群中任意一个计算机上运行,但是作为集群中的管理者还是得给其相应的尊重的最好单独分台,如果Master宕机,虽然不会影响已经跑起来的集群,但是所有的控制命令都将失效。除去Master节点,其他的机器称为Worker Node节点,一个Node节点挂掉之后,他的工作负载会被Master迁移到其他节点上去。

Kubernetes的几大组件

Master组件

Kube-apiserver:用于暴露Kubernetes API,任何资源请求和调用操作都是通过kube-apiserver的接口进行,以HTTP Restful API提高接口服务,所有对象资源的增删改查和监听等操作都是交给APIServer处理后再提交给etcd,其实可用这么理解,APIServer负责接受K8S的所有请求,然后通过通知不同的组件来完成不同的用户请求。

Kube-controller-manager:运行管理控制器,是Kubetnetes中处理常规任务的后台线程,是kubernetes集群中 所有资源自动化控制中心。在kuberbetes中一个资源对应着一个控制器,而Controller是负责管理这些控制器的。通过APIServer来监控整个集群状态,确保集群处于预期的工作状态,列如当某个节点挂掉了,Controller Mangeser会监控到宕机,并执行自动化恢复流程来确保集群处于预期的工作状态

ControllerManager的控制器:

控制器

功能

NodeController(节点控制器)

负责发现接地故障以及响应

ReplicationController(副本控制器)

保证集群中RC(资源对象)所关联的Pod副本数量始终保持预设值

EndpointsController(端点控制器)

填充端点对象(就是将Service和Pod连接),负责监听Server的对应的Pod的副本变化,可用理解断电就是服务所暴露出服务的访问位置,需要访问服务必然要知道他的端点

Service Account & Token Controllers(服务账户和令牌控制器)

为新的命名空间创建默认账户和Api访问令牌

ResourceQuotaController(资源配额控制器)

限制资源对象不会超量抢占系统资源

NameSpaceController(命名空间控制器)

管理namespace的生命周期

Service Controller(服务控制器)

属于K8S集群与外部云平台的一个接口控制器

Kube-scheduler:负责资源调度的进程,依据为新创建的Pod选择一个合适的节点,就是当用户要部署时scheduler会依据调度策略选择最适合做Node的节点来部署Pod。

k8s的调度策略:

预选策略:将不符合运行条件的节点直接筛除

优选策略:在符合运行条件中的节点在选最适合的节点

存储中心

etcd:分布式键值存储系统(特性:服务自动发现)。用来保存数据,如Pod、Service等对象信息。Kubernetes中只有APIserver具有读写权限,其他组件必须得通过APIServer接口才能读取数据。

Node组件

Kublete作为node节点的监视器和Master节点的通讯器存在的。Kbulete会定期向Master发生所监视节点的运行的服务状态,并接受Master下达的指示来采取调整措施。Kublete是直接和容器引擎交互实现容器生命周期的管理。Kublete从Master上获取到自己节点上Pod的期望状态,如果自己节点的pod与master期望不一致时则调用容器创建从而达到预期状态。并且Kublete会管理镜像和容器的清理功能,保证节点上镜像不会占满磁盘空间,且丢弃的容器不会占用太多的资源

Kube-Proxy:在每个节点上实现pod网络代理,我们面向的并不是pod而是kube-proxy,是kubernetesservices的载体,它实际上维护的是虚拟的Pod集群网络,且Kuber-apiserver通过监控kube-proxy来进行对Kubernetes Server的更新和端点的维护。

在k8s里面微服务的负载均衡就是由Proxy来实现的,它是一个分布式代理服务器

工作流程

kubectl创建一个Pod的流程:

首先先到Auth进行鉴权,如果通过就会通过APIserver将请求消息提交给Etcd

scheduler和controller-manager会监听APIserver

scheduler监听到了请求后scheduler会提交一个list(清单)里面包含着需要获取的node的节点信息给APIserver让他去Etcd获取后端Node节点的信息

schedulert监听到了信息会通过预选/优选进行打分再将打分好的信息交给APIServer,此时collentermanager监听到信息会根据请求创建Pod的信息(需要用啥控制器)将控制器资源给到APIServer。

APIServer根据scheduler的list去寻找到相应的Kubelet

Kubelet通过K8S与容器的接口(如containerd)进行交互,假设如果是docker容器的话,此时Kubelet会通过docekrshim以及runc接口与docker的守护进程docker-server进行交互,来创建对应的容器,再生成对应的Pod

Kubelet同时会借助metrics server收集本节点的所有状态信息,然后再提交给APIServer

最后APIServer会提交list清单给etcd来存储(更新)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值