(完整版)Kubernetes技术分享.ppt

上传人:wj 文档编号:18672401 上传时间:2023-08-28 格式:PPT 页数:41 大小:5.49MB
下载 相关 举报
(完整版)Kubernetes技术分享.ppt_第1页
第1页 / 共41页
(完整版)Kubernetes技术分享.ppt_第2页
第2页 / 共41页
(完整版)Kubernetes技术分享.ppt_第3页
第3页 / 共41页
(完整版)Kubernetes技术分享.ppt_第4页
第4页 / 共41页
(完整版)Kubernetes技术分享.ppt_第5页
第5页 / 共41页
(完整版)Kubernetes技术分享.ppt_第6页
第6页 / 共41页
(完整版)Kubernetes技术分享.ppt_第7页
第7页 / 共41页
(完整版)Kubernetes技术分享.ppt_第8页
第8页 / 共41页
(完整版)Kubernetes技术分享.ppt_第9页
第9页 / 共41页
(完整版)Kubernetes技术分享.ppt_第10页
第10页 / 共41页
(完整版)Kubernetes技术分享.ppt_第11页
第11页 / 共41页
(完整版)Kubernetes技术分享.ppt_第12页
第12页 / 共41页
(完整版)Kubernetes技术分享.ppt_第13页
第13页 / 共41页
(完整版)Kubernetes技术分享.ppt_第14页
第14页 / 共41页
(完整版)Kubernetes技术分享.ppt_第15页
第15页 / 共41页
(完整版)Kubernetes技术分享.ppt_第16页
第16页 / 共41页
(完整版)Kubernetes技术分享.ppt_第17页
第17页 / 共41页
(完整版)Kubernetes技术分享.ppt_第18页
第18页 / 共41页
(完整版)Kubernetes技术分享.ppt_第19页
第19页 / 共41页
(完整版)Kubernetes技术分享.ppt_第20页
第20页 / 共41页
亲,该文档总共41页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

(完整版)Kubernetes技术分享.ppt

《(完整版)Kubernetes技术分享.ppt》由会员分享,可在线阅读,更多相关《(完整版)Kubernetes技术分享.ppt(41页珍藏版)》请在冰点文库上搜索。

(完整版)Kubernetes技术分享.ppt

Kubernetes技术分享架构简介集群搭建常用命令应用实例Kubernetes简介Kubernetes是谷歌严格保密十几年的秘密武器Borg的一个开源版本,是一个全新的基于容器技术的分布式架构领先方案。

Borg是谷歌内部使用的大规模集群管理系统,基于容器技术,目的是实现资源管理的自动化,以及跨多个数据中心的资源利用率的最大化;K8s”是第一个将一切以服务为中心,一切围绕服务运转作为指导思想的创新型产品K8s是Go语言开发,是Docker的上层架构,就好像Java与J2EE的关系一样K8s是一个开放的开发平台,不局限于任何语言Kubernetes主要功能k8s能方便地管理跨机器运行容器化的应用提供应用部署、维护、扩展机制集群管理、安全防护、准入机制、多应用支撑、服务注册、服务发现、智能负载均衡、故障发现、自我修复、服务滚动升级、在线扩容、资源配额管理使用Docker对应用程序包装、实例化、运行以集群的方式运行、管理跨机器的容器解决Docker跨机器容器之间的通讯问题k8s的自我修复机制使得容器集群总是运行在用户期望的状态为什么使用Kubernetes?

K8s不仅仅支持Docker,还支持Rocket,这是另一种容器技术。

全面拥抱微服务架构使用k8s我们系统可以随时的整体迁移k8s系统具备了超强的横向扩容能力k8s提供完善的管理工具,涵盖了包括开发、部署测试、运维监控在内的各个环节K8s集群K8s架构K8s体系结构Master集群控制管理节点,所有的命令都经由master处理负责整个集群的管理和控制,基本上Kubernetes所有的控制命令都是发给它,它来负责具体的执行过程,我们后面所有执行的命令基本都是在Master节点上运行的1.KubernetesAPIServer(kube-apiserver),提供HttpRest接口的关键服务进程,是Kubernetes里所有资源的增、删、改、查等操作的唯一入口,也是集群控制的入口进程2.KubernetesControllerManager(kube-controller-manager),Kubernetes里所有资“”源对象的自动化控制中心,可以理解为资源对象的大总管3.KubernetesScheduler(kube-scheduler),负责资源调度(Pod调度)的进程,相“”当于公交公司的调度室4.etcdServer,Kubernetes里所有的资源对象的数据全部是保存在etcd中,(集群部署,不与master放同一台机器)MasterMasteretcdetcd是一个高可用的键值存储系统,主要用于共享配置和服务发现。

