小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

kubernetes(k8s)以及涉及組件簡單介紹

 Baruch 2018-04-04

什么是kubernetes?

        Kubernetes是一個全新的基于容器技術(shù)的分布式架構(gòu)領(lǐng)先方案。是Google內(nèi)部集群管理系統(tǒng)Borg的一個開源版本。直到2015年4月,隨著論文發(fā)布,才被眾人熟知。Kubernetes是一個開放的開發(fā)平臺。不局限于任何一種語言,沒有限定任何編程接口。是一個完備的分布式系統(tǒng)支撐平臺。它構(gòu)建在docker之上,提供應(yīng)用部署、維護(hù)、擴(kuò)展機(jī)制等功能,利用Kubernetes能方便地管理跨機(jī)器運行容器化的應(yīng)用。Kubernetes在大概兩三周前,正式發(fā)布1.5版本。

主要功能體現(xiàn)在如下:

使用Docker對應(yīng)用程序包裝、實例化
以集群的方式運行、管理跨機(jī)器的容器
解決Docker跨機(jī)器容器之間的通訊問題
Kubernetes的自我修復(fù)機(jī)制使得容器集群總是運行在用戶期望的狀態(tài)

基本概念:

        Kubernetes中的大部分概念Node、Pod、Replication Controller、Service等都可以看作一種“資源對象”,幾乎所有的資源對象都可以通過kubectl工具(API調(diào)用)執(zhí)行增、刪、改、查等操作并將其保存在etcd中持久化存儲。從這個角度來看,kubernetes其實是一個高度自動化的資源控制系統(tǒng),通過跟蹤對比etcd庫里保存的“資源期望狀態(tài)”與當(dāng)前環(huán)境中的“實際資源狀態(tài)”的差異來實現(xiàn)自動控制和自動糾錯的高級功能。

Master:集群控制管理節(jié)點,所有的命令都經(jīng)由master處理。


Node:是kubernetes集群的工作負(fù)載節(jié)點。Master為其分配工作,當(dāng)某個Node宕機(jī)時,Master會將其工作負(fù)載自動轉(zhuǎn)移到其他節(jié)點。


        Node節(jié)點可動態(tài)增加到kubernetes集群中,前提是這個節(jié)點已經(jīng)正確安裝、配置和啟動了上述的關(guān)鍵進(jìn)程,默認(rèn)情況下,kubelet會向Master注冊自己,這也kubernetes推薦的Node管理方式。一旦Node被納入集群管理范圍,kubelet會定時向Master匯報自身的情況,以及之前有哪些Pod在運行等,這樣Master可以獲知每個Node的資源使用情況,并實現(xiàn)高效均衡的資源調(diào)度策略。如果Node沒有按時上報信息,則會被Master判斷為失聯(lián),Node狀態(tài)會被標(biāo)記為Not Ready,隨后Master會觸發(fā)工作負(fù)載轉(zhuǎn)移流程。

Pod:是kubernetes最重要也是最基本的概念。每個Pod都會包含一個 “根容器”,還會包含一個或者多個緊密相連的業(yè)務(wù)容器。
                                
        Kubernetes為每個Pod都分配了唯一的IP地址,稱之為PodIP,一個Pod里的多個容器共享PodIP地址。要求底層網(wǎng)絡(luò)支持集群內(nèi)任意兩個Pod之間的直接通信,通常采用虛擬二層網(wǎng)絡(luò)技術(shù)來實現(xiàn)(Flannel)。

Label:是一個key=value的鍵值對,其中key與value由用戶自己指定??梢愿郊拥礁鞣N資源對象上,一個資源對象可以定義任意數(shù)量的Label??梢酝ㄟ^LabelSelector(標(biāo)簽選擇器)查詢和篩選資源對象。


                  
RC:Replication Controller聲明某個Pod的副本數(shù)在任意時刻都符合某個預(yù)期值。定義包含如下:

   (1)Pod期待的副本數(shù)(replicas)

   (2)用于篩選目標(biāo)Pod的Label Selector

   (3)當(dāng)Pod副本數(shù)小于期望時,用于新的創(chuàng)建Pod的模板template

  (4)通過改變RC里的Pod副本數(shù)量,可以實現(xiàn)Pod的擴(kuò)容或縮容功能

  (5)通過改變RCPod模板中的鏡像版本,可以實現(xiàn)Pod的滾動升級功能


                       

