2019年軟件研究院新員工天宮paas分布式服務架構演進及k8s基礎培訓課件.pdf
下載文檔
上傳人:地**
編號:1268097
2024-12-16
35頁
2.49MB
該文檔所屬資源包:
大數據互聯網軟件研究院新員工規章制度信息安全5G基礎知識培訓課件資料
1、天宮paas分布式服務架構演進及K8S基礎知識培訓目錄2第一部分EDAS原理架構第三部分EDAS ON K8S 架構演進第四部分未來Service Mesh 之路第二部分K8S概念架構與kubectl命令3高性能去中心化的分布式服務框架傳統”中心化”服務框架服務調用者服務調用者 服務調用者服務調用者企業服務總線服務提供者服務提供者服務提供者服務提供者 服務調用者服務調用者服務提供者服務提供者服務調用者服務調用者服務提供者服務提供者服務提供者服務提供者服務調用者服務調用者 EDAS”去中心化”服務框架4EDAS介紹-EDAS在PaaS中的定位天宮平臺是總部省分協同一體化的公共云化平臺,是高效的一2、體化IT生態系統,而EDAS為SaaS層提供的分布式服務解決方案。IaaS資源池計算設備PaaS存儲設備網絡設備安全設備物理機虛擬機I-PaaSDocker容器一體化運營平臺服務治理平臺監控天梯平臺資源提供資源類型建維門戶SaaS號卡中心自然人中心沃行銷政企中臺天宮數據治理資源管理告警通知統計分析數據歸集分布式緩存分布式數據服務分布式服務框架分布式搜索引擎數據恢復數據傳輸評估系統反饋系統分布式文件系統消息中間件報表工具權益中心共享服務5EDAS介紹企業級分布式應用服務(Enterprise Distributed Application Service,簡稱 EDAS)是企業級互聯網架構解決方3、案的核心產品。是阿里巴巴中間件團隊多款久經沙場的分布式產品作為核心基礎組件。充分利用阿里云現有資源管理和服務體系,引入中間件成熟的整套分布式計算框架(包括HSF 分布式服務化框架、服務治理、運維管控、鏈路追蹤和穩定性組件等),以應用為中心,快速幫助企業級客戶輕松構建大型分布式應用服務系統。應用容器 集成多款中間件高性能服務框架 服務鑒權服務基礎設施 配置推送應用生命周期 大規模集群管理 應用分組發布 彈性伸縮 灰度發布賬號與權限 主子賬號 自定義角色 資源組 分布式調用鏈跟蹤 應用監控 IPAAS基礎監控 容器層監控 業務監控大盤服務治理 限流降級智能應用診斷 實時日志 容器運行時診斷6EDA4、S架構原理-高性能服務框架 HSF的調用原理-面向RPC(遠程過程)調用組件服務注冊中心ConfigerServer服務提供者HSF-Provider地址服務器AddressServer服務消費者HSF-Consumer配置推動中心DiamondServermysql8.規則配置推送9.Hsf服務調用7EDAS架構原理-EDAS邏輯架構8大規模分布式服務調用的鏈路跟蹤9EDAS架構原理-大規模分布式服務調用的鏈路跟蹤服務提供者集群JStorm 集群實時收集日志實時收集日志Hbase實時統計展示服務器寫入統計數據離線計算存儲MapReduce計算結果讀取原始日志與分析結果數據輸出與展現Hadoo5、p全量日志(每小時)日志文件帶埋點的中間件日志收集agent讀取寫入實時配置infobright10運維管控EDAS 中的限流降級主要用于解決后端核心服務因壓力過大造成系統反應過慢或者崩潰問題,通常用于例如商品秒殺、搶購、大促、防刷單等大流量場景。目錄11第一部分EDAS原理架構第三部分EDAS ON K8S架構 演進第四部分未來Service Mesh 之路第二部分K8S概念架構與kubectl命令12Kubernetes 概要 Kubernetes:Google開源的容器集群管理系統,為容器化應用提供了一整套功能,如:自動化部署、調度、服務發現、擴縮容及維護更新等,使容器化應用的部署和管理6、簡單并高效Kubernetes MasterREST API ServerKubelet容器容器Controller ManagerSchedulerETCDKube-ProxyPodsKubelet容器容器Kube-ProxyPodsKubelet容器容器Kube-ProxyPods用戶服務(Zookeeper、Nginx、HSF)服務管理容器分布彈性伸縮故障遷移節點管理Kubernetes-master節點節點類型運行組件描述master節點(管控節點)etcd集群kube-apiserver提供了k8s各類資源對象(pod,RC,Service等)的增刪改查等HTTP Rest接口,是整7、個系統的數據總線和數據中心。kube-scheduler從kube-apiserver中獲取的未被調度的pod通過一系列調度算法找到最適合的node來完成調度kube-controller-manager(節點控制器/副本集控制器/端點控制器等)負責集群內的Node、Pod副本、服務端點(Endpoint)、命名空間(Namespace)、服務賬號(ServiceAccount)、資源定額(ResourceQuota)的管理,當某個Node意外宕機時,Controller Manager會及時發現并執行自動化修復流程,確保集群始終處于預期的工作狀態。etcd保存集群所有的網絡配置和對象的狀態信8、息Kubernetes-node節點節點類型運行組件描述node節點(計算節點)kubelet負責pod的管理、健康檢查和監控kube-proxy主要是負責service的實現,具體來說,就是實現了內部從pod到service和外部的從node port向service的訪問。概念運行kubelet的k8s節點命令查看:kubectl get node owide資源對象:node概念通過將k8s系統內部的對象分配到不同的Namespace中,形成邏輯上的隔離,便于不同的分組在共享集群資源的同時還能被分別管理。同一Namespace下的Kubenetes對象的Name必須唯一。命令創建:kub9、ectl create ns xxx查看:kubectl get ns 刪除:kubectl delete ns xxx資源對象:namespace概念pod是k8s創建和管理的最小計算單元,由多個(至少兩個)容器組成.pod中的容器共享容器存儲、網絡和容器運行配置項,pod中的容器可以通過localhost通信。Pod中的容器總是被同時調度,可以把單個Pod想象成是運行獨立應用的“邏輯主機”。命令創建:kubectl apply f pod.yaml查看:kubectl get pod -n xxx-owide刪除:kubectl delete pod xxx -n xxx或kubectl 10、delete f pod.yaml資源對象:pod概念用作定義和更新pod的狀態、副本數、資源等。命令創建:kubectl apply f deployment.yaml查看deployment:kubectl get deployment n xxx owide查看pod:kubectl get pod -n xxx owide刪除pod:kubectl delete pod xxx n xxx資源對象:deployment概念service:k8s的服務發現方式,將一組pod暴露為一個域名或者一個ip供其他服務調用。endpoints:與svc一同被創建,與svc同名,是實現實際服務的端點11、集合,也就是service綁定的一組pod的ip列表。命令創建:kubectl apply f service.yaml查看:kubectl get svc n xxx owide kubectl get endpoints n xxx-owide刪除:kubectl delete svc xxx n xxxservice調用流程service類型三種port資源對象:service與endpoints類型訪問方式適用范圍clusterIPclusterIP:port訪問服務集群內服務調用nodePortnodeIP:nodePort訪問服務集群外服務調用類型描述port集群內通過cluste12、rIP+port訪問服務nodePort集群外通過nodeIP+nodePort訪問服務targetPortpod中提供服務的端口客戶端程序調用服務名或者域名coreDns服務名或域名解析為clusterIP使用負載均衡算法選取endpoints中的某個podIP轉發到某一個具體的pod中概念用來管理和存儲應用程序的配置文件的kubernetes資源對象,將配置從應用程序和鏡像中解耦,有利于應用程序的可以執行。命令創建1.從命令行創建:kubectl create configmap cm-1 -from-literal=db.host=172.168.0.1 -from-literal=db13、.port=3306 -n test 從文件中創建:kubectl create configmap cm-2 -from-file=./db.conf-n test查看命令:kubectl get cm cm-2 -n test-oyaml使用configmap通過環境變量注入pod1.創建pod:kubectl apply f pod-configmap.yaml2.查看pod的環境變量通過volume掛在到pod中1.創建pod:kubectl apply f pod-configmap-volume.yaml2.查看pod中的掛載點注意,configmap更新后I.通過環境變量注入po14、d的方式,pod中的env不會熱更新II.通過volume掛載到pod中的方式,掛載點的文件內容會熱更新資源對象:configMap描述默認情況下,k8s不會限制pod的內存,只要pod中應用程序需要,pod完全可以占用node的所有內存資源。舉例創建一個限制內存資源的pod:kubectl apply f pod-memory.yamlrequests:容器使用的最小內存資源需求,作為容器調度時的依據,當node節點剩余內存大于request時pod才有可能調度到該node上。limits:容器能使用內存的最大值容器使用內存超過limits會被內核oom_kill對于java程序,須設置jv15、m參數以防止oom_kill內存限制描述默認情況下,k8s不會限制pod的cpu,只要pod中應用程序需要,pod完全可以占用node的所有cpu資源。舉例創建一個限制cpu資源的pod:kubectl apply f pod-cpu.yamlrequests:容器使用的最小cpu資源需求,作為容器調度時的依據,當node節點剩余cpu大于request時pod才有可能調度到該node上。limits:容器能使用cpu的最大值容器使用cpu超過limits,不會被kill,但是會限制不超過limit值。cpu限制默認情況下,一個namespace中所有pod使用的cpu/memory資源總量是16、沒有限制的,為了合理地對cpu/memory資源進行規劃使用,可以對某個namespace的資源總量進行限制。創建ResourceQuota:kubectl apply-f quota-mem-cpu.yaml-n test查看ResourceQuota為了防止因為忘記設置requests和limits而導致的資源浪費等問題,可以對namespace中的pod設置默認的requests和limits值創建LimitRange:kubectl apply-f cpu-mem-default.yaml-n test查看LimitRangenamespace限制pod創建流程目錄25第一部分EDAS17、原理架構第三部分EDAS ON K8S架構 演進第四部分未來Service Mesh 之路第二部分K8S概念架構與kubectl命令cB2.0資源層容器化演進天 宮平臺-能力支撐基礎硬件層計算設備存儲設備網絡設備安全設備號卡自然人權益虛擬資源層RDS負載均衡分布式服務RDS應用服務新零售cB2.0資源使用現狀cB2.0資源目標演進方向天 宮平臺-能力支撐基礎硬件層計算設備存儲設備網絡設備安全設備號卡自然人權益虛擬資源層RDS負載均衡分布式服務RDS應用服務新零售容器-資源支撐cBSS2.0平臺除rds外其他組件已經全部容器化,平臺運行穩定無故障。實踐證明,基于EDAS的項目應用運行穩定,完全滿18、足各項目的當前需求及未來發展要求。采用逐步替代的演進方式,將應用EDAS服務從虛擬機逐漸遷移到k8s容器環境,最終實行全容器化支撐。K8S部署方案27跨數據中心部署K8S集群數據中心內部K8S集群通過calico協議實現多節點互聯;各節點的路由信息由路由反射器維護,每200臺宿主機配置一個路由反射器。跨數據中心K8S集群通過VxLAN技術實現calico互聯,最終實現統一管控(測試中)calico網絡元數據由Etcd主備集群維護,保證網絡狀態的準確性和可靠性。K8S on dcos與K8S on PM混搭模式,滿足不同需求廊坊廊坊K8S on dcosK8S on PM西咸K8S on PM統19、一管控平臺Etcd集群Etcd備份calicocalicoVxLANVxLANTunnelTunnelRRRREtcd集群28K8S技術平臺使用關鍵點(1)-EDAS納管 手動維護項目信息+自動注冊納管EDAS-POD相結合的方式,實現納管全流程的自動化處理 技術難點:EDAS納管與K8S資源分配還未完全貫通,需要結合EDAS管理流程特點制定解決方案開始創建租戶,EDAS應用、集群和資源組ecs啟動空的tomcat創建POD綁定ECS資源組啟動EDAS-agent進程EDAS自動為pod初始化運行環境并加載War包Pod加入指定應用加入EDAS集群應用是否已部署結束控制臺手動K8S后臺自動,無20、人工干預否否是是1.DTCENTER上創建項目租戶2.EDAS控制臺創建集群、ECS資源組和應用1.K8S中創建EDAS所需POD,集成EDAS的相關API按照EDAS管理流程實現POD啟動后自動注冊到EDAS,完成應用的自動部署和啟動操作2.參照EDAS-POD創建納管過程,實現POD銷毀后重啟和POD擴容過程。K8S技術平臺使用關鍵點(2)-負載均衡演進29 前臺應用界面采用SLB負載均衡的方式對外提供服務,目前手工配置。K8S集群內部REST或HTTP請求可通過K8S的SERVICE功能實現負載 技術難點:1.將POD納管到SLB負載體系中。2.內部SERVICE需由調用IP方式改成DN21、S或者SERVICESLB手動1.手動創建SLB2.手動配置SLB端口監聽3.手動配置綁定后端應用IPSLB自動化1.手動創建SLB2.EDAS的pod中自動調用slb的api自動綁定SVC訪問1、容器啟用service2、訪問容器restful服務通過service域名形式目錄30第一部分EDAS原理架構第三部分EDAS ON K8S架構 演進第四部分未來Service Mesh之路第二部分K8S基礎概念架構與kubectl命令31Service Mesh由來“Service Mesh”概念還非常年輕,這個詞在國內被翻譯為“服務網格”或“服務嚙合層”。和TCP/IP誕生的思想類似,在微服務使22、用多年后,人們發現需要獨立地抽象出一層邏輯網絡,專門用于“微服務通信與治理策略的落地”,讓應用只關心業務,把服務治理的事情全部交由“這一層”去處理。圖 1:傳統微服務之間的微服務治理邏輯的位置圖 2:微服務治理邏輯被獨立出來之后的位置32Service Mesh基本概念Service Mesh服務網格是一個基礎設施層,是層次化、規范化、無侵入的分布式服務治理技術平臺。主要用于處理服務間的通信。云原生應用有著復雜的服務拓撲,服務網格負責在這些拓撲中實現請求的可靠傳遞。在實踐中,服務網格通常實現為一組輕量級網絡代理,它們與應用程序部署在一起,而對應用程序透明。層次化分為數據面和控制面兩個概念,數據23、面是指所有數據流動的那個層面,控制面是用來控制這個數據面的,對服務去做處理。對數據面和控制面進行分層,帶來的好處是,針對一個復雜的系統進行切分,可以獲得更清晰的認識,這和devide and conque是同一個理念。規范化是指通過標準協議完成數據平面和控制平面的連接,同時,sidecar成為所有traffic互聯、互通的約束標準。無侵入是指我們希望通過無侵入,當新增一個業務的時候,不需要考慮一個SDK去初始化,而是可以通過sidecar的進程方式來解耦。33Istio是什么Istio項目是Service Mesh概念的最新實現,是由Google、IBM、Lyft聯合開發的開源項目,2017年24、5月發布第一個release 0.1.0,可以透明的分層到現有的分布式應用中,它也是一個平臺,包括允許它集成到任何日志記錄平臺,遙測或策略系統的API。Istio 多樣化功能集能夠高效的運行在分布式微服務架構中,并同時提供保護、連接和監控微服務等方法。流量管理:控制服務之間流量和API調用,使得調用更可靠。可觀察性:istio 強大的追蹤、監控和日志記錄的功能。策略執行:策略應用于微服務之間互動,確保訪問策略得以執行(執行是通過配置網格而不是修改程序代碼)。服務身份安全:Istio 提供底層安全通信信道,并大規模管理服務通信的認證、授權和加密34Istio架構Istio架構在網格邏輯上主要分為25、控制平面(Control Plane API)和數據平面(Data Plane)。控制平面:負責管理和配置代理來路由流量。主要分為三個組件Pilot、Mixer、Citadel。數據平面:由一組以sidecar方式部署的智能代理組成,這些代理可以調節和控制微服務及Mixer之間所有的網絡通信。Istio默認使用Envoy做智能代理,當然也支持其它代理,例如Linkerd、Nginmesh等。Pilot:為Envoy sidecar提供服務發現功能,為智能路由和彈性提供管理功能,它將控制流量行為的高級路由轉化為特定于Envoy的配置,并在運行時將它們傳播到sidecar。Mixer:獨立于平臺,負責在Service Mesh上執行訪問控制和使用策略,并從Envoy代理和其它服務中收集遙測數據。Istio-auth:通過內置身份和憑證管理以提供服務與服務間的身份驗證并且可以升級ServiceMesh中未加密的流量。CHINAUNICOM謝謝!