比对与ZooKeeper,etcd更量轻级1.etcd是由CoreOS开发并维护的,灵感来自于ZooKeeper和Doozer,提供了与ZooKeeper相似的功能,它使用Go语言编写,并通过Raft一致性算法处理日志复制以保证强一致性。

Raft是一个新的一致性算法,适用于分布式系统的日志复制,Raft通过选举的方式来实现一致性。

Google的容器集群管理系统Kubernetes、开源PaaS平台CloudFoundry和CoreOS的Fleet都广泛使用了etcd。

在分布式系统中,如何管理节点间的状态一直是一个难题,etcd像是专门为集群环境的服务发现和注册而设计,它提供了数据TTL失效、数据改变监视、多值、目录监听、分布式锁原子操作等功能,可以方便的跟踪并管理集群节点的状态etcd简单:

支持curl方式的用户API(HTTP+JSON)安全:

可选的SSL客户端证书认证快速:

单实例每秒1000次读写能力可靠:

使用Raft保证强一致性Etcd的用景包括服(应场务发现ServiceDiscovery)、消息布、均衡、发与订阅负载分布式通知、分布式、分布式列。

如果与协调锁队你熟悉ZooKeeper,你会发现etcd实了现ZooKeeper的功能Node除了Master,Kubernetes集群中的其他机器被称为Node节点,早期版本也称为Minion节点Node节点才是Kubernetes集群中的工作负载节点,每个Node都会被Master分配一些工作负载(Docker容器),当某个Node宕机,其上的工作负载会被Master自动转移到其他节点上去1.kubelet,负责Pod对应的容器的创建、启停等任务,同时与Master节点密切协作,实现集群管理的基本功能。

一旦Node被纳入集群管理范围,kubelet进程就会向Master汇报自身的情报,这样Master可以获知每个Node的资源使用情况,并实现高效均衡的资源调度策略。

而某个Node超过指定时间不上报信息,会被Master“判定为失”联,Node状态被标记为不可用(NotReady),随后Master“”会触发工作负载大转移的自动流程;2.kube-proxy,实现KubernetesService的通信与负载均衡机制的重要组件;3.DockerEngine(docker),Docker引擎,负责本机的容器创建和管理工作;NodePod是最小部署单元,一个Pod由一个或多个容器组成,Pod中容器共享存储和网络,在同一台Docker主机上运行。

同一个Pod里的容器共享同一个网络命名空间,可以使用localhost互相通信1.每个Pod“”都有一个特殊的被称为根容器的Pause容器,还包含一个或多个紧密相关的用户业务容器;2.一个Pod里的容器与另外主机上的Pod容器能够直接通信;3.如果Pod所在的Node宕机,会将这个Node上的所有Pod重新调度到其他节点上;4.普通Pod及静态Pod,前者存放在etcd中,后者存放在具体Node上的一个具体文件中,并且只能在此Node上启动运行;5.DockerVolume对应Kubernetes中的PodVolume;6.每个Pod可以设置限额的计算机资源有CPU和Memory;Requests,资源的最小申请量;Limits,资源最大允许使用的量;PodPodPod、容器与Node关系Endpoint(IP+Port)标识服务进程的访问点Event是一个事件记录,记录了事件最早产生的时间、最后重复时间、重复次数、发起者、类型,以及导致此事件的原因等信息。

Event通常关联到具体资源对象上,式排查故障的重要参考信息;Endpoint、EventServiceService一个应用服务抽象,定义了Pod逻辑集合和访问这个Pod集合的策略。

Service代理Pod集合对外表现是为一个访问入口,分配一个集群IP地址,来自这个IP的请求将负载均衡转发后端Pod中的容器。

Service通过LableSelector选择一组Pod提供服务。

