上海品茶

您的当前位置:上海品茶 > 报告分类 > PDF报告下载

1-张连壮-容器化与云服务(1).pdf

编号:155512 PDF 65页 1.90MB 下载积分:VIP专享
下载报告请您先登录!

1-张连壮-容器化与云服务(1).pdf

1、PostgreSQL 容器化与云服务张连壮青云科技&PostgreSQL Leader容器化容器化的原理与实现&容器化完整运行组件&PostgreSQL容器化的实现云服务PostgreSQL云服务的实现multi_platform_postgresql支持 K8S 与 云服务 双平台的PostgreSQL operator容器化与云服务容器化容器化的原理与实现什么是容器容器是一种虚拟化技术,用于将应用程序及其所有依赖项打包在一个独立的容器中,以便能够在不同的计算环境中运行。容器技术的一些关键特点和概念:隔离性:容器提供了应用程序级别的隔离,确保一个容器中的应用程序不会干扰或影响其他容器中的应用

2、程序。这种隔离可以解决依赖冲突和安全性问题。轻量级:容器是轻量级的,因为它们共享主机操作系统的内核。这降低了资源开销,使容器在启动和停止方面非常快速。可移植性:容器可以在不同的计算环境中运行,无论是本地开发环境、云计算平台还是物理服务器。提供了一种一致的方式来部署应用程序,无需担心环境差异。自包含:容器包含了应用程序及其所有依赖项,包括库、配置文件和运行时环境。这使得容器变得自包含,应用程序的部署更加可预测和一致。管理工具:容器技术通常与容器编排工具(例如Docker Swarm、Kubernetes等)结合使用,以便自动化进行容器的部署、扩展和管理。Docker 是容器技术中最广泛使用的工具

3、之一,它使容器的创建和管理变得相对简单。容器技术已经在软件开发、持续集成和持续交付(CI/CD)、微服务架构等领域广泛应用,有助于简化应用程序的部署和维护。容器技术底层实现命名空间(Namespaces):Linux 内核使用不同的命名空间来隔离各种系统资源,如进程、网络、文件系统等。每个容器拥有自己的命名空间,使其看起来像一个独立的操作系统。控制组(Cgroups):Cgroups 允许限制和控制容器内资源的使用,包括 CPU、内存、磁盘和网络带宽等。这有助于确保容器之间不会相互干扰。容器的镜像OCI:Linux 容器镜像的标准规范由 Open Container Initiative(OC

4、I)维护和制定,OCI 是一个开放的标准组织,旨在定义容器运行时和容器镜像的标准规范。镜像是一个合集,包含操作系统的文件、配置和目录,但并不包括操作系统内核。在容器进程启动之前使用chroot重新挂载它的整个根目录/。所以同一台机器上的所有容器,都会共享宿主机操作系统的内核。docker&CRIDocker 和 Container Runtime Interface(CRI)是两个不同但相关的概念,它们在容器生态系统中扮演不同的角色。Docker:Docker 是一种完整的容器化平台,包括容器运行时(container runtime)、容器镜像、容器编排和管理工具。Docker 使用自己的容

5、器运行时运行镜像。Docker是最流行容器的工具。CRI(Container Runtime Interface):CRI 是一个开放标准,定义了容器运行时(container runtime)与容器编排系统之间的接口。它的目的是将容器编排系统(如Kubernetes)与容器运行时(如Docker、containerd、CRI-O等)解耦,使得容器编排系统可以支持多种不同的容器运行时。Docker只支持自己。CRI 可以支持多个容器运行时,包括 Docker、containerd、CRI-O 等。docker&CRI因为 OCI 镜像标准的规范,不论是docker还是CRI 的containe

6、r runtime都可以运行同一个镜像。容器化的性能测试工具:benchmarksql单位:tpmc性能损失:10%操作系统:ubuntu:20.04(docker image也是ubuntu:20.04)连接数主机docker10022675.9819799.3720015920.014234.234009871.219582.578006039.765898.94容器化的性能CPU:差距不大容器化的性能内存:差距不大容器化的性能磁盘IO:差距不大容器化的性能容器化的性能下降的主因:Nat网络命令:iptables-save网络流量的转发,是性能下降的主因容器化的性能网络性能损坏测试,性能下

