入門Kubernetes -基礎概念
- 2021 年 1 月 10 日
- 筆記
- k8s, Kubernetes
一、Kubernetes概述
Kubernetes ,又稱為 k8s(首字母為 k、首字母與尾字母之間有 8 個字元、尾字母為 s,所以簡稱 k8s)或者簡稱為 “kube” ,是一個可移植的、可擴展的開源平台,用於管理容器化的工作負載和服務,可促進聲明式配置和自動化。 Kubernetes 擁有一個龐大且快速增長的生態系統。Kubernetes 的服務、支援和工具廣泛可用。
k8s作用:
-
服務發現和負載均衡
Kubernetes 可以使用 DNS 名稱或自己的 IP 地址公開容器,如果進入容器的流量很大, Kubernetes 可以負載均衡並分配網路流量,從而使部署穩定。
-
存儲編排
Kubernetes 允許你自動掛載你選擇的存儲系統,例如本地存儲、公共雲提供商等。
-
自動部署和回滾
你可以使用 Kubernetes 描述已部署容器的所需狀態,它可以以受控的速率將實際狀態 更改為期望狀態。例如,你可以自動化 Kubernetes 來為你的部署創建新容器, 刪除現有容器並將它們的所有資源用於新容器。
-
自動完成裝箱計算
Kubernetes 允許你指定每個容器所需 CPU 和記憶體(RAM)。 當容器指定了資源請求時,Kubernetes 可以做出更好的決策來管理容器的資源。
-
自我修復
Kubernetes 重新啟動失敗的容器、替換容器、殺死不響應用戶定義的 運行狀況檢查的容器,並且在準備好服務之前不將其通告給客戶端。
-
密鑰與配置管理
Kubernetes 允許你存儲和管理敏感資訊,例如密碼、OAuth 令牌和 ssh 密鑰。 你可以在不重建容器鏡像的情況下部署和更新密鑰和應用程式配置,也無需在堆棧配置中暴露密鑰
k8s不支援:
- 不限制支援的應用程式類型。 Kubernetes 旨在支援極其多種多樣的工作負載,包括無狀態、有狀態和數據處理工作負載。 如果應用程式可以在容器中運行,那麼它應該可以在 Kubernetes 上很好地運行。
- 不部署源程式碼,也不構建你的應用程式。 持續集成(CI)、交付和部署(CI/CD)工作流取決於組織的文化和偏好以及技術要求。
- 不提供應用程式級別的服務作為內置服務,例如中間件(例如,消息中間件)、 數據處理框架(例如,Spark)、資料庫(例如,mysql)、快取、集群存儲系統 (例如,Ceph)。這樣的組件可以在 Kubernetes 上運行,並且/或者可以由運行在 Kubernetes 上的應用程式通過可移植機制(例如, 開放服務代理)來訪問。
- 不要求日誌記錄、監視或警報解決方案。 它提供了一些集成作為概念證明,並提供了收集和導出指標的機制。
- 不提供或不要求配置語言/系統(例如 jsonnet),它提供了聲明性 API, 該聲明性 API 可以由任意形式的聲明性規範所構成。
- 不提供也不採用任何全面的機器配置、維護、管理或自我修復系統。
- 此外,Kubernetes 不僅僅是一個編排系統,實際上它消除了編排的需要。 編排的技術定義是執行已定義的工作流程:首先執行 A,然後執行 B,再執行 C。 相比之下,Kubernetes 包含一組獨立的、可組合的控制過程, 這些過程連續地將當前狀態驅動到所提供的所需狀態。 如何從 A 到 C 的方式無關緊要,也不需要集中控制,這使得系統更易於使用 且功能更強大、系統更健壯、更為彈性和可擴展。
k8s組件:
一個 Kubernetes 集群包含 集群由一組被稱作節點的機器組成。這些節點上運行 Kubernetes 所管理的容器化應用。集群具有至少一個工作節點。
工作節點託管作為應用負載的組件的 Pod 。控制平面管理集群中的工作節點和 Pod 。 為集群提供故障轉移和高可用性,這些控制平面一般跨多主機運行,集群跨多個節點運行。
下圖展示了包含所有相互關聯組件的 Kubernetes 集群。
二、相關術語
1、主機(Master): 用於控制 Kubernetes 節點的電腦。所有任務分配都來自於此。
kube-apiserver:API 伺服器是 Kubernetes 控制面的組件, 該組件公開了 Kubernetes API。 API 伺服器是 Kubernetes 控制面的前端。
kube-scheduler:控制平面組件,負責監視新創建的、未指定運行節點(node)的 Pods,選擇節點讓 Pod 在上面運行
etcd:etcd 是兼具一致性和高可用性的鍵值資料庫,可以作為保存 Kubernetes 所有集群數據的後台資料庫。
kube-scheduler:負責監視新創建的、未指定運行節點(node)的 Pods,選擇節點讓 Pod 在上面運行。
kube-controller-manager:控制器管理組件,控制器包括
- 節點控制器(Node Controller): 負責在節點出現故障時進行通知和響應。
- 副本控制器(Replication Controller): 負責為系統中的每個副本控制器對象維護正確數量的 Pod。
- 端點控制器(Endpoints Controller): 填充端點(Endpoints)對象(即加入 Service 與 Pod)。
- 服務帳戶和令牌控制器(Service Account & Token Controllers): 為新的命名空間創建默認帳戶和 API 訪問令牌
2、節點(Node):負責執行請求和所分配任務的電腦。由 Kubernetes 主機負責對節點進行控制。
容器集(Pod):被部署在單個節點上的,且包含一個或多個容器的容器組。同一容器集中的所有容器共享同一個 IP 地址、IPC、主機名稱及其它資源。容器集會將網路和存儲從底層容器中抽象出來。
複製控制器(Replication controller):用於控制應在集群某處運行的完全相同的容器集副本數量。
服務(Service):將工作內容與容器集分離。Kubernetes 服務代理會自動將服務請求分發到正確的容器集——無論這個容器集會移到集群中的哪個位置,甚至可以被替換掉。
Kubelet:運行在節點上的服務,可讀取容器清單(container manifest),確保指定的容器啟動並運行。
kubectl: Kubernetes 的命令行配置工具。
三、環境準備
由於Cenos環境問題,本次驗證先採用本地windows docker 中啟用k8s做驗證
1、安裝Docker for Windows
2、啟用k8s,進入docker設置介面
3、重啟:docker 服務 ,左下角:Kubernetes 狀態為running,則表示k8s集群已運行起來
4、啟動Kubernetes dashboard
下載鏡像:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.4/aio/deploy/recommended.yaml
或
kubectl create -f kubernetes-dashboard.yaml --需要下載 //github.com/AliyunContainerService/k8s-for-docker-desktop/tree/v1.18.8
檢查 kubernetes-dashboard 應用狀態
kubectl get pod -n kubernetes-dashboard
開啟 API Server 訪問代理
kubectl proxy
訪問地址://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
獲取token:
$TOKEN=((kubectl -n kube-system describe secret default | Select-String "token:") -split " +")[1] kubectl config set-credentials docker-for-desktop --token="${TOKEN}" echo $TOKEN
輸入token進入管理介面,查看k8s相關資訊
四、過程問題
問題:當啟用k8s後,重啟docker服務後,Kubernetes 狀態一直為:starting
解決辦法://developer.aliyun.com/article/672675
五、其他:
本次只對k8s基礎了解,還需要對它的相關應用進一步,學習了解相關:Pod、Service、現有項目實際部署;才能真正對相關內容有更加深入的認識相關內容
在官網中也可以在線學習相關基礎知識和操作還是比較好
參考:
中文官網://kubernetes.io/zh/docs/concepts/overview/what-is-kubernetes/
k8s在線學習://kubernetes.io/zh/docs/tutorials/kubernetes-basics/
k8s啟用://developer.aliyun.com/article/672675