Docker系列(八)Kubernetes介紹
各元件說明:
節點
節點在Kubernetes由虛擬機器或者實體機表示,常稱為Minion,即從屬主機。當一個節點加入到Kubernetes系統中時,它將會建立一個數據結構來記錄節點資訊(元資料),且不是所有節點都能夠加入到Kubernetes系統中,只有通過驗證後的節點才能夠成為Kubernetes階段。目前管理節點有兩種方式分別為:節點管理器(Node Controller)和通過命令手動管理。
Pod
在Kubernetes中,Pod是最小的可建立、排程和管理的部署單元,它是容器化環境中的“邏輯主機”,可以包含一個或多個有關聯的容器,並且容器間可以共享資料卷。
容器存在於Pod之中,而Pod又存在於節點中。
Pod主要功能:同一Pod中的容器資源共享和通訊。
Service
pod的路由代理抽象,用於解決pod之間的服務發現問題。因為pod的執行狀態可動態變化(比如切換機器了、縮容過程中被終止了等),所以訪問端不能以寫死IP的方式去訪問該pod提供的服務。service的引入旨在保證pod的動態變化對訪問端透明,訪問端只需要知道service的地址,由service來提供代理。
replicationController
pod的複製抽象,用於解決pod的擴容縮容問題。通常,分散式應用為了效能或高可用性的考慮,需要複製多份資源,並且根據負載情況動態伸縮。通過replicationController,我們可以指定一個應用需要幾份複製,Kubernetes將為每份複製建立一個pod,並且保證實際執行pod數量總是與該複製數量相等(例如,當前某個pod宕機時,自動建立新的pod來替換)。
Label
Labe是一組附加在物件上的鍵值對,用於區分Pod、Service、Replication Controller的key/value鍵值對,Pod、Service、 Replication Controller可以有多個label,但是每個label的key只能對應一個value。Labels是Service和Replication Controller執行的基礎,為了將訪問Service的請求轉發給後端提供服務的多個容器,正是通過標識容器的labels來選擇正確的容器。同樣,Replication Controller也使用labels來管理通過pod 模板建立的一組容器,這樣Replication Controller可以更加容易,方便地管理多個容器,無論有多少容器。
Proxy
Proxy不但解決了同一主宿機相同服務埠衝突的問題,還提供了Service轉發服務埠對外提供服務的能力,Proxy後端使用了隨機、輪循負載均衡演算法。
Kubelet
用來監管Pod裡面容器執行情況的。一旦某個Pod裡面的容器發生意外掛掉了,就由Kubelet來完成對其的重建。
apiserver
作為kubernetes系統的入口,封裝了核心物件的增刪改查操作,以RESTFul介面方式提供給外部客戶和內部元件呼叫。它維護的REST物件將持久化到etcd(一個分散式強一致性的key/value儲存)。
Scheduler
負責叢集的資源排程,為新建的pod分配機器。這部分工作分出來變成一個元件,意味著可以很方便地替換成其他的排程器。
controller-manager
負責執行各種控制器,目前有兩類:
endpoint-controller:定期關聯service和pod(關聯資訊由endpoint物件維護),保證service到pod的對映總是最新的。
replication-controller:定期關聯replicationController和pod,保證replicationController定義的複製數量與實際執行pod的數量總是一致的。
slave(稱作minion)執行兩個元件:
kubelet
負責管控docker容器,如啟動/停止、監控執行狀態等。它會定期從etcd獲取分配到本機的pod,並根據pod資訊啟動或停止相應的容器。同時,它也會接收apiserver的HTTP請求,彙報pod的執行狀態。
Proxy
負責為pod提供代理。它會定期從etcd獲取所有的service,並根據service資訊建立代理。當某個客戶pod要訪問其他pod時,訪問請求會經過本機proxy做轉發。
Kubernetes排程說明
Scheduler負責Pods在各個節點上的分配。Scheduler是外掛式的,Kubernetes將來可以支援使用者自定義的scheduler
排程流程:
1、從快取待排程pod物件的佇列PodQueue中彈出一個pod物件。
2、該pod和儲存所有minion物件的連結串列MinionLister作為排程演算法的輸入,執行排程演算法選擇一個minion作為pod的排程目的地dest。如果無法選擇一個可用的minion則輸出一個event資訊,說明pod排程失敗。如果成功選擇一個可用的minion,則使用該pod的namespace、pod名、選擇的minion這三個屬性新建一個Binding物件。
3、將pod分派到指定的minion上執行,這個動作也叫繫結(bind),bind就是向apiserver返回一個Binding物件,該Binding物件最終由apiserver呼叫etcd介面進行持久化儲存。如果繫結失敗,則輸出繫結被拒絕的event資訊,反之輸出排程成功的event資訊。
排程規則
排程策略分為兩大類:Predicates和Priorities,其中Predicates回答"能不能"的問題,即能否將pod排程到特定minion上執行,而Priorities則是在Predicates的答案基礎上回答"到底有多適合"的問題,即給特定minion打分評價優先順序。
Predicates類
1、PodFitsPorts對應的實現函式是PodFitsPorts,他的評估依據就是埠是否衝突,即檢測待排程的pod中所有容器要用到的埠集對應的HostPort集與minion上已使用的埠是否衝突。
2、PodFitsResources對應的實現函式是PodFitsResources,他的評估依據就是資源是否夠用,即檢測minion上已經執行的所有pod對資源的需求總量與待排程pod對資源的需求量之和是否超出minion的資源容量。
3、NoDiskConflict對應的實現函式是NoDiskConflict,他的評估依據就是掛載的磁碟(volume)是否衝突。
4、MatchNodeSelector對應的實現函式是PodSelectorMatches,他的評估依據就是minion是否被pod的NodeSelector選中。
5、HostNamer對應的實現函式是PodFitsHost,他的評估依據就是pod的hostname。
Priorities類
1、LeastRequestedPriority對應的實現函式是LeastRequestedPriority,他的計算原則是儘量將pod排程到資源佔用比較小的minion上。
2、ServiceSpreadingPriority對應的實現函式是CalculateSpreadPriority,他的計算原則是使同一個minion上屬於相同service的pod數量儘可能少,這樣排程的pod能夠儘可能地實現service的高可用性和流量負載均衡。
3、EqualPriority對應的實現函式是EqualPriority,他的計算原則是平等對待MinionLister中的每一個minion。
Pod、RC、Service之間的關係
Replication Controller
Pod副本控制器,限定某種Pod的當前例項的個數,提供服務的滾動升級功能。通過標籤選擇器選擇目標Pod.
Service
無狀態的為服務,一容器的方式進行隔離,擁有一個唯一的名字和、虛擬訪問地址IP地址(ClusterIP)+Port、外部系統訪問的對映埠NodePort
Pod
一組容器的一個 單一集合體,k8s最小排程單元且Pod裡的所有容器共享資源(網路、Volumes),擁有名稱、IP、狀態、Label、一組容器程序等。
關係說明:
Service執行在Pod之上,Pod執行在容器之上,RC用於管理Pod例項,控制例項個數及保障正在執行例項個數。
RC不是定義在Service之上原因:
根據以上說明:Service由Pod提供的服務功能,而RC用於管理Pod例項,如果RC定義在Service之上將會導致,自己出現問題沒有人監控,而且整個系統結構將不合理。
關係圖:
相關推薦
Docker系列(八)Kubernetes介紹
Kubernetes元件功能圖 各元件說明: 節點 節點在Kubernetes由虛擬機器或者實體機表示,常稱為Minion,即從屬主機。當一個節點加入到Kubernetes系統中時,它將會建立一個數據結構來記錄節點資訊(元資料),且不是所有節點都能夠加入到Kube
Docker系列(八):kubernetes橫空出世背後的祕密
Docker與CoreOS的恩怨情仇 2013年2月,Docker建立了一個網站釋出它的首個演示版本, 3月,美國加州Alex Polvi正在自己的車庫開始 他的 第二次創業 有了第一桶金的Alex這次準備幹一票大的,他計劃開發一個足以顛覆傳統的伺服器系統的Linux發行版。為了提供
搜索引擎系列八:solr-部署詳解(solr兩種部署模式介紹、獨立服務器模式詳解、SolrCloud分布式集群模式詳解)
nod 為什麽 用途 serve creat 復制 stand 數據 變量名 一、solr兩種部署模式介紹 Standalone Server 獨立服務器模式:適用於數據規模不大的場景 SolrCloud 分布式集群模式:適用於數據規模大,高可靠、高可用、高並發的場景 二
Docker系列一:Docker的介紹和安裝
實驗 start ner min docker-ce 周期 com set 自動化測試 Docker介紹 Docker是指容器化技術,用於支持創建和實驗Linux Container。借助Docker,你可以將容器當做重量輕、模塊化的虛擬機來使用,同時,你還將獲得高度的靈活
Docker第八篇-docker-compose教程(介紹,安裝,入門示例)
文章目錄 docker-compose介紹 docker-compose安裝 安裝docker(已安裝最新的請忽略此步驟) docker-compose安裝與解除安裝 docker-compose簡單示例 d
Docker系列(一):Docker介紹
Docker的定義: Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後釋出到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何介面。&
基於Kubernetes的機器學習微服務系統設計系列——(八)部署配置
內容提要 Docker映象製作 K8S RC建立 K8S Service建立 本篇主要介紹Docker映象的製作、RC和Service的建立。 Docker映象製作 下面以segment微服務為例描述Docker映象製作過
Docker系列(二):通過Docker安裝使用 Kubernetes (K8s)
Docker社群版從17.12版本開始已經提供了對Kubernetes的支援。但是由於其安裝過程依賴的映象服務在國內訪問很不穩定,很多朋友都無法配置成功。我們提供了一個簡單的工具幫助大家開啟Docker社群版的Kubernetes功能。 我們需要先安裝好Docker CE的最新版,18.03 - 18.09
Docker系列(三):將.net core api部署到Kubernetes (K8s)中
1.新建一個WebApi專案,並新增Dockerfile檔案: FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base WORKDIR /app EXPOSE 80 FROM microsoft/dotnet:2.1-sdk AS build WOR
Docker教程系列八:Docker備份與遷移(完)
1容器儲存為映象 我們可以通過以下命令將容器儲存為映象 docker commit nginx mynginx nginx是容器名稱 mynginx是新的映象名稱 此映象的內容就是你當前容器的內容,接下來你可以用此映象再次執行新的容器 2映象備份
Docker系列(一):docker簡單介紹
docker簡介: 多語言和框架:支援多語言和框架以及語言框架的擴充套件機制 多服務:開放的核心服務以及服務的擴充套件機制 多雲和多IaaS技術:支援多種IaaS技術和多雲的部署,包括公有云和私有云 Docker----------第三代Paas平臺 Docker究竟是什麼?dotC
Kubernetes和Docker容器的儲存介紹_Kubernetes中文社群
目前,容器的儲存大多支援Docker或Kubernetes的Volume(資料卷),因此我們下文先介紹這兩種Volume的原理。 Docker的容器卷外掛 Docker V1.8正式釋出了容器卷外掛 (Volume Plugin) 的規範,允許第三方廠商的資料卷在Docker引擎中提供資料服務
Docker系列之八:在Dockerfile中使用多段構建Muti-stage build
系列連結 Docker系列之一:Docker介紹及在Ubuntu上安裝 Docker系列之二:Docker 入門 Docker系列之三:使用Docker映象和倉庫 Docker系列之四:Dockerfile的使用 Docker系列之五:Volume 卷的使用——以Redis為例
Docker系列(十一):kubernetes叢集叢集部署實踐
Kubernetes分散式叢集架構 服務註冊和服務發現問題怎麼解決的? 分散式通訊的核心就是ip加埠 每個服務分配一個不變的虛擬IP+埠 系統env環境變數裡有每個服務的服務名稱到IP的對映 如下: client = new redis\Client([ 'scheme'
Docker系列(九):kubernetes架構深度解析
Kubernetes重要概念 Docker解決了打包和隔離的問題,但我們需要更多:排程的問題,生命週期及健康狀況,服務發現,監控,認證,容器聚合。 Kubernetes概述 開源DOcker容器編排系統 輕量級,簡單 公有云,私有云以及混合雲中部署 模組化,可插拔化,可掛接,
Docker系列(十三):Kubernetes Service的負載均衡和網路路由的祕密
Kubernetes Service設計分析 什麼是單體程式?所有的模組都在一個程序中 微服務,每一個服務是一個程序的模式 kubernetes中的service其實只是一個概念,是一組相同lable的pod。 Kubernetes Proxy執行機制分析 每個
Docker學習總結(19)——Google開源的容器叢集管理系統Kubernetes介紹
Kubernetes是Google開源的容器叢集管理系統。它構建Ddocker技術之上,為容器化的應用提供資源排程、部署執行、服務發現、擴容縮容等整一套功能,本質上可看作是基於容器技術的mini-P
Docker系列~程式碼放在Docker裡面還是外面?(八)
首先需要明確的是:Docker到底能夠帶來什麼樣的好處,Docker帶來輕量級虛擬化容器方面的優勢(資源利用率高,建立快捷,環境純粹)?還是映象帶來的優勢(便於部署,記錄容器狀態,持續整合等)?確定了使用的場景,才好說明程式碼到底放到什麼地方更合適。 舉幾個例子,可以根據
Storm系列(十八)事務介紹
功能:將多個tuple組合成為一個批次,並保障每個批次的tuple被且僅被處理一次。 storm事務處理中,把一個批次的tuple的處理分為兩個階段processing和commit階段。 processing階段執行多個批次的tuple並行處理。 commit階
information_schema系列八(鎖,事物)
開啟 mysql 獲取 排它 lin tin 查詢 pre join 這個系列的文章主要是為了能夠讓自己了解MySQL5.7的一些系統表,統一做一下備註和使用,也希望分享出來讓大家能夠有一點點的受益。 第八篇主要看一下一下幾系統表: 今天我們主要看一下MySQL inf