kubernetes(k8s)基本概念

上一篇介紹了用kubeadm安裝k8s集群,能把k8s安裝起來是開始學習和實踐的第一步。

集群安裝好了,今天我們來簡單介紹下k8s的基礎實踐,并在實踐中介紹基本概念。

Kubernetes 對象包含哪些?

在 Kubernetes 系統(tǒng)中,Kubernetes 對象是持久化的實體。Kubernetes 使用這些實體去表示整個集群的狀態(tài)。也許你覺得這句話很抽象,說人話,對象用來描述以下的一些信息:

  • 哪些容器化應用在運行(以及在哪個 Node 上)
  • 可以被應用使用的資源
  • 關于應用運行時表現(xiàn)的策略,比如重啟策略、升級策略,以及容錯策略

操作 Kubernetes 對象 —— 無論是創(chuàng)建、修改,或者刪除 —— 需要使用 Kubernetes API。比如,當使用 kubectl 命令行接口時,CLI 會執(zhí)行必要的 Kubernetes API 調(diào)用,也可以在程序中直接調(diào)用 Kubernetes API。
例如用kubectl查看集群所有的節(jié)點(節(jié)點就是一個k8s對象),執(zhí)行以下命令:

kubectl get node

Kubernetes對象包含:

  • Node
    Node 是 Kubernetes 的工作節(jié)點,以前叫做 minion。取決于你的集群,Node 可以是一個虛擬機或者物理機器。每個 node 都有用于運行 pods 的必要服務,并由 master 組件管理。Node 上的服務包括 Docker、kubelet 和 kube-proxy

  • Pod
    Pod 是 Kubernetes 的基本構建塊,它是 Kubernetes 對象模型中創(chuàng)建或部署的最小和最簡單的單元。 Pod 表示集群上正在運行的進程。

  • Replication Controller
    ReplicationController 確保在任何時候都有特定數(shù)量的 pod 副本處于運行狀態(tài)。 換句話說,ReplicationController 確保一個 pod 或一組同類的 pod 總是可用的。現(xiàn)在推薦使用配置 ReplicaSet 的 Deployment 來建立副本管理機制。

  • ReplicaSet
    ReplicaSet 是下一代的 Replication Controller。 ReplicaSet 和 Replication Controller 的唯一區(qū)別是選擇器的支持。ReplicaSet 支持新的基于集合的選擇器需求,這在標簽用戶指南中有描述。而 Replication Controller 僅支持基于相等選擇器的需求。

  • Deployments
    Deployment為Pod和Replica Set(下一代Replication Controller)提供聲明式更新。 Deployment 中描述您想要的目標狀態(tài)是什么,Deployment controller 就會幫您將 Pod 和ReplicaSet 的實際狀態(tài)改變到您的目標狀態(tài)。

  • StatefulSet
    StatefulSet 剛開始接觸有點不好理解,她用來管理 Deployment 和擴展一組 Pod,并且能為這些 Pod 提供序號和唯一性保證。
    StatefulSet是為了解決有狀態(tài)服務的問題(對應Deployments和ReplicaSets是為無狀態(tài)服務而設計),其應用場景包括:

    • 穩(wěn)定的持久化存儲,即Pod重新調(diào)度后還是能訪問到相同的持久化數(shù)據(jù)
    • 穩(wěn)定的網(wǎng)絡標志,即Pod重新調(diào)度后其PodName和HostName不變,基于Headless Service(即沒有Cluster IP的Service)來實現(xiàn)
    • 有序部署(比如服務啟動需要依賴其他服務已經(jīng)啟動),有序擴展,即Pod是有順序的,在部署或者擴展的時候要依據(jù)定義的順序依次依次進行(即從0到N-1,在下一個Pod運行之前所有之前的Pod必須都是Running和Ready狀態(tài)),基于init containers來實現(xiàn)
    • 有序收縮,有序刪除(即從N-1到0)
  • DaemonSet
    DaemonSet 確保全部(或者某些)節(jié)點上運行一個 Pod 的副本。當有節(jié)點加入集群時,該控制器會自動部署對應Pod或服務。比如在每個節(jié)點上運行監(jiān)控 daemon: Prometheus Node Exporter

  • Job
    Job負責批處理任務,即僅執(zhí)行一次的任務,它保證批處理任務的一個或多個Pod成功結束

  • CronJob
    Cron Job 管理基于時間的 Job,如:在給定時間點只運行一次或周期性地在給定時間點運行。

  • Volumes
    存儲和網(wǎng)絡是k8s中比較難的部分。
    我們知道docker容器中的文件在磁盤上是臨時存放的,這給容器中運行的特殊應用程序帶來一些問題。 首先,當容器崩潰時,kubelet 將重新啟動容器,容器中的文件將會丟失——因為容器會以干凈的狀態(tài)重建。 其次,當在一個 Pod 中同時運行多個容器時,常常需要在這些容器之間共享文件,所以Kubernetes 抽象出 Volume 對象來解決這兩個問題。k8s的存儲和docker的volumes不是同一個概念,docker的volume僅僅是掛載docker容器所在的主機的磁盤路徑。而k8s是一組抽象的定義,volumes由不同的存儲class插件來實現(xiàn)。下面是詳細介紹
    Kubernetes 支持下列類型的卷:

  • awsElasticBlockStore

  • azureDisk

  • azureFile

  • cephfs

  • configMap

  • csi

  • downwardAPI

  • emptyDir

  • fc (fibre channel)

  • flocker

  • gcePersistentDisk

  • gitRepo (deprecated)

  • glusterfs

  • hostPath

  • iscsi

  • local

  • nfs

  • persistentVolumeClaim

  • projected

  • portworxVolume

  • quobyte

  • rbd

  • scaleIO

  • secret

  • storageos

  • vsphereVolume

