您好,登錄后才能下訂單哦!
本篇內容介紹了“kubernetes的基礎概念及特點”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
kubernetes(簡稱k8s)是一種用于在一組主機上運行和協同容器化應用程序的管理平臺,皆在提供高可用、高擴展性和可預測性的方式來管理容器應用的生命周期。通過k8s,用戶可以定義程序運行方式、部署升級策略、動態伸縮容,使得用戶以一種更靈活可靠的方式來管理應用程序。
關于k8s,是一種對應用服務的打包、部署、監控等一整套生命周期的自動化管理平臺,目前各大公司已在生產環境部署使用,同時k8s社區比較活躍,在未來一段時間內會越來越流行,可以說是以后服務部署的事實標準,對于Java開發者來說,你可以不直接使用它,但是不能不了解它。
總結來看,k8s特點如下:
自動裝箱:基于容器,結合調度策略將多種應用部署到同一節點上,提高資源利用率;
自我修復:支持故障轉移/重啟,具有健康檢查機制;
水平擴展:通過命令手動執行擴容,可基于CPU等資源負載率來動態實現伸縮容;
服務發現/負載均衡:通過KubeDNS(或CoreDNS)為系統內置了服務發現功能,為每個service配置DNS名稱,service通過iptables或ipvs內建了負載均衡機制;
自動部署:自動發布和回滾,支持灰度、增量發布等;
配置管理:ConfigMap實現了配置數據與Docker鏡像解耦,為開發部署提供了良好的靈活性;
批處理:除了管理服務型應用之外,Kubernetes還支持批處理作業及CI(持續集成)。
從k8s的角度看,它把各個待管理的資源進行了抽象,比如針對服務器(物理機或者虛擬機)抽象出Node;對于容器不直接管理而是抽象出Pod來管理容器;對于集群內的服務調用,抽象出service來表示同類型的多個Pod,同時提供負載均衡策略等。
對于初學者來說,k8s的一些抽象資源和基本概念可能會造成一頭霧水,本文就k8s的基礎概念和組件進行簡單分析,讓初學者更快了解k8s概念,話不多說,let‘s go~
k8s使用共享網絡將多個物理機(或者虛擬機)匯集到一個集群中,該集群是配置k8s所有組件、功能和工作負載的物理平臺。集群中一臺服務器會作為master負責管理整個集群(為了master高可用一般會將master部署成多節點)。
Master是集群的網關和中樞,負責諸如為用戶和客戶端暴露API、跟蹤其他服務器的健康狀態、以最優方式調度工作負載,以及編排其他組件之間的通信等任務,它是用戶/客戶端與集群之間的核心聯絡點,并負責Kubernetes系統的大多數集中式管控邏輯。單個Master節點即可完成其所有的功能,但出于冗余及負載均衡等目的,生產環境中通常需要協同部署多個此類主機。Node是Kubernetes集群的工作節點,負責接收來自Master的工作指令并根據指令相應地創建或銷毀Pod對象,以及調整網絡規則以合理地路由和轉發流量等。理論上講,Node可以是任何形式的計算設備,不過Master會統一將其抽象為Node對象進行管理。
Pod:k8s管理的最小調度單元,k8s不直接來管理容器,使用一個抽象的資源對象來封裝一個或者多個容器,這個抽象即為Pod。同一Pod中的容器共享網絡名稱空間和存儲資源,這些容器可經由本地回環接口lo直接通信,同時對于Mount、User及PID等資源也進行了隔離;
標簽資源和標簽選擇器:標簽(Label)是將資源進行分類的標識符,k8s的Pod資源選擇大都是基于標簽來的,一個對象可以擁有多個標簽,一個標簽也可以附加于多個對象(通常是同一類對象)之上。標簽選擇器(Selector)全稱為“Label Selector”,它是一種根據Label來過濾符合條件的資源對象的機制;
Controller:Pod控制器,盡管Pod是k8s的最小調度單元,但用戶通常并不會直接部署及管理Pod對象,而是要借助于另一類抽象——控制器(Controller)對其進行管理,k8s的控制器包括ReplicationController、ReplicaSet、Deployment、StatefulSet、Job等,每種controller都有對應的功能(比如Deployment是最常見的無狀態應用的控制器,它支持應用的擴縮容、滾動更新等操作,為容器化應用賦予了極具彈性的功能);
Service:Service是建立在一組Pod對象之上的資源抽象,它通過標簽選擇器選定一組Pod對象,并為這組Pod對象定義一個統一的固定訪問入口(通常是一個IP地址);
存儲卷:一般是獨立于容器文件系統之外的存儲空間,常用于擴展容器的存儲空間并為它提供持久存儲能力,大體上可分為臨時卷、本地卷和網絡卷;
Name和Namespace:名稱是網絡資源的唯一標識符,通常在一個命名空間內,名稱標識是唯一的,名稱空間通常用于實現租戶或項目的資源隔離,從而形成邏輯分組;
Ingress:k8s中將Pod進行了網絡隔離,如果需要開放一些Pod供外部使用,則需要一個配置一個流量進入k8s集群內的通道,除了Service外,Ingress也是實現策略之一。
一個典型的k8s集群由master節點、多個工作節點和ETCD組成,其中ETCD作為集群狀態存儲。master節點負責整個集群的管理工作,為集群提供管理API,并負責編排和監控各工作節點,各工作節點已Pod形式管理運行容器。master主要由apiserver、controller-manager和scheduler三個組件組成,同時負責與ETCD教育存儲集群狀態數據,而每個工作節點主要包含kubelet、kube-proxy及容器引擎(最常見的是Docker)等組件。各個組件整體如下圖:
master包含組件如下:
API server:對外提供restful api,k8s集群的網關;
Controller:Pod控制器,k8s通過控制器來管理Pod資源,控制器包括ReplicationController、ReplicaSet、Deployment、StatefulSet、Job等,每種controller都有對應的功能(比如Deployment是最常見的無狀態應用的控制器,它支持應用的擴縮容、滾動更新等操作,為容器化應用賦予了極具彈性的功能);
Scheduler:K8s調度器,K8s管理成千上萬容器資源,api server接收到請求之后就由Scheduler按照對應調度策略進行在不同Node間的請求調度操作;
ETCD:k8s集群狀態都是存儲在etcd中(通過API Server共享給集群的各組件及客戶端),通過etcd的watch機制來進行k8s各組件的協同操作,一般etcd通過集群部署方式保證高可用。
node節點接受master的管理,負責管理各個Pod資源:
kubelet:kubelet是node的守護進程,node接受master的管控,Kubelet會向api server注冊當前node,定期向master會報node資源占用情況;
容器運行環境:node會提供一個容器運行環境,負責下載并運行容器,k8s目前支持的容器運行環境包括Docker、RKT、cri-o和Fraki等;
kube-proxy:每個node都需要一個kube-proxy進程,比如對service按需生成iptables或ipvs規則,控制流量訪問。
k8s除了etcd、master、node這幾個組件之外,還有一些核心組件,如下:
DNS服務:目前k8s使用的是coreDNS,之前使用的是KubeDNS;
Kubernetes Dashboard:k8s的管理web UI;
Heapster:容器和節點的性能監控與分析系統,它收集并解析多種指標數據,如資源利用率、生命周期事件等。新版本的Kubernetes中,其功能會逐漸由Prometheus結合其他組件所取代。
Ingress Controller:Service是一種工作于傳統層的負載均衡器,而Ingress是在應用層實現的HTTP(s)負載均衡機制。不過,Ingress資源自身并不能進行“流量穿透”,它僅是一組路由規則的集合,這些規則需要通過Ingress控制器(Ingress Controller)發揮作用。目前,此類的可用項目有Nginx、Traefik、Envoy及HAProxy等。
“kubernetes的基礎概念及特點”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。