7、降很多测试方法:pgbench select 1容器化的性能网络性能的提升:docker host 网络测试方法:pgbench select 1容器化的性能最终性能 云主机 VS 容器 近乎相同容器化操作系统的选择规格:2C/4G 工具:benchmarksql仓库:1000时常:30 分钟测试次数:三次测试取值:三次平均值性能最快:debianalpin:tiny linux 复杂操作不支持k8s&docker swarm&docker composeKubernetes:(简称K8s)是目前最受欢迎的容器编排工具之一,由Google开源并维护。Kubernetes提供了强大的容器集群管理

8、功能,支持自动化部署、自动扩展、自动恢复以及服务发现等。Docker Swarm:Docker Swarm 是Docker公司提供的容器编排工具,它被集成在Docker引擎中。Docker Swarm的设计目标是简化容器编排,使得Docker用户能够更轻松地部署和管理容器应用。docker composeDocker Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose可以使用YML 文件来配置应用程序需要的所有服务。然后使用一个命令就可以从 YML 文件配置中创建并启动所有服务。Docker Compose 相对于 docker swarm/kubern

9、etes 的最大区别是 docker compose是单机的。docker compose实例-Citusversion:3.9 services:monitor:image:citusdata/pg_auto_failover:v2.0-pg14environment:PGDATA:/tmp/pgafcommand:|pg_autoctl create monitor-ssl-self-signed-auth trust-runexpose:-5432使用pg_autoctl 创建一个 ha 节点docker compose实例-Cituscoord:image:citusdata/pg_a

10、uto_failover:v2.0-pg14environment:PGDATA:/tmp/pgafPGUSER:citusPGDATABASE:citusPG_AUTOCTL_MONITOR:postgresql:/autoctl_nodemonitor/pg_auto_failoverexpose:-5432command:|pg_autoctl create coordinator-ssl-self-signed-auth trust-pg-hba-lan-run使用pg_autoctl 创建一个 协调器 节点docker compose实例-Citusworker:image:citu

11、sdata/pg_auto_failover:v2.0-pg14environment:PGDATA:/tmp/pgafPGUSER:citusPGDATABASE:citusPG_AUTOCTL_MONITOR:postgresql:/autoctl_nodemonitor/pg_auto_failoverexpose:-5432command:|pg_autoctl create worker-ssl-self-signed-auth trust-pg-hba-lan-run使用pg_autoctl 创建一个 工作 节点docker compose实例-debianversion:3.1s

12、ervices:ubuntu:image:debian:bullseye-slimcommand:/bin/bash-c-while true;do sleep 3600;done;docker swarmswarm 是docker公司推出的用来管理docker集群的平台,将单一Docker宿主机变成一个单一的虚拟主机。(docker-compose仅在单个宿主机上运行)docker swarm使用的人少。kubernetesKubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。Kubernetes 拥有一个庞大且快速增长的生态,其服务

13、、支持和工具的使用范围相当广泛。(swarm 仅docker)k8s已经逐渐成为容器编排的事实标准。kubernetes-示例apiVersion:v1kind:Podmetadata:name:k8s-ubuntuspec:containers:-name:k8s-ubuntuimage:ubuntucommand:/bin/bash,-c,-args:while true;do sleep 3600;done;在k8s上部署一个ubuntu的最小示例容器化容器化完整运行组件exporter用于监控postgres等各集群的工具。exporter 被动收集数据,只有当exporter的服务接

14、收到请求后,才向集群收集数据。例如:curl exprter:9187。只有发起get请求的时候,exporter才连接数据库获取监控指标postgres exporter:https:/ exporter:https:/ exporter 数据:curl http:/exporter:9187/metrics数据示例:#TYPE pg_stat_database_numbackends gaugepg_stat_database_numbackendsdatid=0,datname=,server=127.0.0.1:55555 0pg_stat_database_numbackendsda

15、tid=1,datname=template1,server=127.0.0.1:55555 0pg_stat_database_numbackendsdatid=16385,datname=pg_auto_failover,server=127.0.0.1:55555 6pg_stat_database_numbackendsdatid=4,datname=template0,server=127.0.0.1:55555 0pg_stat_database_numbackendsdatid=5,datname=postgres,server=127.0.0.1:55555 1promethe

16、usprometheus是一个开源的监视工具具有几个重要特点:1)多维度数据模型由指标名称和和键/值对标签标识的时间序列数据组成的多维数据模型。2)灵活的查询语言(PromQL)可以对采集的metrics指标进行加法,乘法,连接等操作;3)不依赖分布式存储内置时序数据库。4)数据获取标准时间序列数据是服务端通过 HTTP 协议主动拉取获得的。5)支持图形化支持多种类型的图表和仪表盘。grafanagrafana是一个非常酷的数据可视化平台,应用于显示监控数据拥有众多的模板可以使用。alert managerAlert Manger是用来处理alert的组件,这些alert由任意的客户端程序发送