在K8s集群中微服务的负载均衡是由Kube-proxy实现的,在K8s的每个节点上都有一个Service“”其实就是我们经常提起的微服务架构中的一个微服务,kubernetes中的核心。

通过分析、识别并建模系统中的所有服务为微服务KubernetesService,最终我们的系统由多个提供不同业务能力而又彼此独立的微服务单元所组成,服务之间通过TCP/IP进行通信,从而形成了我们强大而又灵活的弹性网络,拥有了强大的分布式能力、弹性扩展能力、容错能力ServiceServiceService如上图示,每个Pod都提供了一个独立的Endpoint(PodIP+ContainerPort)以被客户端访问,多个Pod副本组成了一个集群来提供服务,一般的做法是部署一个负载均衡器来访问它们,为这组Pod开启一个对外的服务端口如8000,并且将这些Pod的Endpoint列表加入8000端口的转发列表中,客户端可以通过负载均衡器的对外IP地址+服务端口来访问此服务。

运行在Node上的kube-proxy其实就是一个智能的软件负载均衡器,它负责把对Service的请求转发到后端的某个Pod实例上,并且在内部实现服务的负载均衡与会话保持机制。

Service不是共用一个负载均衡器的IP地址,而是每个Servcie分配一个全局唯一的虚拟IP地址,这个虚拟IP被称为ClusterIP。

ServiceNodeIPNode节点的IP地址,是Kubernetes集群中每个节点的物理网卡的IP地址,是真是存在的物理网络,所有属于这个网络的服务器之间都能通过这个网络直接通信;PodIPPod的IP地址,是DockerEngine根据docker0网桥的IP地址段进行分配的,通常是一个虚拟的二层网络,位于不同Node上的Pod能够彼此通信,需要通过PodIP所在的虚拟二层网络进行通信,而真实的TCP流量则是通过NodeIP所在的物理网卡流出的;ClusterIPService的IP地址。

特性如下:

仅仅作用于KubernetesServcie这个对象,并由Kubernetes管理和分配IP地址;无法被Ping“”,因为没有一个实体网络对象来响应;只能结合ServicePort组成一个具体的通信端口;NodeIP网、PodIP网域ClusterIP网之间的通信,采用的是Kubernetes自己设计的一种编程方式的特殊的路由规则,与IP路由有很大的不同;LabelLabel可以附加到各种资源对象上,一个资源对象可以定义任意数量的Label。

给某个资源定义一个Label,相当于给他打一个标签,随后可以通过LabelSelector(标签选择器)查询和筛选拥有某些Label的资源对象。

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

select*frompodwherepodsname=XXX,env=YYY,支持操作符有=、!

=、in、notin;部署和升级Pod,声明某种Pod的副本数量在任意时刻都符合某个预期值;Pod期待的副本数;用于筛选目标Pod的LabelSelector;当Pod副本数量小于预期数量的时候,用于创建新Pod的Pod模板(template);ReplicationController(RC)下一代的ReplicationControlle,RC与RS唯一区别就是lableselector支持不同,RS支持新的基于集合的标签,RC仅支持基于等式的标签。

ReplicationControlle只支持基于等式的selector(env=dev或environment!

=qa)但ReplicaSet还支持新的、基于集合的selector(versionin(v1.0,v2.0)或envnotin(dev,qa)),这对复杂的运维管理带来很大方便。

ReplicaSet拥有更加灵活强大的升级、回滚功能。

在新的版本中,官方推荐使用ReplicaSet和Deployment来代替RC,两者相似度90%,相对于RC一个最大升级是我们随时指导当前Pod“”部署的进度。

Deployment使用了ReplicaSet,除非需要自定义升级功能或根本不需要升级Pod,一般情况下,我们推荐使用Deployment而不直接使用ReplicaSet;典型使用场景:

创建一个Deployment对象来生成对应的ReplicaSet并完成Pod副本的创建过程;检查更新Deployment的状态来查看部署动作是否完成(Pod副本的数量是否达到预期的值);更新Deployment以创建新的Pod;(比如镜像升级)如果当前Deployment不稳定,则回滚到一个早先的Deployment版本;挂起或者恢复一个Deployment;Deployment意思是Pod横向自动扩容,目标是实现自动化、智能化扩容或缩容。

Pod负载度量指标:

