了解 kubernetes(资源管理器)

一、容器云发展及主要内容

1、云计算,交付标准(iaas)
国内:阿里云.
国外: AWS|
2、平台即服务( PAAS)
例如:新浪云(号称免运维)
用户下单一-> 下单到sina运维,进行环境构建

迭代: 产生出来很多运维工具,例如ansible,这些运维工具可以帮我自动化创建一些环境但是,不同环境的要求不一-样,需要考虑、解决各种环境匹配、兼容问题,同时,docker- 》自动构建运行环境封装体一》 docker成为这- -代PAAS的运行环境标准
问题:若将容器集群化,要如何管理?
一-》 资源管理器/资源管理框架(管理工具) :

1、早期是mesos (Apache基金会) 早期只作为资源管理平台,开源、分布式的管理框架,后来被推特看上,做为基础平台,大规模盛

2、2019年推特宣布不用mesos、而全部使用kubernetes
3、mesos官方公布,可以在我的平台,上管理k8s
但是k8s与底层虚拟化相性很简单,未必需要多一步使用mesos
4、docker. swarm : docker 父公司的产品,他也是一种docker 集群化方案,
优势: 轻量
但是相对于K8S而言,实现的功能还是比较少,例如k8s的
滚动更新、回滚,可以实现,但是很复杂,初次之外大规模集群的使用和管理还是很强大的
5、kubernetes稳定、适合生产、全面,成为了主要的解决方案一》谷歌
kubernetes的名字来自希腊语,意思是“舵手”或“领航员" , K8s是将8个字母"ubernete"替换为“8”的缩写。

二、K8S的特性

特点:
1、轻量级
一-些解释性语言:例如Python/JavaScript / Perl /Shell, 效率较低,占用内存资源较多
使用go语言一》编译型语言,语言级别支持进程管理,不需要人为控制,所以以go开发的资源消耗占用资源小
2、开源.
3、自我修复
在节点故障时重新启动失败的容器,替换和重新部署,保证预期的副本数量:杀死健康检查失败的容器,并且在未准备好之前不会处理客户端请求,确保线上服务不中断。
4、弹性伸缩
Yml --> 阈值cpu使用率> 80号一-》 触发扩容pod (CPU使用.上限,docker-cgroup k8s —> 1、limit
2、configmap-配置文件 )

使用命令、U1I或者基于CP0使用情况自动快速扩容和缩容应用程序实例,保证应用业务高峰并发时的高可用性:业务低峰时回收资源,以最小成本运行服务。
5、自动部署和回滚
K8S采用滚动更新策略更新应用,一次更新- -个Pod,而不是同时删除所有Pod,如果更新过程中出现问题,将回滚更改,确保升级不受 影响业务。
6、服务发现和负载均衡
K8S为多个pod (容器)提供一个统一-访问入口( 内部IP地址和一个DNS名称),并且负载均衡关联的所有容器,使得用户无需考虑容器IP问题。
使用IPVS (章文嵩)框架—>“替代”iptables
7、机密和配置管理(secret- -》 安全/认证加密性的数据)
管理机密数据和应用程序配置,而不需要把敏感数据暴露在镜像里,提高敏感数据安全性。并可以将一-些常用的配置存储在K8S中,方便应用程序使用。
8、存储编排
挂载外部存储系统,无论是来自本地存储,公有云(如AWS),还是网络存储(如NES、GlusterFs、 Ceph)都作为集群资源的一部分使用,极大提高存储使用灵活性。
9、批处理
提供一次性任务,定时任务:满足批量数据处理和分析的场景

K8S目标是为了让部署容器化应用、管理容器集群更加简单高效

三、kubernetes集群架构与组件

一、基本组件

1、Pod(最小的资源单位)
一一个pod会封装多个容器组成一一个子节点的运行环境 (最小单元)
最小部署单元
●组容器的集合
一个Pod中的容器共享网络命名空间
Pod是短暂的

网络通讯模式:
POD与POD, 同节点与跨节点

2、资源清单:

1、K8S中资源的概念
2、资源清单格式(资源清单/配置文件) : Yaml/语法
3、Pod生命周期()
InitC .
Pod phase
容器探针—》liveness Probe、readnessProbe
Pod hook
重启策略