思考:如果Node2上的pod死掉怎么辦?

Service:“微服務(wù)”,kubernetes中的核心。通過分析、識別并建模系統(tǒng)中的所有服務(wù)為微服務(wù),最終系統(tǒng)有多個提供不同業(yè)務(wù)能力而又彼此獨立的微服務(wù)單元所組成,服務(wù)之間通過TCP/IP進(jìn)行通信。每個Pod都會被分配一個單獨的IP地址,而且每個Pod都提供了一個獨立的Endpoint以被客戶端訪問。
思考:客戶端如何訪問?
        部署負(fù)載均衡器,為Pod開啟對外服務(wù)端口,將Pod的Endpoint列表加入轉(zhuǎn)發(fā)列表中,客戶端通過負(fù)載均衡器的對外IP+Port來訪問此服務(wù)。每個Service都有一個全局唯一的虛擬ClusterIP,這樣每個服務(wù)就變成了具備唯一IP地址的“通信節(jié)點”,服務(wù)調(diào)用就變成了最基礎(chǔ)的TCP網(wǎng)絡(luò)通信問題。

Volume:是Pod中能夠被多個容器訪問的共享目錄。定義在Pod之上,被一個Pod里的多個容器掛載到具體的文件目錄之下;與Pod生命周期相同。
可以讓一個Pod里的多個容器共享文件、讓容器的數(shù)據(jù)寫到宿主機(jī)的磁盤上或者寫文件到 網(wǎng)絡(luò)存儲中,具體如下圖所示:
                                                     
        在kubernetes1.2的時候,RC就由Replication Controller升級成Replica Set,“下一代RC”。命令兼容適用,Replica Set主要被Deployment這個更高層的資源對象所使用,從而形成一套Pod創(chuàng)建、刪除、更新的編排機(jī)制。當(dāng)我們使用Deployment時,無需關(guān)心它是如何創(chuàng)建和維護(hù)ReplicaSet的,這一切是自動發(fā)生的。

docker

        既然k8s是基于容器的,那么就不得不提到docker。2013年初,docker橫空出世,孕育著新思想的“容器”,Docker選擇容器作為核心和基礎(chǔ),以容器為資源分割和調(diào)度的基本單位,封裝整個軟件運行時環(huán)境,為開發(fā)者和系統(tǒng)管理員設(shè)計,用于構(gòu)建、發(fā)布和運行分布式應(yīng)用的平臺。是一個跨平臺、可移植并且簡單易用的容器解決方案。通過操作系統(tǒng)內(nèi)核技術(shù)(namespaces、cgroups等)為容器提供資源隔離與安全保障。
                              
        上圖是一個image的簡單使用。我們可以通過一個dockerfile來build自己的image??梢园裪mage上傳(push)到自己的私有鏡像倉庫,也可以從私有倉庫pull到本地進(jìn)行使用。可以單獨使用命令行,直接run container,可以對container進(jìn)行stop、start、restart操作。也可以對image進(jìn)行save保存操作以及加載load操作,大家具體可以根據(jù)自己的使用,選擇不同的操作即可。

docker資源隔離技術(shù)

        2013年初,docker橫空出世,孕育著新思想的“容器”,Docker選擇容器作為核心和基礎(chǔ),以容器為資源分割和調(diào)度的基本單位,封裝整個軟件運行時環(huán)境,為開發(fā)者和系統(tǒng)管理員設(shè)計,用于構(gòu)建、發(fā)布和運行分布式應(yīng)用的平臺。是一個跨平臺、可移植并且簡單易用的容器解決方案。通過操作系統(tǒng)內(nèi)核技術(shù)(namespaces、cgroups等)為容器提供資源隔離與安全保障。(關(guān)于這兩種資源隔離技術(shù),本人只能從功能上說明兩者相當(dāng)于就是分組,隔離,但是具體的內(nèi)部原理還不甚了解,所以此處只提下概念,如皋想要深入了解,可搜集其他資料)

