入門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