一、什么是K8S?干什么的?
k8s全稱(kubernetes),是一個全新的基於容器技術的分布式架構解決方案。簡單來說就是一個docker容器管理工具,適合跑微服務架構。
假如在微服務,你有100萬用戶,是不是起碼得100台雲主機?100台雲主機你怎么部署?運行着 ,主機停電死掉了,你怎么知道哪些死掉了?停機上的主機的服務是不是要移動到正常的主機上?100台主機的運維 K8S就誕生了!那么100台主機對於操作的人來說,也就相當於1台主機。
一開始只有docker,因為有docker才有k8s,k8s特點就是所有主機上都裝上docker,然后用k8s把這些連接起來。
二、k8s的核心功能
- 自愈: 重新啟動失敗的容器,在節點不可用時,替換和重新調度節點上的容器,對用戶定義的健康檢查不響應的容器會被中止,並且在容器准備好服務之前不會把其向客戶端廣播。
- 彈性伸縮: 通過監控容器的cpu的負載值,如果這個平均高於80%,增加容器的數量,如果這個平均低於10%,減少容器的數量。
- 服務的自動發現和負載均衡: 不需要修改您的應用程序來使用不熟悉的服務發現機制,Kubernetes 為容器提供了自己的 IP 地址和一組容器的單個 DNS 名稱,並可以在它們之間進行負載均衡。
-
滾動升級和一鍵回滾: Kubernetes 逐漸部署對應用程序或其配置的更改,同時監視應用程序運行狀況,以確保它不會同時終止所有實例。 如果出現問題,Kubernetes會為您恢復更改,利用日益增長的部署解決方案的生態系統。
三、k8s架構
k8s 集群的架構,從左到右,分為兩部分,第一部分是 Master 節點(也就是圖中的 Control Plane),第二部分是 Node 節點。
Master 節點一般包括四個組件,apiserver、scheduler、controller-manager、etcd,他們分別的作用:
- Apiserver:上連其余組件,下接ETCD,提供各類 api 處理、鑒權,和 Node 上的 kubelet 通信等,只有 apiserver 會連接 ETCD;
- Scheduler:調度,打分,分配資源;
- Controller-manager:控制各類 controller,通過控制器模式,致力於將當前狀態轉變為期望的狀態;
- Etcd:整個集群的數據庫,也可以不部署在 Master 節點,單獨搭建。
Node 節點一般也包括三個組件,docker,kube-proxy,kubelet,他們分別作用:
- Docker:具體跑應用的載體;
- Kubelet:agent,負責管理容器的生命周期;
- Kube-proxy:主要負責網絡的打通,早期利用 iptables,現在使用 ipvs技術。
總結一下就是 k8s 集群是一個由兩部分組件 Master 和 Node 節點組成的架構,其中 Master 節點是整個集群的大腦,Node 節點來運行 Master 節點調度的應用。
四、核心概念
1、Pod
Pod 是 K8S 中最重要也是最基本的概念,Pod 是最小的部署單元,是一組容器的集合。每個 Pod 都由一個特殊的根容器 Pause 容器,以及一個或多個緊密相關的用戶業務容器組成。
Pause 容器作為 Pod 的根容器,以它的狀態代表整個容器組的狀態。K8S 為每個 Pod 都分配了唯一的 IP 地址,稱之為 Pod IP。Pod 里的多個業務容器共享 Pause 容器的IP,共享 Pause 容器掛載的 Volume。
2、Label
標簽,附加到某個資源上,用於關聯對象、查詢和篩選。一個 Label 是一個 key=value 的鍵值對,key 與 value 由用戶自己指定。Label 可以附加到各種資源上,一個資源對象可以定義任意數量的 Label,同一個 Label 也可以被添加到任意數量的資源上。
我們可以通過給指定的資源對象捆綁一個或多個不同的 Label 來實現多維度的資源分組管理功能,以便於靈活、方便地進行資源分配、調度、配置、部署等工作。
K8S 通過 Label Selector(標簽選擇器)來查詢和篩選擁有某些 Label 的資源對象。Label Selector 有基於等式( name=label1 )和基於集合( name in (label1, label2) )的兩種方式。
3、ReplicaSet(RC)
ReplicaSet 用來確保預期的 Pod 副本數量,如果有過多的 Pod 副本在運行,系統就會停掉一些 Pod,否則系統就會再自動創建一些 Pod。
我們很少單獨使用 ReplicaSet,它主要被 Deployment 這個更高層的資源對象使用,從而形成一整套 Pod 創建、刪除、更新的編排機制。
4、Deployment
5、Horizontal Pod Autoscaler(HPA)
HPA 為 Pod 橫向自動擴容,也是 K8S 的一種資源對象。HPA 通過追蹤分析 RC 的所有目標 Pod 的負載變化情況,來確定是否需要針對性調整目標 Pod 的副本數量。
6、Service
Service 定義了一個服務的訪問入口,通過 Label Selector 與 Pod 副本集群之間“無縫對接”,定義了一組 Pod 的訪問策略,防止 Pod 失聯。
創建 Service 時,K8S會自動為它分配一個全局唯一的虛擬 IP 地址,即 Cluster IP。服務發現就是通過 Service 的 Name 和 Service 的 ClusterIP 地址做一個 DNS 域名映射來解決的。
7、Namespace
命名空間,Namespace 多用於實現多租戶的資源隔離。Namespace 通過將集群內部的資源對象“分配”到不同的Namespace中,形成邏輯上分組的不同項目、小組或用戶組。
K8S 集群在啟動后,會創建一個名為 default 的 Namespace,如果不特別指明 Namespace,創建的 Pod、RC、Service 都將被創建到 default 下。
當我們給每個租戶創建一個 Namespace 來實現多租戶的資源隔離時,還可以結合 K8S 的資源配額管理,限定不同租戶能占用的資源,例如 CPU 使用量、內存使用量等。
五、k8s主要有哪些應用?
在您生產環境中面向雲應用開發時使用 Kubernetes 的主要優勢在於,它提供了一個便捷有效的平台,讓您可以在物理機和虛擬機集群上調度和運行容器。更廣泛一點說,它可以幫助您在生產環境中,完全實施並依托基於容器的基礎架構運營。由於 Kubernetes 的實質在於實現操作任務自動化,所以您可以將其它應用平台或管理系統分配給您的許多相同任務交給容器來執行。
利用 Kubernetes,您能夠達成以下目標:
- 跨多台主機進行容器編排。
- 更加充分地利用硬件,最大程度獲取運行企業應用所需的資源。
- 有效管控應用部署和更新,並實現自動化操作。
- 掛載和增加存儲,用於運行有狀態的應用。
- 快速、按需擴展容器化應用及其資源。
- 對服務進行聲明式管理,保證所部署的應用始終按照部署的方式運行。
- 利用自動布局、自動重啟、自動復制以及自動擴展功能,對應用實施狀況檢查和自我修復。
但是,Kubernetes 需要依賴其它項目來全面提供這些經過編排的服務。因此,借助其它開源項目可以幫助您將 Kubernetes 的全部功用發揮出來。這些功能包括:
- 注冊表,通過 Atomic 注冊表或 Docker 注冊表等項目實現。
- 聯網,通過 OpenvSwitch 和智能邊緣路由等項目實現。
- 遙測,通過 heapster、kibana、hawkular 和 elastic 等項目實現。
- 安全性,通過 LDAP、SELinux、RBAC 和 OAUTH 等項目以及多租戶層來實現。
- 自動化,參照 Ansible 手冊進行安裝和集群生命周期管理。
- 服務,可通過自帶預建版常用應用模式的豐富內容目錄來提供。