Kubernetes 必知必会.docx
《Kubernetes 必知必会.docx》由会员分享,可在线阅读,更多相关《Kubernetes 必知必会.docx(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第7章Kubernetes系列KubernetesMySQL云原生已经愈发变成一个炙手可热的话题,本章收录了爱可生团队在探索MyS QL云原生在K8s上的落地经验;章节包含了 Kubernetes的基础概念和MySQL数据库在落 地云原生过程中的考量和技术提供;Kubernetes学习笔记之基础知识篇 张强一什么是 Kubernetes ?对于订单、交易流水之类的表,常见是应用层会生成订单号、交易流水号之类的唯一编号,DBLE那么是以 这个唯一编号分库分表,而落到MySQL的物理表.匕也是直接以这个编号字段作为表的主键。Kubernetes,又称为k8s (首字母为k、首字母与尾字母之间有8个
2、字符、尾字母为s,所以简称k8s )或者简称为FkubeJ ,是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务。相 比 与传统部署以及虚拟化部署方式而言,具有如下特点: 敏捷应用程序的创立和部署:与使用VM镜像相比,提高了容器镜像创立的简便性和效率。 持续开发、集成和部署:通过快速简单的回滚(由于镜像不可变性),支持可靠且频繁的容器镜像 构建和部署。 关注开发与运维的别离:在构建/发布时而不是在部署时创立应用程序容器镜像,从而将应用程序与 基础架构别离。 可观察性:不仅可以显示操作系统级别的信息和指标,还可以显示应用程序的运行状况和其他指标 信 号。 跨开发、测试和生产的环境一
3、致性:在便携式计算机上与在云中相同地运行。 跨云和操作系统发行版本的可移植性:可在Ubunlu、RHEL、CoreOS、本地、Google Kubernetes Engine 和其他任何地方运行。 以应用程序为中心的管理:提高抽象级别,从在虚拟硬件上运行OS到使用逻辑资源在OS上运行 应用程序。 松散耦合、分布式、弹性、解放的微服务:应用程序被分解成较小的独立局部,并且可以动态部署 和管理-而不是在一台大型单机上整体运行。 资源隔离:可预测的应用程序性能。 资源利用:高效率和高密度。479第7章Kubernetes系列ace:default),spec:ports:name: ,po. Sel
4、ector: app=myapp,release=canary Type: ClusterIP IP: 10.96.109.76 Port: 80/TCP TargetPort: 80/TCPEndpoints: 10.244.2.10:80,10.244.3.9:80,10.244.4.10:80 + 2 more. Session Affinity: None Events: 2 .是否能看到Endpoints列且有正常输出?非正常输出那么前往。3 . kubectl port-forward service/ 8080: 成功输出如下: root10-186-65-37 kubectl
5、port-forward service/myapp 8080:80 Forwarding from 127.0.0.1:8080 - 80 Forwarding from :1:8080 - 80.成功那么前往2.3 ,失败那么前往。222 Selector 与 Pod label 比对查看 pod 的 label 信息 kubectl describe pod root10-186-65-37 # kubectl describe pod myapp-deploy-55b54d55b8-5msx8 | grep -i label -A 2 Labels: app=myapp pod-tem
6、plate-hash=55b54d55b8 release=canary查 看 service 的 selector 信 息 kubectl describe service root10-186-65-37 # kubectl describe service myapp | grep -i selecto Selector:app=myapp,release=canary3.比对两者是否正确匹配,错误那么进行修正,正确那么前往223。223检查Pod是否已分配IP查看 pod 的 ip 信息 kubectl describe pod 2.已正确分配ip,那么问题是由于kubectl导致。r
7、oot10-186-65-37kubectl describe pod myapp-deploy-55b54d55b8-5msx8 | grep -iip IP:IPs :未分配ip ,那么问题是由于Controller manager导致。488第7章Kubernetes系列224 检查 Service TargetPort 与 Pod ContainerPort. 查看 service 的 TargetPort 信息:kubectl describe service root10-186-65-37kubectl describe service myapp | grep -i targe
8、tportTargetPort: 80/TCP1 .查看 pod 的 ContainerPort 信息:kubectl describe pod root010-186-65-37 kubectl describe pod myapp-deploy-55b54d55b8-5msx8 | gr叩-i portPort: 80/TCPHost Port: 0/TCP2 .上方两者一致那么问题是由于kube-proxy导致,不一致那么进行信息修正。23 Ingress模块检查Ingress当前状态检查1. kubectl describe ingress 成功输出如下:root10-186-65-3
9、7 *# kubectl describe ingress ingress-tomcat-tIsName: ingress-tomcat-tlsNamespace: defaultAddress:Default backend: default- -backend:80 ()TLS:tomcat-ingress-secret terminates Rules:Host Path Backends tomcat:8080 (10.244.2.11:8080,10.244.4.11:8080,10.244.5.10:8080)Annotations:kubectl.kubernetes.io/la
10、st-applied-configuration:apiVersion:extensions/vlbetal,kind:Ingress,metadata:annotations:kuberne ts.io/ingress.class:nginx),name:ingress-tomcat-tls/namespace:default/spec:rules:host:tomcat.quan , :paths: backend:serviceName:tomcat/servicePort:8080,path:null,tls:hosts :tomcat.quan ,secretName:tomcat-
11、ingress-secretkubernets.io/ingress.class: nginxEvents: 2.是否能看到backends列且有正常输出?正常输出前往2.3.4 ,否那么前往232。489第7章Kubernetes系列2.32 检查 ServiceName 和 ServicePortkubectl describe ingress 1. kubectl describe senice root10-186-65-37 # kubectl describe ingress ingress-tomcat-tIs | grep -E serviceName|servicePortk
12、ubectl.kubernetes.io/last-applied-configuration:apiVersion:extensions/vlbetal/kindn:Ingress/metadata:annotations:kubernets.io/ingress.class:nginx),name:ingress-tomcat-tls/,namespace:defaulfl/spec:rules:host:tomcat.quan , :paths: backend:serviceName:tomcat,servicePort:8080,path:null,tls:hosts :tomcat
13、.quan /secretName:tomcat-ingress-secret3.检查前两者的ServiceName和ServicePort书写是否正确,假设正确那么前往2.3.3,错误请修正。23.3 Ingress controller 文档.问题是由于 Ingress controller 导致,请查阅文档寻找解决方法: s:/kubcrnetes.io/docs/concepts/ser vices-nelworking/ingress-controllers/23.4 检查 port-forward ingresskubectl port-forward 8080: 测试是否能正常访
14、问:curl localhost:80 80可正常访问前往2.3.5 ,否那么前往2.3.3 o检查能否在外网通过Ingress进行访问1 .可从外网成功访问,故障排查结束。2 .假设无法从外网访问,那么问题是由于基础设施(infrastruclure)或集群暴露(exposed)方式导致,请排 查。490第7章Kubernetes系列7.3 kubernetes环境测试部署MySQL的随想 王悦注:阅读本文需要了解pod, controller, service等一些kubernetes的基本概念。什么是kubernetes ?有了容器技术后为什么还需要kubernetes ?容器凭借其良好
15、的移植性,敏捷性和革命性的打包方式迅速成为云服务的新基础设施。但Docker毕竟只 是containerruntime,我们需要一个编排框架作为系统核心来串联开发、测试、部署、运维等整个软 件生命周期。kubernetes就提供这样一个框架,提供大量容器的部署、编排、管理的能力。如果将MySQL部署在kubernetes会有哪些挑战?带来了什么收益?虽然kubernetes社区一直在努力使得有状态应用成为一等公民,也推出 了 statefulset控制器支持pod的 顺序部署,稳定的域名访问和存储访问。但鉴于MySQL部署运维的多样性和复杂性,在kubernetes上部 署MySQL仍然要面临
16、众多挑战。1、业务流量入口的配置方式传统虚拟机环境下,我们通过虚IP的方式,让业务应用都配置事先定义的一个虚IP为链 接数据库的地址,然后由高可用服务保证虚IP始终能被路由到master数据库。在kubern etes中,出现了一层网络插件屏蔽了底层网络拓扑,高可用服务管理虚IP的方式需要随之 适应调整,比方通过service结合标签完成虚IP的漂移,但service本身是kubernetes提 供的一项功能,其可靠性和性能都取决于kubernetes服务的稳定。以性能来说,service是 kubc proxy组件通过配置iptables实现的,当iptablcs规那么较多时不可防止的会产生
17、时 延,需要我们针对性的解决。2、容器隔离带来的监控视野问题在kubernetes中,如果将MySQL制作为container运行在一个pod中,container会将MySQL进程和 运行环境隔离在一个单独的namespace中。监控组件在获取MySQL的一些mctirc时,可能不得不进入 与MySQL同一个namespace中,在部署和设计监控组件时需要考虑到这些限制。3、存储在kubernetes中,支持配置各种不同的存储。如果使用本地存储local persistent volume,那么需要绑定 MySQL在一个固定的节点,这就完全浪费了 kubernetes灵活调度的天然优势;而如
18、果使用远程共享存储, 确实是将MySQL进程与其存储完全解耦,使得MySQL进程可以在任意节点调度,然而考虑到高I/O吞 吐量的情况,就不是那么美好了。设计时需要考量远程存储是否能够满足MySQL的带宽要求。4、高可用/备份恢复491第7章Kubernetes系列7.3 kubernctes环境测试部署MySQL的随想 kubemetes提供的statefulset控制器只能提供最基本的部署,删除功能,无法实现完善的MySQL集群高 可用/备份恢复操作。对于有状态应用的部署,仍需要定制开发,所以多数公司提供了定制的operator来完 成应用容器的管理。比方etcd operator, MyS
19、QL operator,后文将为大家详述我测试使用MySQL o perator 的一些记录。注:operator是CoreOS推出的旨在简化复杂有状态应用管理的框架,我们可以通过operator自定义一 个有状态应用容器的控制器,operator通过kubernetes API观察集群现有状态,管理集群行为,以到达 用户期望的集群状态。说完了问题和挑战,我们来说说收益。把MySQL塞进kubernetes生态带来了什么?1 .丰富的网络配置结合kubernetes的cni网络插件可以快速实现限流,黑白名单.各类kubernetes调度、运维功能敏捷部署,滚动更新,依据负载情况的节点调度.与同
20、样部署在kubernetes生态的业务应用紧密配合然而考虑到MySQL这类持久层软件的特殊性,不能简单的套用kubernetes的原生API功能,比方 滚动更新需要考虑主从角色的先后顺序,配套高可用软件在MySQL更新阶段的行为,业务流量的切 换等等。这些在传统环境中已经解决的问题在kubernetes中仍然需要被重新规划解决方案。控制器介绍鉴于以上种种挑战,在kubernetes上管理MySQL需要一套专为MySQL设计的控制器(就我们前面说 到的operator),目前开源社区中比拟流行的有以下两个控制器:1、Oracle MySQL operator先简单过一遍功能:1 .最低支持版本.
21、只能支持部署MySQL Group Replication架构,不支持Master-Slave部署2 . operator自动建的service无法区分读写节点,推荐应用使用mysql router,由mysql router路由 至下游实例.提供mysqldump (不支持其他备份工具)配置定时备份,备份文件上传远程存储,目前仅实现了 AWS S3接口3 .支持从远程存储中获取备份执行回放还原. operator内置提供了一些基础metric监控集群状态注:具体的安装步骤就不在这里详述了,大家可以参考, s:/github /oracle/MySQL-operator/blob/master
22、/docs/tutorial.md492第7章Kubernetes系列下面探索一下operator部署时的一些实现方式:1. operator 监听用户定义的配置 cr 调用 kubernetes 叩i 创立 statefulset 来部署 MySQL Group Replicat ion集群使用kubernetes secret存储和管理root密码2. statefulset创立的pod中定义两个container, 一个容纳mysqld进程,一个容纳以sidecar的模式 负责运维功能的mysqlagent进程mysqld作为容器的1号进程,由kubernetes负责守护3. mysql
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Kubernetes 必知必会
限制150内