Kubernetes 概念

      網友投稿 927 2025-03-31

      什么是Kubernetes

      因為第一個字母k和最后一個字母s之間有8個英文字母,所以也稱為k8s,

      k8s的主要作用是對docker容器的編排管理,如果我們的docker容器只有幾個的情況下,開發或者運維人員完全可以輕松管理這些容器,但是像一些大公司里面,它們的服務有幾百上千個,如果單靠運維人員去管理的話,付出的人力成本是極其昂貴的,所以這時候就需要一個可以對大量容器的管理系統,k8s的出現解決了這個問題,k8s也稱為容器編排系統;可以管理大規模的容器,

      總的來說,k8s就是提供了一個分布式系統管理的框架,相信如果學過springcloud或者dubbo的童鞋能更容易理解這個概念!本質就是一組服務器集群;

      kubernetes 概念

      集群控制節點,每個集群至少需要一個master節點負責集群的管控,主要負責安排工作

      工作負載節點,由master分配容器到這些工作節點上,然后node節點上的docker負責容器的運行;主要負責干活

      pob是k8s的最小操作單元,容器必須拋在pod中;一個Pod可以承載一個或者多個相關的容器(

      建議一個pod只承載一個容器

      Kubernetes 概念

      ),在后邊的案例中,同一個Pod中的容器會部署在同一個物理機器上并且能夠共享資源。一個Pod也可以包含O個或者多個磁盤卷組(volumes),這些卷組將會以目錄的形式提供給一個容器,或者被所有Pod中的容器共享,對于用戶創建的每個Pod,系統會自動選擇那個健康并且有足夠容量的機器,然后創建類似容器的容器

      程序在容器里面,容器在pod里面,pod在docker里面

      控制器,通過它來實現對pod的管理,比如 啟動pod、停止pod、伸縮pod的數量等等,控制器有多種,每種控制器都有 他自己的使用場景,常用的控制器有deployment、

      pod對外服務的統一入口,也就是說, 當你的web服務器部署到容器中后,它的ip只是集群內可訪問的,并且它的IP是隨機生成,外部并不知道它的ip是多少,service就可以打通外部和內部的通訊,它充當了網關的功能,可實現負載均衡,只要service的ip不變,外部就可以訪問到內部的集群節點中的web應用,

      標簽,在資源上 添加一個標識,用于對pod、Node、Service進行分類,同一類pod、Node、Service會有相同的標簽;

      命名空間,用來隔離pod的運行環境,相當于給容器分組,一個組內的所有容器可以互相訪問,組外和組內是隔離的,不可訪問;常見的pods, services, replication controllers和deployments等都是屬于某一個namespace的(不指定-n的情況下默認是default)。Namespace常用來隔離不同的用戶

      Controller的其中一種,在k8s中,Pod是最小控制單元,但是k8s很少直接控制Pod,一般都?通過pod控制器來完成的,Pod控制器顧名思義就是用來控制Pod的,確保Pod資源符合預期狀態,當Pod資源發生故障時,會自動嘗試進行重啟或者重建pod(先刪除在新建Pod);

      什么是編排

      編排指的就是可以自動化處理成百上千個容器的技術,可以管理這些容器的部署、管理、彈性伸縮、容器網絡管理,而最重要的就是2個字:“編”和“排”

      將眾多容器進行分組,比如有100個容器,將110的容器編成一個組,代表它們是同一個應用的容器,將2130又遍成另一個組,進行分組管理,可以保證容器之間更容易區分,就像分類一樣

      將容器分組后,在將這個組排列起來,可以根據應用的大小或流量情況進行擴充或減少容器數量;Kubernetes編排允許跨多個容器構建應用程序服務、跨集群調度容器、擴展這些容器以及管理它們的運行狀況。

      市面上的容器編排工具

      Swarm : docker自己的容器編排工具

      Mesos:Apache的一個開源同意管控工具,需要和Marathon結合使用

      Kubernetes : Google開源的容器編排工具

      k8s特點

      服務發現和負載均衡: 這不就是分布式系統的解決方案嗎?了解springcloud的都知道;

      自動部署和回滾:不需要運維人員天天加班來部署上線應用,設定好規則即可自動部署,且支持容器的回滾功能;可動態回滾到某一個版本

      自動完成裝箱計算 : 運行用戶指定每個容器所需的cpu數量和內存大小,當應用運行時資源不足時可以做出策略來保證容器運行

      自我修復:當某個容器因為一些原因無法運行時,k8s會將這個容器放到別的機器上運行,從而保證了容器內的應用持續運行;不宕機

      監控:k8s會對編排的容器進行實時監控,如果某個容器發生故障時可根據規則做其他處理;

      秘鑰與配置管理:類似于springcloud的配置中心

      k8s能解決哪些問題

      自我修復:一個容器故障停機了,可讓另外一個容器立刻啟動去替補停機的容器;

      彈性伸縮:當并發訪問量變大的時候,可以做到橫向擴展容器數量,當并發量小的時候,可以做到縮減容器數量以減少資源占用;

      服務發現:服務可以通過自動發現的形式找到它所以來的服務;就跟springcloudeureka注冊中心一樣的功能

      負載均衡:如果一個服務啟動了多個容器,能夠自動實現親求的負載均衡,且能自定義負載均衡算法;

      版本回退: 若發現新版本有問題,可以回退到原來的版本

      存儲編排:類似docker的-v掛載功能,但是k8s支持使用內部存儲和外部存儲,或者云存儲都可以;

      組件

      主節點的組件

      一個k8s由控制節點(master)和工作節點(work)組成,每個節點上都會安裝不同的組件來相互配合完成工作;

      kubectl: 是一個客戶端的管理工具,直接管理API server,提供一個請求到一個api server,中間有一個auth認證(判斷是否有權限訪問)

      控制節點

      負責集群的決策和管理工作,就像一個領導,關于控制節點包含以下幾個組件

      APIServer : 資源操作的唯一入口,所有對集群的操作都是從這個入口進來的,比如服務注冊和發現、接受用戶輸入的命令、認證、授權等等

      Scheduler :負責集群資源的調度,按照預定的調度策略將pod調度到相應的node節點上(只負責計算)

      ControllerManager :負責維護集群的狀態,比如程序部署安排、請求調度、故障檢測、自動擴展、滾動更新等等(Scheduler負責計算,ControllerManager 負責干活,比如客戶端kubectl發起了一起創建容器的請求,Scheduler算好了請求到A節點,那么ControllerManager就會將請求打到A節點上,在A節點進行創建容器)

      Etcd:一個類似redis的數據庫,存儲集群中各種資源對象的信息,比如你請求調用了哪個節點,這些記錄信息會存儲到Etcd里面,Etcd是k8s的默認的存儲數據庫,當然你也可以使用外部存儲,比如mysql、oracle等等

      工作節點的組件

      kubelet:負責維護容器的生命周期,在集群中就是由kubelet發命令給docker來進行創建、更新、銷毀容器;同時也負責監控容器的狀態;

      kubeProxy:負責集群內的服務發現和負責均衡;負責網路代理(處理用戶怎么訪問container?),維護網絡規則和四層的負載均衡,怎樣才能讓下面的Pod(一個或者多個容器)能對外提供服務

      docker :容器的操作

      組件之間的調用關系

      下面以部署一個nginx服務來說明kubernetes系統各個組件調用關系,

      ,首先要明確,一旦kubernetes環境啟動后,master和node都會講自身的信息存儲到etcd數據庫中

      一個nginx服務的安裝請求會首先被發現到master節點的apiServer組件

      apiServer組件會調用scheduler組件來決定到底應該把這個服務安裝到哪個node節點上。 在此時,它會從etcd中讀取各個node節點的信息,然后按照一定的算法進行選擇,并將結果告知apiServer

      apiServer調用controller-manager去調度Node節點安裝nginx服務

      kubelet接受到指令后,會通知docker,然后由docker來啟動一個nginx的pod, pod是kubernetes的最小操作單元,容器必須跑在pod中

      一個nginx服務就運行了,如果需要訪問nginx,就需要通過kube-proxy來對pod產生訪問的代理,這樣,外界用戶就可以訪問集群中的nginx服務了

      k8s集群類型

      一主多從:一臺master節點和多臺node節點,搭建簡單,但是有單機故障風險,適合測試環境

      多主多從:多臺master和多臺node節點,搭建麻煩,安全性高,適合生產環境;

      kubectl 是什么

      kubectl是k8s集群的命令行工具,通過kubect能夠實現對集群本身進行管理維護。在使用k8s功能時會在命令行加上kubectl關鍵字,比如

      # 獲取所有節點 kubectl get nodes

      1

      2

      namespace

      namespace 是命名空間,也叫名稱空間,主要用來資源隔離,默認只隔離資源,不隔離網絡,默認的名稱空間有以下幾個

      default:默認命名空間

      kube-node-lease:對于提升 Kubernetes 集群規模來說,NodeLease 是一個非常重要的 Feature 。在沒有開啟 NodeLease 之前,Kubelet 會使用 Update Node Status 的方式更新節點心跳,而一次這樣的心跳會向 API Server 發送大約10 KB數據量。

      kube-public:可被所有用戶訪問的命名空間,包括未認證的用戶;

      kube-system:由 Kubernetes 系統創建的對象的命名空間

      Docker Kubernetes

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:如何在Excel中垂直翻轉/反轉一列數據順序?
      下一篇:國產項目管理系統
      相關文章
      亚洲成年人电影在线观看| 亚洲精品美女在线观看| 亚洲成人黄色网址| 亚洲人成网址在线观看| 亚洲成AV人片一区二区| 亚洲AV无码国产在丝袜线观看| 日韩va亚洲va欧洲va国产| 久久亚洲精品视频| 亚洲国产第一页www| 久久精品国产亚洲av高清漫画 | 亚洲邪恶天堂影院在线观看| 亚洲国产成人久久精品影视| 婷婷久久久亚洲欧洲日产国码AV | 亚洲色大成WWW亚洲女子| 亚洲人成网亚洲欧洲无码| 亚洲AV综合永久无码精品天堂| 亚洲精品第一国产综合亚AV| 亚洲精品久久无码| 国产亚洲精品成人久久网站| 亚洲精品无码日韩国产不卡?V| 久久亚洲精品无码播放| 亚洲日本va中文字幕久久| 亚洲va久久久噜噜噜久久狠狠 | 国产V亚洲V天堂A无码| 香蕉蕉亚亚洲aav综合| 亚洲视频免费播放| 亚洲制服丝袜精品久久| 亚洲 日韩经典 中文字幕 | 亚洲成人在线网站| 亚洲国产成人久久三区| 亚洲一线产品二线产品| 国产精品亚洲专一区二区三区| 亚洲一级黄色视频| 亚洲AV无码一区二区三区DV| 91在线亚洲精品专区| 中文字幕亚洲情99在线| 亚洲第一第二第三第四第五第六| 国产精品亚洲а∨天堂2021| 亚洲午夜久久久影院| 亚洲天天做日日做天天看| 精品丝袜国产自在线拍亚洲|