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、程序。這種隔離可以解決依賴沖突和安全性問題。輕量級:容器是輕量級的,因為它們共享主機操作系統的內核。這降低了資源開銷,使容器在啟動和停止方面非??焖???梢浦残裕喝萜骺梢栽诓煌挠嬎悱h境中運行,無論是本地開發環境、云計算平臺還是物理服務器。提供了一種一致的方式來部署應用程序,無需擔心環境差異。自包含:容器包含了應用程序及其所有依賴項,包括庫、配置文件和運行時環境。這使得容器變得自包含,應用程序的部署更加可預測和一致。管理工具:容器技術通常與容器編排工具(例如Docker Swarm、Kubernetes等)結合使用,以便自動化進行容器的部署、擴展和管理。Docker 是容器技術中最廣泛使用的工具

3、之一,它使容器的創建和管理變得相對簡單。容器技術已經在軟件開發、持續集成和持續交付(CI/CD)、微服務架構等領域廣泛應用,有助于簡化應用程序的部署和維護。容器技術底層實現命名空間(Namespaces):Linux 內核使用不同的命名空間來隔離各種系統資源,如進程、網絡、文件系統等。每個容器擁有自己的命名空間,使其看起來像一個獨立的操作系統??刂平M(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:18910500207email:微信/公眾號二維碼

友情提示

1、下載報告失敗解決辦法
2、PDF文件下載后,可能會被瀏覽器默認打開,此種情況可以點擊瀏覽器菜單,保存網頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站報告下載后的文檔和圖紙-無水印,預覽文檔經過壓縮,下載后原文更清晰。

本文(1-張連壯-容器化與云服務(1).pdf)為本站 (張5G) 主動上傳,三個皮匠報告文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對上載內容本身不做任何修改或編輯。 若此文所含內容侵犯了您的版權或隱私,請立即通知三個皮匠報告文庫(點擊聯系客服),我們立即給予刪除!

溫馨提示:如果因為網速或其他原因下載失敗請重新下載,重復下載不扣分。
客服
商務合作
小程序
服務號
折疊
午夜网日韩中文字幕,日韩Av中文字幕久久,亚洲中文字幕在线一区二区,最新中文字幕在线视频网站