17、,例如Prometheus.Alert Manager 负责对Alert的去重,分组及路由到各种各样的接收端,如email,slack,甚至微信等。容器化完整运行架构图容器化kubernetes postgresql operatork8s operatoroperator 顾名思义 操作器。为何需要operator?deployment/statefulset 虽然可以创建资源,但是有些功能做不到。比如修改shared_buffers后,如果shared_buffers存储到cm中,那么集群虽然可以读取到修改的参数,但是仍然需要人工介入进行重启的动作。引入operator后,operator

18、 发现配置文件修改后,会自动进行集群节点的重启。k8s operatorCharmed Operator FrameworkJava Operator SDKKopf(Kubernetes Operator Pythonic Framework)kube-rs(Rust)kubebuilderKubeOps(.NET operator SDK)KUDO(Kubernetes 通用声明式 Operator)MastMetacontroller,可与 Webhook 结合使用,以实现自己的功能。Operator Frameworkshell-operatorkopf为何选择kopf1.简单强大op

19、erator yaml+dockerfile+py文件2.在线调试kopf run py 既可运行,无需镜像3.无需预先定义数据dict类型数据直接获取4.直观地将Python概念无特殊复杂的操作,一切操作很直观5.支持K8s中的任何资源svc/statefulset/deployment/pod 等等6.支持所有处理创建/修改/webhook等k8s CustomResourceDefinition定义创建资源的具体格式apiVersion:apiextensions.k8s.io/v1kind:CustomResourceDefinitionmetadata:name:postgresql

20、s.postgres.radondb.iospec:group:postgres.radondb.ionames:kind:PostgreSQLlistKind:PostgreSQLListplural:postgresqlssingular:postgresqlshortNames:pgscope:Namespacedk8s CustomResourceDefinitionpostgresql:type:objectproperties:users:type:objectproperties:admin:type:arrayitems:type:objectnormal:type:array

21、items:type:objectk8s operator deploymentkind:Deployment#operator 主要由 CustomResourceDefinition/operator deployment/accout/role/rolebinding/cluster role/cluster rolebing 实现,metadata:name:radondb-postgres-operatorspec:replicas:1template:metadata:labels:operator-name:radondb-postgres-operatorspec:servic

22、eAccountName:radondb-postgres-operator-accountcontainers:-name:radondb-postgres-operatorimage:radondb/radondb-postgres-operator:v1.3.2kopf run将上述资源创建完成后,通过kopf run py 既可开启运行operator健康检查:kopf run-liveness=http:/0.0.0.0:8080/healthz py会自动重启无响应的operatorkopf 接口kopf.on.create(API_GROUP,API_VERSION_V1,RES

23、OURCE_POSTGRESQL,timeout=operator_config.BOOTSTRAP_TIMEOUT,retries=operator_config.BOOTSTRAP_RETRIES,backoff=operator_config.BOOTSTRAP_RETRY_DELAY)def cluster_create(meta:kopf.Meta,spec:kopf.Spec,patch:kopf.Patch,status:kopf.Status,logger:logging.Logger,*_kwargs,):create_cluster(meta,spec,patch,stat

24、us,logger)#定义集群创建的过程kopf 接口kopf.on.delete(API_GROUP,API_VERSION_V1,RESOURCE_POSTGRESQL,timeout=operator_config.BOOTSTRAP_TIMEOUT,retries=operator_config.BOOTSTRAP_RETRIES,backoff=operator_config.BOOTSTRAP_RETRY_DELAY)def cluster_delete(meta:kopf.Meta,spec:kopf.Spec,patch:kopf.Patch,status:kopf.Statu

25、s,logger:logging.Logger,*_kwargs,):delete_cluster(meta,spec,patch,status,logger)#定义集群删除的过程kopf 创建pg集群1.创建 services读写/只读 的负载均衡2.创建ha节点pg_auto_failover monitor 节点3.创建postgresql节点a)创建statefulset serviceb)创建statefulset 包含 postgres 与 exporter 在同一个pod中4.创建用户5.创建SSL证书6.创建其他postgres节点云服务PostgreSQL云服务的实现传统部署

