Kubernetes集群实战 课件 7部署StatefulSet有状态服务;8部署Ingress服务_第1页
Kubernetes集群实战 课件 7部署StatefulSet有状态服务;8部署Ingress服务_第2页
Kubernetes集群实战 课件 7部署StatefulSet有状态服务;8部署Ingress服务_第3页
Kubernetes集群实战 课件 7部署StatefulSet有状态服务;8部署Ingress服务_第4页
Kubernetes集群实战 课件 7部署StatefulSet有状态服务;8部署Ingress服务_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

项目7部署StatefulSet有状态服务任务

1部署Web有状态服务目录CONTENTS1StatefulSet有状态服务的特征2部署持久化存储3部署headlessservice4部署有状态的Web服务一、理解有状态服务

使用Deployment无状态控制器来定义无状态的服务,使用StatefulSet控制器来定义有状态的服务。无状态的服务是指无论在集群中启动多少Pod,每个Pod中提供的服务是完全一致的,一致性体现在两个方面,一是在使用service访问服务时,访问哪个容器服务都是一致的,二是在所有的服务使用的都是同一数据。而有状态服务和无状态的服务正好相反,有状态服务提供的容器服务具有个别性,即每个服务和其它服务都是有区别的,这就需要解决两个问题,一是每个服务都要有自己的访问方式,二是每个服务都有自己的存储。有状态服务和无状态服务的区别有状态服务的特点01020304StatefulSet是用来管理有状态应用的工作负载API对象,使用StatefulSet部署的Pod拥有独一无二的身份标识。每个Pod拥有稳定的、唯一的网络域名,无论Pod调度到哪个节点,它的访问域名不变,需要创建headless服务为Pod提供唯一网络标识。有序的、优雅的部署和缩放。在Pod终止之前,所有的继任者必须完全关闭。每个Pod拥有稳定的、持久的存储,即Pod重新调度后还是能访问到相同的持久化数据部署有状态的Web服务在集群中需要部署多个Web服务,每个Web服务都是一个公司的网站,这就要求每个Web服务都要有自己的持久化数据存储,这里使用PV和PVC实现。安装NFS服务配置NFS服务创建PV二、创建headlessservice使用headlessservice的作用编写headlessservice的yaml脚本创建Service并检查结果编写有状态Web服务脚本编写有状态服务的yaml脚本检查Pod域名删除Pod后重建后查看名称检查Pod存储模拟某个pod重新调度的结果15%18%46%53%76%创建有状态服务使用的是StatefulSet控制器,有状态控制器通过配合headlessservice和持久化的存储为服务提供了稳定的域名和存储,同时可以进行有序的弹性伸缩。任务

2部署Mysql有状态服务目录CONTENTS1构建动态Web服务的docker镜像2部署应用有状态的Mysql服务部署动态Web服务1.下载centos:7镜像2.上传dami内容管理系统源程序3.编写Dokerfile4.基于Dockerfile制作dami:v1应用镜像1.构建大米内容管理系统镜像在互联网上使用Php程序开发的Web应用非常多,如各种内容管理系统,本任务使用用户经常使用的大米内容管理系统和织梦内容管理系统,首先构建大米内容管理系统docker镜像。构建动态Web镜像构建dedecms内容管理系统镜像上传zm内容管理系统源程序编写Dokerfile基于Dockerfile制作zm:v1应用镜像运行动态Web服务(1)编写yaml脚本定义创建dami容器的Deployment(2)创建外部访问的nodePortService50%(1)编写yaml脚本定义创建织梦容器服务的Deployment(2)创建外部访问的nodePortService80%运行大米内容管理系统应用运行dedecms内容管理系统应用部署应用有状态Mysql服务安装NFS服务配置NFS服务配置NFS服务,使用创建的2个共享目录启动NFS服务,查看配置信息。创建PV1.创建持久化存储服务在集群中需要部署两个动态内容管理Web服务,这就要求每个Web服务都要有自己的持久化数据存储,使用pv和pvc实现。2.部署headlessservice服务(1)编写headlessservice的yaml脚本(2)创建Service并检查结果3.部署有状态的Mysql服务(1)编写yaml脚本(2)创建服务检查结果单击编辑标题4.动态Web应用Mysql服务(1)检查pvc绑定情况(2)配置程序使用数据库谢谢观看项目8部署Ingress服务目录CONTENTS1Ingress的作用2Ingress的组成3Ingress的配置和使用任务1理解Ingress的作用8.1.1理解Ingress的作用任务实施

集群外部常用访问方式为了使外部的应用能够访问集群内的服务,在Kubernetes目前提供了以下几种方案:NodePort

创建NodePort类型的Service可以实现从集群外部访问内部,采用

NodePort

方式暴露服务面临问题是,服务一旦多起来,NodePort