3、Pod控制器(维护Pod状态, 期望值)

什么是控制器–》对不同的对象及其特性使用不同的方式控制管理一》控制器说明:

ReplicaSet确保预期的Pod副本数量
Deployment无状态应用部署
StatefulSet有状态应用部署
DaemonSet确保所有Node运行同-一个Pod
Job一次性任务
Cronjob定时任务

更高级层次对象,部署和管理Pod

4、服务发现(Service同一个访问入口)

K8S内部的Pod通讯是以一-组私有地址进行通讯的,所以默认情况^下无法直接为客户端(服务、用户)提供访问

可以通过Service服务发现,把我们内部的pod资源暴露给客户端访问( 以暴露一个ip:端口的方式),
让客户端可以通过这个IP:端口的形式访问到K8S内部的多个pod (通常意义.上是一个应用的副本集)
小结: Service作为一组Pod的统一访问出入口(定义一-组Pod的访问策略),以RR分流算法进行负载均衡,把Pod中的应用服务暴露出来给客户端访问service一》暴露方式是四层的

访问的方式是通过kube-proxy匹配iptables功能进行转发的( 四层)
k8s官方默认提供了四层的代理/负载均衡方式,而我们可以借助于官方后续支持的ingres-nginx提供七层转发/负载均衡

5、存储

服务分类:
无状态服务: LVS
服务不依赖自身的状态,实例的状态数据可以维护在内存中。
任何一个请求都可以被任意一个实例处理。
不存储状态数据,实例可以水平拓展,通过负载均衡将请求分发到各个节点。
在一个封闭的系统中,只存在一-个数据闭环。
通常存在于单体架构的集群中。
有状态服务:例如数据库(需要持久化)
服务本身依赖或者存在局部的状态数据,这些数据需要自身持久化或者可以通过其他节点恢复。
一个请求只能被某个节点(或者同等状态下的节点)处理。
存储状态数据,实例的拓展需要整个系统参与状态的迁移。
在一个封闭的系统中,存在多个数据闭环,需要考虑这些闭环的数据一致性问题。
通常存在于分布式架构中。

