Sevice Computing:容器雲原理及kubernetes的相關概念
雲原生技術棧與容器
雲原生技術棧與容器層次圖如下:
- 供給層
– ssh證書登陸
• ssh 客戶端是公鑰、私鑰?Why?
– Ansible
• 通過 ssh 自動化執行腳本的工具
– 容器倉庫(Registry)
• docker tag!
• Docker hub 在線構建(獲得牆後容器)
• Local Registry(加速鏡像下載)
– 密鑰
• 生成私鑰、公鑰對,X509 證書,CA證書,Token
• 加密:用公鑰加密消息
• 解密:用私鑰解密消息
• 簽名:用私鑰簽名文檔
• 驗證:用公鑰驗證文檔(非常快)
- 運行層
– 容器接口
• 你必須知道google肢解docker的決心!
• Docker17.03.02ce是目前最兼容的版本
– 網絡接口
• Cni標準(谷歌),cnm標準(docker)
• Flannel(法蘭絨,CoreOS)
• Calico(印花布)
• 依賴:配置數據庫
– 存儲接口
• 分佈式存儲方案
• 外部高可靠存儲方案
- 編排層
分佈式強一致性配置數據庫
– 運行時層、調度層都依賴的集羣配置
– 主要功能
• 記錄了集羣內各類對象及其關係信息
• 實現集羣配置信息,如服務的註冊、查詢服務
• 實現配置信息的變更的訂閱服務
– 常見的方案
• etcd,consul,zookeeper
• 以etcd爲例:REST服務(v2)、BoltDB底層存儲
– 強一致性實現
• Raft一致性算法
• Raft原理動畫,
• 通常1,3,5,7個服務部署在不同的主機節點
- 應用層
數據庫(集羣,Scalable)
– 關係數據庫(兼容MySQL)
• Vitess,Ignite,TiDB
– 非關係數據庫
• KV數據庫(Redis),圖數據庫( Neo4j ),時序數據庫(LevelDB)
• 對象存儲(Object Storage),文檔,數據倉庫
消息與流(集羣)
– Kafka,RabbitMQ
應用程序管理
– Helm
CI/CD
– PipeLine(Drone,Wercker)
– Testing(Jenkins,Travis CI)
容器雲主要概念
資源和資源池(Resource & Resource Pool)
- 可管理,具有生命週期的對象,如主機、容器、服務等
集羣(cluster):一組可共享、可管理的資源集合
- 主機集羣:由物理機或虛擬機構成的資源集羣
- 容器集羣:由容器構成的資源集羣
節點(Node):特指雲原生棧中承載容器的主機
角色(Role):資源的權限集合
- 管理(Master):承擔管理集羣角色的節點
- 工人(Worker):承擔承載計算負載的節點
- 一個節點可同時擁有管理角色、工人角色
標籤(Label):資源的標註,用key-value表示
**容器(Container)😗*良好隔離的進程
服務實例(Service Instance)
- Kubernetes命名爲Pod:一個容器或具有相同生命週期、共享
網絡、存儲、環境上下文的容器集合 - 在docker swarm等中就是容器
- SiderCar:附加在主容器中的子進程
服務(Service)
- 多個服務實例組成的集羣
- 通過服務發現,自動分派請求負載到實例
命名空間(Namespace)
- 組織服務的空間,例如:
– kube-system系統管理服務空間(訪問該空間服務需要配證書!)
– default其他服務空間。
Kubernetes的概念
Kubernetes是Google開源的一個容器編排引擎,它支持自動化部署、大規模可伸縮、應用容器化管理。在生產環境中部署一個應用程序時,通常要部署該應用的多個實例以便對應用請求進行負載均衡。
在Kubernetes中,我們可以創建多個容器,每個容器裏面運行一個應用實例,然後通過內置的負載均衡策略,實現對這一組應用實例的管理、發現、訪問,而這些細節都不需要運維人員去進行復雜的手工配置和處理。
它具有以下特性:
- 可移植: 支持公有云,私有云,混合雲,多重雲(multi-cloud)
- 可擴展: 模塊化,插件化,可掛載,可組合
- 自動化: 自動部署,自動重啓,自動複製,自動伸縮/擴展
雲原生服務發現(IPVS)技術