docker監(jiān)控

        cAdvisor(Container Advisor)是Google開發(fā)的用于分析運行中容器的資源占用和性能指標(biāo)的開源工具。cAdvisor是一個運行時的守護(hù)進(jìn)程,負(fù)責(zé)收集、聚合、處理和輸出運行中容器的信息。對于每個容器,cAdvisor都有資源隔離參數(shù)、資源使用歷史情況以及完整的歷史資源使用和網(wǎng)絡(luò)統(tǒng)計信息的柱狀圖。
        cAdvisor不但可以為用戶提供監(jiān)控服務(wù),還可以結(jié)合其他應(yīng)用為用戶提供良好的服務(wù)移植和定制。包括結(jié)合InfluxDB對數(shù)據(jù)進(jìn)行存儲,以及結(jié)合Grafana提供web控制臺,自定義查詢指標(biāo),并進(jìn)行展示。
                   

etcd

     etcd是一個鍵值存儲倉庫,用于配置共享和服務(wù)發(fā)現(xiàn)。etcd受Zookeeper與doozer啟發(fā)而催生的項目。

etcd架構(gòu)

                                     

etcd存儲

        etcd的存儲分為內(nèi)部存儲和持久化(硬盤)存儲兩部分。內(nèi)存中的存儲除了順序化地記錄所有用戶對節(jié)點數(shù)據(jù)變更的記錄外,還會對用戶數(shù)據(jù)進(jìn)行索引、建堆等方便查詢的操作。而持久化則使用WAL進(jìn)行記錄存儲。在k8s中,所有數(shù)據(jù)的存儲以及操作記錄都在etcd中進(jìn)行存儲,所以對于k8s集群來說,etcd是相當(dāng)重要的,一旦故障,可能導(dǎo)致整個集群的癱瘓或者數(shù)據(jù)丟失。
   在WAL體系中,所有的數(shù)據(jù)在提交之前都會進(jìn)行日志記錄。持久化存儲的目錄分為兩個:snap和wal。snapshot相當(dāng)于數(shù)據(jù)壓縮,默認(rèn)會將10000條wal操作記錄merge成snapshot,節(jié)省存儲,又保證數(shù)據(jù)不會丟失。
   WAL:存儲所有事務(wù)的變化記錄
   Snapshot:用于存放某一時刻etcd所有目錄的數(shù)據(jù)
思考:數(shù)據(jù)損壞或者機(jī)器故障怎么辦???

etcd核心算法

etcd的核心算法是raft算法,強(qiáng)一致性算法。具體如下圖所示
                 
                      
注意:由于etcd是負(fù)責(zé)存儲,所以不建議搭建單點集群,如zookeeper一樣,由于存在選舉策略,所以一般推薦奇數(shù)個集群,如3,5,7。只要集群半數(shù)以上的結(jié)點存活,那么集群就可以正常運行,否則集群可能無法正常使用。

k8s集群部署方案

如下是我的集群部署策略,1個master + 2個node(minion1.2之前的叫法)。我的存儲集群etcd是單點集群,不推薦此做法,你懂得,哈哈。網(wǎng)絡(luò)使用的是flannel虛擬二次網(wǎng)絡(luò)。
                        

如何驗證?

搭建完成之后,命令行執(zhí)行:kubectl  get  no    查看節(jié)點狀態(tài)是否ready。
其他的大家可以通過代碼來進(jìn)行驗證,看是否可以成功訪問各個服務(wù)以及成功運行。


ok,以上是我的初步總結(jié),歡迎留言指導(dǎo)。順便吐槽下,個人覺得csdn真的太難用了,么有預(yù)覽,還有格式排版好難用,看看我的上一篇格式都成啥了,唉,吐槽?。?!

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多