Kubernetes技术分享ppt课件.ppt_第1页
Kubernetes技术分享ppt课件.ppt_第2页
Kubernetes技术分享ppt课件.ppt_第3页
Kubernetes技术分享ppt课件.ppt_第4页
Kubernetes技术分享ppt课件.ppt_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Kubernetes技术分享 架构简介集群搭建常用命令应用实例 1 Kubernetes简介 Kubernetes是谷歌严格保密十几年的秘密武器 Borg的一个开源版本 是一个全新的基于容器技术的分布式架构领先方案 Borg是谷歌内部使用的大规模集群管理系统 基于容器技术 目的是实现资源管理的自动化 以及跨多个数据中心的资源利用率的最大化 K8s是第一个将 一切以服务为中心 一切围绕服务运转 作为指导思想的创新型产品K8s是Go语言开发 是Docker的上层架构 就好像Java与J2EE的关系一样K8s是一个开放的开发平台 不局限于任何语言 2 Kubernetes主要功能 k8s能方便地管理跨机器运行容器化的应用提供应用部署 维护 扩展机制集群管理 安全防护 准入机制 多应用支撑 服务注册 服务发现 智能负载均衡 故障发现 自我修复 服务滚动升级 在线扩容 资源配额管理使用Docker对应用程序包装 实例化 运行以集群的方式运行 管理跨机器的容器解决Docker跨机器容器之间的通讯问题k8s的自我修复机制使得容器集群总是运行在用户期望的状态 3 为什么使用Kubernetes K8s不仅仅支持Docker 还支持Rocket 这是另一种容器技术 全面拥抱微服务架构使用k8s我们系统可以随时的整体迁移k8s系统具备了超强的横向扩容能力k8s提供完善的管理工具 涵盖了包括开发 部署测试 运维监控在内的各个环节 4 K8s集群 5 K8s架构 6 K8s体系结构 7 Master 集群控制管理节点 所有的命令都经由master处理负责整个集群的管理和控制 基本上Kubernetes所有的控制命令都是发给它 它来负责具体的执行过程 我们后面所有执行的命令基本都是在Master节点上运行的KubernetesAPIServer kube apiserver 提供HttpRest接口的关键服务进程 是Kubernetes里所有资源的增 删 改 查等操作的唯一入口 也是集群控制的入口进程KubernetesControllerManager kube controller manager Kubernetes里所有资源对象的自动化控制中心 可以理解为资源对象的 大总管 KubernetesScheduler kube scheduler 负责资源调度 Pod调度 的进程 相当于公交公司的 调度室 etcdServer Kubernetes里所有的资源对象的数据全部是保存在etcd中 集群部署 不与master放同一台机器 8 Master 9 Master 10 etcd etcd是一个高可用的键值存储系统 主要用于共享配置和服务发现 对比与ZooKeeper etcd更轻量级etcd是由CoreOS开发并维护的 灵感来自于ZooKeeper和Doozer 提供了与ZooKeeper相似的功能 它使用Go语言编写 并通过Raft一致性算法处理日志复制以保证强一致性 Raft是一个新的一致性算法 适用于分布式系统的日志复制 Raft通过选举的方式来实现一致性 Google的容器集群管理系统Kubernetes 开源PaaS平台CloudFoundry和CoreOS的Fleet都广泛使用了etcd 在分布式系统中 如何管理节点间的状态一直是一个难题 etcd像是专门为集群环境的服务发现和注册而设计 它提供了数据TTL失效 数据改变监视 多值 目录监听 分布式锁原子操作等功能 可以方便的跟踪并管理集群节点的状态 11 etcd 简单 支持curl方式的用户API HTTP JSON 安全 可选的SSL客户端证书认证快速 单实例每秒1000次读写能力可靠 使用Raft保证强一致性Etcd的应用场景包括服务发现 ServiceDiscovery 消息发布与订阅 负载均衡 分布式通知与协调 分布式锁 分布式队列 如果你熟悉ZooKeeper 你会发现etcd实现了ZooKeeper的功能 12 Node 除了Master Kubernetes集群中的其他机器被称为Node节点 早期版本也称为Minion节点Node节点才是Kubernetes集群中的工作负载节点 每个Node都会被Master分配一些工作负载 Docker容器 当某个Node宕机 其上的工作负载会被Master自动转移到其他节点上去kubelet 负责Pod对应的容器的创建 启停等任务 同时与Master节点密切协作 实现集群管理的基本功能 一旦Node被纳入集群管理范围 kubelet进程就会向Master汇报自身的情报 这样Master可以获知每个Node的资源使用情况 并实现高效均衡的资源调度策略 而某个Node超过指定时间不上报信息 会被Master判定为 失联 Node状态被标记为不可用 NotReady 随后Master会触发 工作负载大转移 的自动流程 kube proxy 实现KubernetesService的通信与负载均衡机制的重要组件 DockerEngine docker Docker引擎 负责本机的容器创建和管理工作 13 Node 14 Pod是最小部署单元 一个Pod由一个或多个容器组成 Pod中容器共享存储和网络 在同一台Docker主机上运行 同一个Pod里的容器共享同一个网络命名空间 可以使用localhost互相通信每个Pod都有一个特殊的被称为 根容器 的Pause容器 还包含一个或多个紧密相关的用户业务容器 一个Pod里的容器与另外主机上的Pod容器能够直接通信 如果Pod所在的Node宕机 会将这个Node上的所有Pod重新调度到其他节点上 普通Pod及静态Pod 前者存放在etcd中 后者存放在具体Node上的一个具体文件中 并且只能在此Node上启动运行 DockerVolume对应Kubernetes中的PodVolume 每个Pod可以设置限额的计算机资源有CPU和Memory Requests 资源的最小申请量 Limits 资源最大允许使用的量 Pod 15 Pod 16 Pod 容器与Node关系 17 Endpoint IP Port 标识服务进程的访问点Event是一个事件记录 记录了事件最早产生的时间 最后重复时间 重复次数 发起者 类型 以及导致此事件的原因等信息 Event通常关联到具体资源对象上 式排查故障的重要参考信息 Endpoint Event 18 Service Service一个应用服务抽象 定义了Pod逻辑集合和访问这个Pod集合的策略 Service代理Pod集合对外表现是为一个访问入口 分配一个集群IP地址 来自这个IP的请求将负载均衡转发后端Pod中的容器 Service通过LableSelector选择一组Pod提供服务 在K8s集群中微服务的负载均衡是由Kube proxy实现的 在K8s的每个节点上都有一个Service其实就是我们经常提起的微服务架构中的一个 微服务 kubernetes中的核心 通过分析 识别并建模系统中的所有服务为微服务 KubernetesService 最终我们的系统由多个提供不同业务能力而又彼此独立的微服务单元所组成 服务之间通过TCP IP进行通信 从而形成了我们强大而又灵活的弹性网络 拥有了强大的分布式能力 弹性扩展能力 容错能力 19 Service 20 Service 21 Service 如上图示 每个Pod都提供了一个独立的Endpoint PodIP ContainerPort 以被客户端访问 多个Pod副本组成了一个集群来提供服务 一般的做法是部署一个负载均衡器来访问它们 为这组Pod开启一个对外的服务端口如8000 并且将这些Pod的Endpoint列表加入8000端口的转发列表中 客户端可以通过负载均衡器的对外IP地址 服务端口来访问此服务 运行在Node上的kube proxy其实就是一个智能的软件负载均衡器 它负责把对Service的请求转发到后端的某个Pod实例上 并且在内部实现服务的负载均衡与会话保持机制 Service不是共用一个负载均衡器的IP地址 而是每个Servcie分配一个全局唯一的虚拟IP地址 这个虚拟IP被称为ClusterIP 22 Service NodeIPNode节点的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路由有很大的不同 23 Label Label可以附加到各种资源对象上 一个资源对象可以定义任意数量的Label 给某个资源定义一个Label 相当于给他打一个标签 随后可以通过LabelSelector 标签选择器 查询和筛选拥有某些Label的资源对象 我们可以通过给指定的资源对象捆绑一个或多个Label来实现多维度的资源分组管理功能 以便于灵活 方便的进行资源分配 调度 配置 部署等管理工作 LabelSelector示例 select frompodwherepod sname XXX env YYY 支持操作符有 in notin 24 部署和升级Pod 声明某种Pod的副本数量在任意时刻都符合某个预期值 Pod期待的副本数 用于筛选目标Pod的LabelSelector 当Pod副本数量小于预期数量的时候 用于创建新Pod的Pod模板 template ReplicationController RC 25 下一代的ReplicationControlle RC与RS唯一区别就是lableselector支持不同 RS支持新的基于集合的标签 RC仅支持基于等式的标签 ReplicationControlle只支持基于等式的selector env dev或environment qa 但ReplicaSet还支持新的 基于集合的selector versionin v1 0 v2 0 或envnotin dev qa 这对复杂的运维管理带来很大方便 ReplicaSet 26 拥有更加灵活强大的升级 回滚功能 在新的版本中 官方推荐使用ReplicaSet和Deployment来代替RC 两者相似度 90 相对于RC一个最大升级是我们随时指导当前Pod 部署 的进度 Deployment使用了ReplicaSet 除非需要自定义升级功能或根本不需要升级Pod 一般情况下 我们推荐使用Deployment而不直接使用ReplicaSet 典型使用场景 创建一个Deployment对象来生成对应的ReplicaSet并完成Pod副本的创建过程 检查更新Deployment的状态来查看部署动作是否完成 Pod副本的数量是否达到预期的值 更新Deployment以创建新的Pod 比如镜像升级 如果当前Deployment不稳定 则回滚到一个早先的Deployment版本 挂起或者恢复一个Deployment Deployment 27 意思是Pod横向自动扩容 目标是实现自动化 智能化扩容或缩容 Pod负载度量指标 CPUUtilizationPercentage通常使用一分钟内的平均值 可以通过Heapster扩展组件获取这个值 一个Pod自身的CPU利用率是该Pod当前CPU的使用量除以它的PodRequest的值 例如PodRequest定义值为0 4 当前Pod使用量为0 2 则它的CPU使用率为50 但如果没有定义PodRequest值 则无法使用CPUUtilizationPercentage来实现Pod横向自动扩容的能力 应用程序自定义的度量指标 比如服务在每秒内的相应的请求书 TPS或QPS HorizontalPodAutoscaler HPA 28 数据卷 是Pod中能够被多个容器访问的共享目录 定义在Pod之上 被一个Pod里的多个容器挂载到具体的文件目录之下 与Pod生命周期相同 可以让一个Pod里的多个容器共享文件 让容器的数据写到宿主机的磁盘上或者写文件到共享存储中 Volume 29 命名空间将对象逻辑上分配到不同Namespace 可以是不同的项目 用户等区分管理 并设定控制策略 从而实现多租户 命名空间也称为虚拟集群 Namespace 30 Node Pod ReplicationController和Service等都可以看作是一种 资源对象 几乎所有的资源对象都可以通过Kubernetes提供的kubectl工具执行增 删 改 查等操作并将其保存在ectd中持久化存储 Kubectl 31 关闭CentOS自带的防火墙服务 systemctldisablefirewall systemctlstopfirewall安装Etcd和Kubernetes软件 会自动安装docker软件 yuminstall yetcdkubernetes按顺序启动所有服务 systemctlstartetcd systemctlstartdocker systemctlstartkube apiserver systemctlstartkube controller manager systemctlstartkube scheduler systemctlstartkubelet systemctlstarttube proxy 64位CentOS7单机版Kubernetes集群环境安装 32 由于篇幅 k8s集群安装文档 后续附件提供 Kubernetes集群环境安装 33 访问地址 https 192 168 1 53 30001 login获取token kubectl nkube systemdescribe kubectl nkube systemgetsecret nkube system oname grepnamespace greptoken Kubernetes dashboard 34 Grafana地址 http 192 168 1 52 30108 Kubernetes监控 35 Kubernetes负载均衡nginxingress 36 Kubernetes暴露服务的方式目前只有三种 LoadBlancerService NodePortService Ingress 前两种估计都应该很熟悉 下面详细的了解下这个IngressIngress由两部分组成 IngressController和Ingress服务 IngressContronler通过与KubernetesAPI交互 动态的去感知集群中Ingress规则变化 然后读取它 按照自定义的规则 规则就是写明了哪个域名对应哪个service 生成一段Nginx配置 再写到Nginx ingress control的Pod里 这个IngressContronler的pod里面运行着一个nginx服务 控制器会把生成的nginx配置写入 etc nginx conf文件中 然后reload一下使用配置生效 以此来达到域名分配置及动态更新的问题 Kubernetes负载均衡nginxingress 37 Demo地址 https 192 168 1 51 demo 查看nginx ingress容器里的nginx配置 是动态变化的查看容器日志 轮询访问两台tomcat Kuberne

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论