PS: 以下都是博主的自學筆記 + 個人理解的概括,很抱歉沒有準備圖文形式描述,歡迎大家提問交流。
通過簡要的語言,概括總結Kubernetes的基本概念;更通俗的理解kubernetes的各個基本概念。
比如: 什麼是k8s? 什麼是容器?什麼是pod? deployment又是做什麼的? 等等。
一、 什麼是 Kubernetes?
Kubernetes是一個開源容器編排平臺,可自動執行應用程序的部署,管理和擴展。
簡述: k8s是一個容器編排平臺, kubernetes大大簡化微服務的開發和部署。
比喻: 就像一個精裝修的商品房,拎包入住即可
二、Kubernetes基本概念
2.1 容器: 輕量級的虛擬化技術
(從宿主機操作系統視角來看,容器其實是一個個進程;
從容器內部視角來看,是個完整的操作系統,有自己的網絡,CPU)
2.2 POD(豌豆莢):
kubernetes沒有直接調度容器,而是在外面包了一層-POD, POD是k8s基本的調度單位;
POD 可以跑一個或多個容器,共享POD 文件系統和網絡,每個POD有獨立的IP,容器共享POD的IP和端口空間
POD 裏的容器可以通過 localhost 互相訪問(一般一個POD只跑一個容器)
PS: 爲什麼K8S沒有直接調度DOCKER容器,而是用POD包了一層?
答: 一個原因是考慮了需要輔助容器的場景,如:sidecar這種;另一個原因考慮了可以替換使用不同的容器技術;
2.3 副本集 ReplicaSet
我們一般不會只部署一個POD, 會部署多個POD實例,來實現HA(High Available,高可用);
ReplicaSet就是和一個應用的一組POD相對應的概念,是一種基本的發佈機制,可以實現基本的發佈;
通過模板(yaml,json)來規範摸個應用的容器鏡像,端口、副本數量,點火、健康檢查機制,Volumn掛載,環境變量等等相關信息
運行時,replicaset會監控,維護POD數量;多了就減少,少了就增加;
2.4 服務 Service
Service 是服務間相互路由、尋址的概念;
Service 屏蔽了應用的IP尋址和負載均衡這些細節,消費方可以直接通過服務名訪問目標服務;
Service 底層機制會做尋址和負載均衡,即使應用Pod的IP地址發生了變更,Service 也會屏蔽這種變更,讓消費方無感知;
2.5 Deployment
我們發佈微服務時候,定義的所書寫的定義發佈描述文件(主要是YAML 或者JSON),主要就是 service 和 deployment規範
ReplicaSet實現了基礎的發佈,Deployment在 ReplicaSet基礎上實現高級發佈,是一種更靈活的發佈機制。
簡述: Deployment是用來管理 ReplicaSet,實現藍綠、滾動這些高級發佈機制的。
發佈的應用的時候,Deployment 會創建 replicaSet文件, replicaSet根據規範,創建應用的POD實例,並維護和保證實例的數量
升級的時候,會創建新的relicaSet調度實現滾動發佈,也是先發布回退這些功能
2.6 ConfigMap/Secret
ConfigMap是 Kubenetes的一種資源,開發人員將配置填寫到ConfigMap中;
ConfigMap支持以環境變量的方式寫入到Pod當中,Pod中的應用就可以通過環境變量的方式去訪問到配置
也支持以volume(持久卷)方式 amount Pod當中,Pod中應用就可以以本地配置文件的方式訪問到配置
K8 通過Secrete 概念支持敏感數據的配置;
Secret 是一種特殊的Config,提供更安全的存儲,訪問配置的機制。
2.7 DaemonSet
(如: 監控場景)
通過DaemonSet 可以在每個work節點上部署一個守護進程Pod, 並且保證每個節點上有且僅有一個守護Pod;
2.8 volume
存儲卷,理解爲磁盤文件存儲, POD銷燬,volume也銷燬,不過支持
2.9 label
標籤 是附加到 Kubernetes 對象(比如 Pods)上的鍵值對。
"metadata": {
"labels": {
"release" : "stable",
"environment" : "dev",
"partition" : "customerA"
}
}
2.10 選擇器
通過 標籤選擇器,客戶端/用戶可以識別一組對象。標籤選擇器是 Kubernetes 中的核心分組原語。
通過選擇器找到我們想要對象。 如:`kubectl get pod -l “app:jdsf-demo”
一些 Kubernetes 對象,例如 services 和 replicationcontrollers ,也使用了標籤選擇器去指定了其他資源的集合,例如 pods。
service 和 Replicate 通過標籤選擇器找到指定的資源。 如 service 通過標籤選擇代理器找到代理的pod, 並負載他們。
#service.yaml
spec:
selector:
app: jdsf-default-app # 應用名稱
---
# rs.yaml
spec:
replicas: 1
selector:
matchLabels:
app: jdsf-defult-app # 應用名稱