PV & PVC

PersistentVolume 子系統(tǒng)為用戶和管理員提供了一個 API,該 API 將如何提供存儲的細節(jié)抽象了出來。為此,我們引入兩個新的 API 資源:PersistentVolume 和 PersistentVolumeClaim。
PersistentVolume(PV)是由管理員設置的存儲,它是群集的一部分。就像節(jié)點是集群中的資源一樣,PV 也是集群中的資源。 PV 是 Volume 之類的卷插件,但具有獨立于使用 PV 的 Pod 的生命周期。此 API 對象包含存儲實現(xiàn)的細節(jié),即 NFS、iSCSI 或特定于云供應商的存儲系統(tǒng)。

PersistentVolume 子系統(tǒng)為用戶和管理員提供了一個 API,該 API 將如何提供存儲的細節(jié)抽象了出來。為此,我們引入兩個新的 API 資源:PersistentVolume 和 PersistentVolumeClaim。
PersistentVolume(PV)是由管理員設置的存儲,它是群集的一部分。就像節(jié)點是集群中的資源一樣,PV 也是集群中的資源。 PV 是 Volume 之類的卷插件,但具有獨立于使用 PV 的 Pod 的生命周期。此 API 對象包含存儲實現(xiàn)的細節(jié),即 NFS、iSCSI 或特定于云供應商的存儲系統(tǒng)。

PersistentVolumeClaim(PVC)是用戶存儲的請求。它與 Pod 相似。Pod 消耗節(jié)點資源,PVC 消耗 PV 資源。Pod 可以請求特定級別的資源(CPU 和內(nèi)存)。聲明可以請求特定的大小和訪問模式(例如,可以以讀/寫一次或 只讀多次模式掛載)。PersistentVolumeClaim(PVC)是用戶存儲的請求。它與 Pod 相似。Pod 消耗節(jié)點資源,PVC 消耗 PV 資源。Pod 可以請求特定級別的資源(CPU 和內(nèi)存)。聲明可以請求特定的大小和訪問模式(例如,可以以讀/寫一次或 只讀多次模式掛載)。

Secret
Secret解決了密碼、token、密鑰等敏感數(shù)據(jù)的配置問題,而不需要把這些敏感數(shù)據(jù)暴露到鏡像或者Pod Spec中。Secret可以以Volume或者環(huán)境變量的方式使用。

Secret有三種類型:

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

ConfigMap

ConfigMap API資源用來保存key-value pair配置數(shù)據(jù),這個數(shù)據(jù)可以在pods里使用,或者被用來為像controller一樣的系統(tǒng)組件存儲配置數(shù)據(jù)。雖然ConfigMap跟Secrets類似,但是ConfigMap更方便的處理不含敏感信息的字符串。 注意:ConfigMaps不是屬性配置文件的替代品。

網(wǎng)絡、服務和負載均衡

前面已經(jīng)講過,網(wǎng)絡是比較難的部分。網(wǎng)絡部分包含服務、負載均衡等。理解K8S集群服務的概念,是比較不容易的一件事情。這部分我們下篇文章再聊。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容