26、模式传统部署时代:早期,各个组织是在物理服务器上运行应用程序。由于无法限制在物理服务器中运行的应用程序资源使用,因此会导致资源分配问题。例如,如果在同一台物理服务器上运行多个应用程序,则可能会出现一个应用程序占用大部分资源的情况,而导致其他应用程序的性能下降。一种解决方案是将每个应用程序都运行在不同的物理服务器上,但是当某个应用程序资源利用率不高时,剩余资源无法被分配给其他应用程序,而且维护许多物理服务器的成本很高。虚拟机部署模式(部分云服务的模式)虚拟化技术允许你在单个物理服务器的 CPU 上运行多台虚拟机(VM)。虚拟化能使应用程序在不同 VM 之间被彼此隔离,且能提供一定程度的安全性,因

27、为一个应用程序的信息不能被另一应用程序随意访问。虚拟化技术能够更好地利用物理服务器的资源,并且因为可轻松地添加或更新应用程序,而因此可以具有更高的可扩缩性,以及降低硬件成本等等的好处。通过虚拟化,你可以将一组物理资源呈现为可丢弃的虚拟机集群。每个 VM 是一台完整的计算机,在虚拟化硬件之上运行所有组件,包括其自己的操作系统。容器部署模式容器类似于 VM,但是更宽松的隔离特性,使容器之间可以共享操作系统(OS)。因此,容器比起 VM 被认为是更轻量级的。且与 VM 类似,每个容器都具有自己的文件系统、CPU、内存、进程空间等。由于它们与基础架构分离,因此可以跨云和 OS 发行版本进行移植。部署模

28、式演进容器化 OR 云服务云服务与容器化 的市场份额仍然会逐年增加,物理机部署的模式将会被淘汰。云服务:使用入门容易开发云服务平台难度极大各厂商独立容器化:使用入门难开发容器平台容易标准化云服务与容器化在未来将会结伴而行,不会完全取代彼此。容器化将会成为未来各行业必备的基础。青云Appcenter框架通过青云appcenter框架,实现对应hook变可以轻松创建一个云服务。1.config.json配置集群页面需要输入的内容。例如:cpu内存配置参数节点数量存储类型青云Appcenter框架cluster.json.mustache配置集群的hookinit:order:0,cmd:/usr/

29、local/bin/pgtools-i,timeout:1200,start:order:0,cmd:/usr/local/bin/pgtools-s,timeout:1800,创建集群的具体动作,还可以拥有不同的角色等。各个服务底层实现不同,可以自行编写,例如start:systemctl start xxkubectl apply xx由于逻辑控制的规则不同,实际的start hook 可能需要几百行的代码来保障集群的稳定性multi_platform_postgresql支持 容器化 与 云服务 双平台multi_platform_postgresqlmulti platform pos

30、tgresql 是完全自研并采用kopf框架编写的k8s operator,支持k8s与虚拟机/物理机 的双平台。开源地址:https:/ apply-f multi-platform-postgresql/platforms/kubernetes/postgres-operator/deploy/postgres-operator.yaml2.安装postgres集群kubectl apply-f multi-platform-postgresql/platforms/kubernetes/postgres-operator/deploy/postgresql.yaml如何双平台1.操作同步

31、2.执行文件3.性能4.服务接口5.资源定义操作同步容器化平台,yaml 文件可以表述一切物理机上所需要的行为但 物理机 的行为并不适用与yaml因此,容器化与物理机都采用yaml进行交互操作同步-yaml解析器容器平台:由 k8s 处理物理机:操作轻量资源占用少k8s需要完整集群搭建,维护成本太高。解析yaml使用k3s即可执行文件容器平台:容器化的image物理机:物理机可以使用几乎所有类型的执行方法执行文件使用image,容器工具docker性能容器平台:性能无需特殊操作物理机:需要接近零损耗的运行模式docker+host 可以实现性能的近乎零损耗服务接口容器平台:services物理机:各种负载均衡均可,推荐LVS的非抢占模式封装services函数,处理不同yaml的内容资源定义容器平台:pod=pg+exporter物理机:主机=docker pg+docker exporter封装connection,由connection连接底层资源,所有操作均可以统一处理可以在线使用多种服务技术分享与论坛THANK YOUphone&wechat:email:微信/公众号二维码

友情提示

1、下载报告失败解决办法
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站报告下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。

本文(1-张连壮-容器化与云服务(1).pdf)为本站 (张5G) 主动上传,三个皮匠报告文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三个皮匠报告文库(点击联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。
会员购买
客服

专属顾问

商务合作

机构入驻、侵权投诉、商务合作

服务号

三个皮匠报告官方公众号

回到顶部