CPUUtilizationPercentage通常使用一分钟内的平均值,可以通过Heapster扩展组件获取这个值。

一个Pod自身的CPU利用率是该Pod当前CPU的使用量除以它的PodRequest的值。

例如PodRequest定义值为0.4,当前Pod使用量为0.2,则它的CPU使用率为50%。

但如果没有定义PodRequest值,则无法使用CPUUtilizationPercentage来实现Pod横向自动扩容的能力;应用程序自定义的度量指标,比如服务在每秒内的相应的请求书(TPS或QPS)HorizontalPodAutoscaler(HPA)数据卷,是Pod中能够被多个容器访问的共享目录。

定义在Pod之上,被一个Pod里的多个容器挂载到具体的文件目录之下;与Pod生命周期相同。

可以让一个Pod里的多个容器共享文件、让容器的数据写到宿主机的磁盘上或者写文件到共享存储中Volume命名空间将对象逻辑上分配到不同Namespace,可以是不同的项目、用户等区分管理,并设定控制策略,从而实现多租户。

命名空间也称为虚拟集群。

NamespaceNode、Pod、ReplicationController和Service等都可以看“”作是一种资源对象,几乎所有的资源对象都可以通过Kubernetes提供的kubectl工具执行增、删、改、查等操作并将其保存在ectd中持久化存储。

Kubectl关闭CentOS自带的防火墙服务systemctldisablefirewall#systemctlstopfirewall安装Etcd和Kubernetes软件(会自动安装docker软件)yuminstallyetcdkubernetes按顺序启动所有服务systemctlstartetcdsystemctlstartdocker#systemctlstartkube-apiserver#systemctlstartkube-controller-manager#systemctlstartkube-scheduler#systemctlstartkubelet#systemctlstarttube-proxy64位CentOS7单机版Kubernetes集群环境安装由于篇幅,k8s集群安装文档,后续附件提供Kubernetes集群环境安装访问地址:

https:

/192.168.1.53:

30001/#!

/login获取token:

#kubectl-nkube-systemdescribe$(kubectl-nkube-systemgetsecret-nkube-system-oname|grepnamespace)|greptokenKubernetes-dashboardGrafana地址:

http:

/192.168.1.52:

30108/Kubernetes监控Kubernetes负载均衡nginxingressKubernetes暴露服务的方式目前只有三种:

LoadBlancerService、NodePortService、Ingress;前两种估计都应该很熟悉,下面详细的了解下这个IngressIngress由两部分组成:

IngressController和Ingress服务。

IngressContronler通过与KubernetesAPI交互,动态的去感知集群中Ingress规则变化,然后读取它,按照自定义的规则,规则就是写明了哪个域名对应哪个service,生成一段Nginx配置,再写到Nginx-ingress-control的Pod里,这个IngressContronler的pod里面运行着一个nginx服务,控制器会把生成的nginx配置写入/etc/nginx.conf文件中,然后reload一下使用配置生效。

以此来达到域名分配置及动态更新的问题。

Kubernetes负载均衡nginxingressDemo地址:

https:

/192.168.1.51/demo/查看nginx-ingress容器里的nginx配置,是动态变化的查看容器日志,轮询访问两台tomcatKubernetes负载均衡nginxingresskubectlgetnodes查看集群中有多少节点kubectlcreate-fmysql-rc.yaml创建kubectlapply-fmysql-rc.yaml创建或更新kubectldelete-fmysql-rc.yaml删除kuberctldeletepods-all删除所有的podkubectlgetrc查询RCkubectlgetpods查询pod默认空间kubectlgetpodsall-namespaces所有空间kubectlgetpods-namespacekube-system指定空间Kubectlgetpodpod-name-owide显示更多信息kubectlgetpods-owideKubectlgetpodpod-name-oyaml以yaml格式显示信息kubectl常用命令kubectlgetpods-nkube-system|grep-vRunningkubectlgetservice查询service默认空间kubectlgetservices-namespacekube-systemkubectlgetpods-nkube-system-owidekubectlgetdeployments查看kubectllogs-fpods/monitoring-grafana-xxxxxxx-nkube-systemkubectldescribenodecodename查看节点的详细信息kubectllogspod-name查看容器输出到控制台日志kubectl常用命令Theend!

Thankyou!

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2