在每个节点上开启的端口会及其庞大,而且难以维护,而且开启端口多了以后,会面临安全隐患。LoadBalancerLoadBalance方式受限于云平台,且通常在云平台部署ELB还需要额外的费用。Ingress

Ingress是集群外部访问服务最多的方式,也是在生产环境下经常使用的方式。Ingress的组成Ingress由Ingress资源对象和IngressController组成,两者作用如下:1.Ingress资源对象Ingress资源对象是反向代理规则,用来规定HTTP/HTTPS的外部请求应该被转发到的Service,如根据请求中不同的Host和Url路径请求到不同Service上。2.IngressControllerIngressController是一个反向代理程序,它负责解析Ingress的反向代理规则,如果Ingress有增删改的变动,所有的IngressController都会及时更新自己相应的转发规则,当IngressController收到请求后就会根据这些规则将请求转发到对应的Service。简单讲就是Ingress资源对象定义访问规则,IngressController实现访问规则。Ingress的实现原理首先由Ingress资源对象定义规则,即哪些域名访问哪些集群Service。2.Ingresscontroller通过与Kubernetesapi进行交互,动态的读取集群中Ingress资源对象定义的规则,按照这个规则,生成一段nginx配置,再写到nginx-ingress-controller的pod里,这个Ingresscontroller的pod里运行着一个Nginx服务,控制器会把生成的nginx配置写入/etc/nginx.conf文件中,然后reload一下使配置生效,实现动态更新。Ingress访问架构图1.七层访问与四层访问的区别如图8-2所示,ingresscontroller读取ingress的配置,然后实现不同的域名访问不同的集群内部Service,进而实现访问Service匹配的每个Pod资源,在internet和ingresscontroller之间配置ingress-nginxservice的作用是通过NodePort的方式暴露ingresscontroller的Pod服务,这样无论域名对应的是集群的哪个IP地址,都可以访问到后端的Pod服务了。(1)七层访问当代理服务器收到请求时,首先将报文拆开至应用层,分析用户请求的资源,然后代替用户请求后端服务器的资源,这样就可以实现根据不同的域名、URL、加密证书等信息实现转发请求。(2)四层访问会把请求报文拆开至传输层,根据请求的服务器的IP加端口号进行转发,四层代理是由后端服务器进行处理,包括报文的封装都是后端服务器进行封装。2.Ingress实现的七层访问架构图Ingress实现外部域名访问的架构如图8-2所示。图8-2Ingress外部访问架构图ingresscontroller目前主要有两种,分别是基于nginx服务的ingresscontroller和基于traefik的ingresscontroller,其中traefik的ingresscontroller,目前支持http和https协议。由于对nginx比较熟悉,而且需要使用TCP负载,所以选择基于nginx服务的ingresscontroller。8.1.2部署Ingress-Nginx控制器实现http访问

部署Ingress-Nginx控制器1.下载Ingress-Nginx控制器镜像和yaml脚本(1)下载镜像可以通过dockerhub网站下载Ingress-Nginx的镜像,这里已经下载到了本地,只需上传到k8s系统节点上即可,这里将nginx-ingress.tar镜像上传到node1节点,并使用dockerload命令加载到镜像中(2)下载yaml脚本同样可以在github等网站下载运行nginx-ingress-controller控制器的脚本,这里已经提前下载好,上传到master节点即可。在集群中需要部署多个Web服务,每个Web服务都是一个公司的网站,这就要求每个Web服务都要有自己的持久化数据存储,这里使用PV和PVC实现。(3)修改脚本创建控制器服务使用yaml脚本创建控制器Pod

配置Ingress规则1.构建Web服务在yaml目录下创建文件httpd.yaml2.创建Ingress资源对象创建Ingress的目的就是使用一个域名对应到service服务,然后通过这个域名房访问集群内的service,进而访问每个Pod容器服务,在yaml目录下,创建一个文件ingress.yaml3.检查配置结果在windows中,修改C:\Windows\System32\drivers\etc下的hosts本地域名解析文件,加入一行4.为nginx-ingress控制器创建NodePortService8.1.3配置https实现安全访问在8.1.2中实现了使用ingress-nginx为后端pod提供统一的入口,但有个问题需要考虑,就是如何为pod配置CA证书来实现HTTPS访问,如果在每个pod中配置CA需要太多的重复性操作,而且po是随时可能被kubelet杀掉重新创建的,当然这些问题有很多解决方法,如直接将CA配置到镜像中,但是这样又需要很多个CA证书。解决的方法是在ingress规则,为域名配置CA证书,只要可以通过HTTPS访问到域名,至于这个域名是怎么关联到后端提供服务的pod,这就是属于k8s群集内部的通信了,即便使用http来通信,也是可以接受的。生成证书和私匙创建Secret存储证书和私匙修改Ingress配置检

温馨提示

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

评论

0/150

提交评论