白話 Kubernetes 基礎概念

Kubernetes 簡介

微服務框架的流行,使得服務愈來愈精細化,服務也變的愈來愈多,對於發佈和管理而言產生了巨大的挑戰,而 Docker 的誕生,給與微服務的資源治理和控制提供了很好的基礎。容器化能夠解決各個不一樣語言環境部署、移植性高、跨平臺部署等。可是 Docker 對於容器服務的編排沒有那麼方便,由於 Docker 這方面不足,而誕生 KubernetesKubernetes 是一個可移植的、可擴展的開源平臺,用於管理容器化的工做負載和服務,可促進聲明式配置和自動化。docker

使用 Kubernetes 帶來那些方便

  • 快速部署應用
  • 很容易實現 水平伸縮 或 垂直伸縮
  • 無縫發佈新的應用版本
  • 資源使用最大化
  • 應用中止自動重啓

Kubernetes 特色

  • 可移植:支持公有云、私有云、混合雲、多重雲(multi-cloud)
  • 可擴展:模塊化、插件化、可掛載、可組合
  • 自動化:自動部署、自動重啓、自動複製、自動伸縮/擴展

爲何須要 Kubernetes,它能作什麼?

容器是打包和運行應用程序的好方式。在生產環境中,您須要管理運行應用程序的容器,並確保不會停機。例如,若是一個容器發生故障,則須要啓動另外一個容器。若是系統處理此行爲,會不會更容易?json

這就是 Kubernetes 的救援方法!Kubernetes 爲您提供了一個可彈性運行分佈式系統的框架。Kubernetes 會知足您的擴展要求、故障轉移、部署模式等。網絡

Kubernetes 爲您提供:負載均衡

  • 服務發現和負載均衡:Kubernetes 可使用 DNS 名稱或本身的 IP 地址公開容器,若是到容器的流量很大,Kubernetes 能夠負載均衡並分配網絡流量,從而使部署穩定。
  • 存儲編排:Kubernetes 容許您自動掛載您選擇的存儲系統,例如本地存儲、公共雲提供商等。
  • 自動部署和回滾:您可使用 Kubernetes 描述已部署容器的所需狀態,它能夠以受控的速率將實際狀態更改成所需狀態。例如,您能夠自動化 Kubernetes 來爲您的部署建立新容器,刪除現有容器並將它們的全部資源用於新容器。
  • 容器資源配額:Kubernetes 容許您指定每一個容器所需 CPU 和內存(RAM)。當容器指定了資源請求時,Kubernetes 能夠作出更好的決策來管理容器的資源。
  • 自我修復:Kubernetes 從新啓動失敗的容器、替換容器、殺死不響應用戶定義的運行情況檢查的容器,而且在準備好服務以前不將其通告給客戶端。
  • 密鑰與配置管理:Kubernetes 容許您存儲和管理敏感信息,例如密碼、OAuth 令牌和 ssh 密鑰。您能夠在不重建容器鏡像的狀況下部署和更新密鑰和應用程序配置,也無需在堆棧配置中暴露密鑰。
  • 配置文件:Kubernetes 能夠經過 ConfigMap 來存儲配置。

Kubernetes 基礎資源定義和理解

一切皆爲資源,一切便可描述,一切皆可管理。框架

NameSpaces

命名空間,在一個 Kubernetes 集羣中可使用namespace建立多個「虛擬集羣」,這些namespace之間能夠徹底隔離,也能夠經過某種方式,讓一個namespace中的service能夠訪問到其餘的namespace中的服務。ssh

Deployment

Deployment 爲 Pod 和 ReplicaSet 提供了一個聲明式定義(declarative)方法,用來替代之前的 ReplicationController 來方便的管理應用。典型的應用場景包括:分佈式

  • 定義Deployment來建立Pod和ReplicaSet
  • 滾動升級和回滾應用
  • 擴容和縮容
  • 暫停和繼續Deployment

Service

Kubernetes Service 定義了這樣一種抽象:一個 Pod 的邏輯分組,一種能夠訪問它們的策略 —— 一般稱爲微服務。 這一組 Pod 可以被 Service 訪問到,一般是經過 Label Selector實現的。模塊化

Ingress

Ingress 是從 Kubernetes集羣外部訪問集羣內部服務的入口。好比官方維護的 Ingress Nginxingress traefikingress haproxy等。微服務

Pod

Pod 是 kubernetes 中你能夠建立和部署的最小也是最簡的單位。Pod表明着集羣中運行的進程。編碼

Pod中封裝着應用的容器(有的狀況下是好幾個容器),存儲、獨立的網絡IP,管理容器如何運行的策略選項。Pod表明着部署的一個單位:kubernetes中應用的一個實例,可能由一個或者多個容器組合在一塊兒共享資源。

ConfigMap

ConfigMap API 資源用來保存 key-value pair配置數據,這個數據能夠在pods裏使用,或者被用來爲像controller同樣的系統組件存儲配置數據。雖然 ConfigMap 跟 Secrets 相似,可是ConfigMap更方便的處理不含敏感信息的字符串。 注意:ConfigMaps不是屬性配置文件的替代品。ConfigMaps只是做爲多個properties文件的引用。你能夠把它理解爲Linux系統中的/etc目錄,專門用來存儲配置文件的目錄。

Secret

Secret 解決了密碼、token、密鑰等敏感數據的配置問題,而不須要把這些敏感數據暴露到鏡像或者Pod Spec中。Secret 能夠以Volume或者環境變量的方式使用。

Secret有三種類型:

  • Service Account :用來訪問Kubernetes API,由Kubernetes自動建立,而且會自動掛載到Pod的/run/secrets/kubernetes.io/serviceaccount目錄中;
  • Opaque :base64編碼格式的Secret,用來存儲密碼、密鑰等;
  • kubernetes.io/dockerconfigjson :用來存儲私有docker registry的認證信息。

PV 和 PVC

用於數據持續存儲,Pod中,容器銷燬,全部數據都會被銷燬,若是須要保留數據,這裏就須要用到 PV存儲卷,PVC存儲卷申明。

PVC 經常使用於 Deployment 作數據持久存儲。實現持久化存儲還須要理解 Volume 概念。

Volume

容器磁盤上的文件的生命週期是短暫的,這就使得在容器中運行重要應用時會出現一些問題。首先,當容器崩潰時,kubelet 會重啓它,可是容器中的文件將丟失——容器以乾淨的狀態(鏡像最初的狀態)從新啓動。其次,在 Pod 中同時運行多個容器時,這些容器之間一般須要共享文件。Kubernetes 中的 Volume 抽象就很好的解決了這些問題。

Labels 和 Selectors

標籤選擇器。做用用於給每一個容器打標籤,而後各個控制器經過 Selector 匹配容器,並管理。好比 Deployment 或 Service 都是經過這種方式匹配相應的 Pod。

自述

以上只是介紹 Kubernetes 幾種經常使用的資源概念和做用,具體介紹能夠查閱Kubernetes 官方文檔

參考連接

本文由 YP小站 發佈!
相關文章
相關標籤/搜索