**#简化: **
无状态服务: 就是没有特殊状态的服务,各个请求对于服务器来说统一无差别处理,请求自身携带了所有服务端所需要的所有参数(
服务端自身不存储跟请求相关的任何数据,不包括数据库存储信息

有状态服务: 与之相反,有状态服务在服务端保留之前请求的信息,用以处理当前请求,比如lsession等

6、调度器( Scheduler)

K8S会自动完成把一一个新的pod调度到对应的节点
对于生产环境上,我们往往会需要将pod创建的过程(比如创建到的节点位置)进行管理,
例如:
指定节点位置创建Pod(指定调度)
将不同的Pod创建在一一个节点上(亲和)
将不同的Pod创建在不同的节点上(反亲和)
根据自己的需要,对pod进行节点组装等

**

7、Label :标签, 附加到某个资源上,用于关联对象、查询和筛选

**
label
创建一个POD
1、编写pod yml文件(nginx资源怎么跑,用什么环境变量,需不需要资源限制,要调度到哪个节点) label: nginx
2、把pod暴露出去,Service- 》通过yml文件定义label: nginx
通过同一个labe1标签,进行关联,组合在一-起

8、Namespaces :命名空间,将对象逻辑.上隔离

资源名称空间:网络、user、pid、
default
kube -system
**生产环境:**一般会新建–个namespace,专门放置–些项目/服务使用的pod资源

9、Annotations :注释(描述性信息)

10、集群安全

认证、鉴权、访问控制、原理及流程
从搭建集群,就需要用到加密,CA认证
管理和控制,必须先通过认证/授权,才能进行管理
跑的一些应用,nginx、 squid -》需要一些访问控制策略

11、HELM (K8S中包的管理工具)

类似1 inux里面yum
helm .
安装magodb
helm模板、自定义

二、K8S架构

K8S也是一一个典型的C/S架构,由master端 和node端组成

从左往右看

1、master组件

①kube- apiserver
Kubernetes API,集群的统一入口,各组件协调者,以RESTful API提供接口
服务,所有对象资源的增删改查和监听操作都交给APIServer处理后再提交给Etcd存储。
② kube-controller-manager (控制器管理中心-定义资源类型)
处理集群中常规后台任务,- -个资源对应一- 个控制器,而ControllerManager 就是 负责管理这些控制器的。
③kube- scheduler
根据调度算法(预选/优选的策略)为新创建的Pod选择—个Node’节点,可以任意部署,可以部署在同一一个节点上,也可以部署在不
同的节点上。
④ etcd
分布式键值存储系统(特性:服务自动发现)。用于保存集群状态数据,比如Pod、Service 等对象信息
PS: etcd
v2版本:数据保存在内存中
v3版本:引入本地volume卷的持久化(可根据磁盘进行恢复)
etcd可以说是一种定时全量备份+持续增量备份的持久化方式一-》最后存储在磁盘中
但kubernetes 1.11版本前不支持v3
ETCD - -般会做为3副本机制(奇数方式),分布在三台master上(——》 单独用服务器部署ETCD )
master-——》奇数的方式部署(多节点的时候)
ETCD-》选举一》

2、node组件

①kubelet
kubelet是Master在Node节点上的Agent,管理本机运行容器的生命周期,比如创建容器、Pod挂载数据卷、下 载secret、获取容器和节点状态等工作。kubelet将 每个Pod转换成一组容 器。
kubelet一》先和docker引擎进行交互一》docker容 器(一组容器跑在Pod中)
②kube-proxy
在Node节点上实现Pod网络代理,维护网络规则、pod之间通信和四层负载均衡工作。
默认会写入规则至iptables,目前支持IPVS、同时还支持namespaces
③ docker或rocket
容器引擎,运行容器。

整体流程
①使用kubectl命令的时候会先进行验证权限(AUTH)
②通过API-server对容器云的资源进行操作

在这里插入图片描述

3、用户访问流程

●假设用户需创建nginx资源(网站/调度) kubectl - -》 auth - -》 api-server
基于yaml文件的kubectl create run / apply -f nginx. yaml (pod一些属性,pod )
●请求发送至master 首先需要经过apiserver (资源控制请求的唯一-入口)
● apiserver 接收到请求后首先会先记载在Etcd中
●Etcd的数据库根据controllers manager (控制器) 查看创建的资源状态(有无状态化)
●通过controllers 触发scheduler (调度器)
●scheduler通过验证算法()验证架构中的nodes节点,筛选出最适合创建该资源,接着分配给这个节点进行创建
●node’节点中的kubelet 负贵执行master给与的资源请求,根据不同指令,执行不同操作
●对外提供服务则由kube-proxy开设对应的规则(代理)
●container 容器开始运行( runtime 生命周期开始计算)
●外界用户进行访问时,需要经过kube-proxy -》service 访问到container_ (四层)
●如果container 因故障而被销毁了,master节点的controllers 会再次通过scheduler
资源调度通过kubelet再次创建容器,恢复基本条件限制(控制器,维护pod状态、保证期望值-副本数量)

官方三种部署方式

1、minikube(用于尝试k8s或日常开发的用户使用)
2、kubeadm(用于快速部署k8s集群)
3、二进制部署(手动部署每一个组件,组成k8s集群)

CA证书

CA证书中包含密钥对
CA证书可以对通信加密,同时标识身份的唯一性
.pem:证书
1、制作官方颁发的证书:
①、创建ca密钥(文件定义) ca-key.pem
②、创建ca证书(文件定义) ca.pem
2、制作master端的证书(用于内部加密通讯,同时为了给与Client端颁发master签名的证书)
①创建过程:需要以下几部
设置私钥确保安全加密 . pem
私钥签名确保身份真实 .CSr
制作证书(需要CA官方颁发) cert. pem
②创建私钥
③私钥签名
④使用ca证书与密钥证书签名
3、制作node端证书
①由master端制作node端密钥
②对node端的证书进行签名
③创建一个配置文件 (区别于服务端, 进行客户端验证)
④生成证书

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值