再也不用擔心學不會K8S!17個K8S初學者必須掌握的知識點

轉自 RancherLabs 文章!

我看完了,非常全,言簡意賅!


Kubernetes是一個可移植、可擴展的開源平臺,用於管理容器化的工作負載和服務,有助於聲明式配置和自動化。目前,Kubernetes正在以強勁的勢頭持續發展,其相關的生態也在不斷完善。本文中,我們列出了所有Kubernetes入門者對於部署和管理Kubernetes容器不得不關注的17個方面。


1、 設置Kubernetes集群

Kubernetes有多個開源組件組合而成,這些組件由不同的公司開發,這給使用Kubernetes增加了難度——因為難以找到所有相關的軟件包,而且難以安裝、配置。幸運的是,市場上有一些解決方案和工具可以讓Kubernetes集群高效運行。因此,強烈推薦您使用類似的工具在您的環境中設置Kubernetes集群,如企業級的Kubernetes管理平臺Rancher等。


2、通過CLI或RESTful API使用K8S

現在你可以開始在Kubernetes上創建不同類型的資源。為了在微服務架構中實現您的應用程序,深入瞭解Kubernetes命令行界面(CLI)將有助於理解Kubernetes資源並加以整合。當您在Kubernetes中部署應用程序之後,您可以進行可擴展且高效的容器管理,還可以完成微服務的DevOps交付過程。


無論是使用CLI還是API(RESTful),都能讓使用Kubernetes變得輕鬆。當您安裝了Kubernetes master之後,您可以運行一個kubectl 命令行來查看系統版本或進行其他交互。Kubectl是Kubernetes唯一的命令行工具,它可以控制Kubernetes集群管理器。任何集群或Kubernetes集群的操作都能夠通過kubectl命令行執行。此外,kubectl允許通過命令行的可選參數或文件(使用-f選項)輸入信息。

你一定會用到的7條kubectl命令

3、 鏈接Pod和容器

Pod是一組包含一個或多個容器,還是Kubernetes中最小的部署單元。Pod始終位於同一位置、統一調度,並在共享上下文中運行。每個Pod都被以下Linux命名空間隔離:進程 ID(PID)命名空間、網絡命名空間、進程間通信(IPC)命名空間、Unix時間共享(UTS)命名空間。在容器出現之前,它們將在同一物理機或虛擬機上執行。構建混合了不同Docker鏡像的應用程序堆棧pod(如,web服務器和數據庫)十分有用。

為了能夠提升資源的利用率,Kubernetes提供了一個強大的功能,它能在運行的服務上進行編碼並配置彈性伸縮,這一功能稱為Pod水平自動擴展(HPA)。在Rancher 2.3中,已經集成了HPA功能,用戶可以通過Rancher UI使用。

kubectl+HPA!提升K8S容器資源利用的關鍵解決方案

4、 使用ReplicaSets管理Pod

ReplicaSet是Kubernetes中用於引用Pod副本的API對象的術語。它主要的目的是控制一組Pod的行為。ReplicaSet可以保證運行用戶所指定的數量Pod。如果ReplicaSet中的某些Pod崩潰並終止,系統將在運行狀況良好的節點上自動使用初始配置重新創建Pod,並且保持一定數量的進程在持續運行。在更改一組Pod規模時,用戶可以輕鬆地伸縮應用程序。根據這一特性,無論是否需要Pod的副本,都可以始終依靠ReplicaSet來實現自動恢復和彈性伸縮。


5、 Deployment API

早在Kubernetes 1.2版本的時候就引入了Deployment API,它可以更加方便地管理Pod和ReplicaSet。通過Replication Controller進行滾動更新和回滾的功能是通過客戶端(kubectl命令和REST API)實現的,kubectl在更新replication controller時需要保持連接。另一方面,deployment負責服務器端的滾動更新和回滾過程。接受該請求後,客戶端可以立即斷開連接。因此,Deployment API被設計為管理ReplicaSet對象的高級API。

6、 使用服務

網絡服務用於接收請求並提供解決方案,客戶端通過網絡連接訪問服務,他們不必知道服務的架構或其運行方式。客戶端唯一需要驗證的是是否可以訪問服務的端點,然後遵循其使用策略來獲取服務器的響應。Kubernetes服務也與其類似,它是一種為一組功能相同的pod提供單一不變的接入點的資源。當服務存在時,它的IP地址和端口不會改變。客戶端通過IP地址和端口號建立連接,這些連接會被路由到提供該服務的任意一個pod上。通過這種方式,客戶端不需要知道每個單獨的提供服務的pod的地址,這樣這些pod就可以在集群中隨時被創建或移除。


7、 使用volumes

容器中的文件是臨時文件,當容器終止時,文件就會消失。Docker引入了數據volume來幫助我們持久化存儲數據。然而,當涉及到多個主機時,作為一個容器集群,很難管理所有容器和主機之間的分享文件和動態配置volume。因此Kubernetes也引入了volume,它與Pod的生命週期相同,但與容器的生命週期無關。換言之,當容器終止或重啟時,volume中的數據也不會丟失。Kubernetes中提供了十分豐富的volume類型,如emptyDir等。

3種K8S存儲:emptyDir、hostPath、local

8、 使用Storage Class

在雲計算領域中,人們動態地配置存儲或數據volume。雖然PersistentVolumeClaim是基於管理員提供的現有靜態PersistentVolume,但如果可以在需要時動態請求cloud volume,則也許會有幫助。Storage Class可以解決這一問題。想要讓Storage Class可以在集群中使用,需要滿足3個條件。首先,必須啟動DefaultStorageClass准入控制器;然後,PersistentVolumeClaim需要請求一個存儲類;最後,管理員必須配置Storage Class才能使動態配置工作。

9、 使用Secret

Kubernetes Secret使用key-value格式編碼的值來管理信息,這些信息可以是密碼、訪問密鑰或token。使用Secret,用戶無需擔心會在配置文件中公開敏感數據,它可以降低憑據洩露的風險,並使我們的資源配置更加井井有條。目前,有三種類型的Secret:

  • Generic/Opaque
  • Docker registry
  • TLS

Generic/Opaque是在應用程序中默認使用的secret類型。Docker registry類型可用於存儲私密Docker registry的憑據。TLS secret用於存儲CA證書以進行集群管理。Kubernetes為用於訪問API服務器的憑據創建內置的Secret。

在使用Secret之前,我們必須牢記,應在依賴於它的任何Pod之前創建secret,以便pod能夠正確引用它。此外,Secret大小限制為1MB。因此Secret不是為存儲大量數據而設計的。對於配置數據,請考慮使用ConfigMaps;對於大量非敏感數據,請考慮使用Volume。

10、 使用名稱

創建任何Kubernetes對象(例如Pod、Deployment和Service)時,可以為其分配名稱。在Kubernetes中,每個空間的名稱是唯一的,也就是說您不能在Pod中分配相同的名稱。Kubernetes的命名規則如下:

  • 最多253個字符
  • 小寫字母和數字字符
  • 中間可以包含特殊字符,但只能包含破折號(-)和點(.)


11、 使用命名空間

在Kubernetes集群中,資源名稱是命名空間中唯一標識符。使用Kubernetes命名空間可以為同一集群中的不同環境分隔用戶空間。它使您可以靈活地創建隔離環境並將資源分配給不同的項目和團隊。您可以將命名空間視為虛擬集群。Pod、服務和Deployment都可以包含在某個命名空間中。某些低級資源(如節點、persistentVolumes)則不屬於任何命名空間。在深入研究資源命名空間之前,讓我們先了解kubeconfig和一些關鍵概念。

  • Kubeconfig用於調用配置Kubernetes集群訪問權限的文件。作為系統的初始配置,Kubernetes將$HOME/.kube/config作為kubeconfig文件。
  • Kubeconfig定義了用戶、集群和上下文:kubeconfig列出了多個用於定義身份認證的用戶,以及多個用於指示Kubernetes API服務器的集群。另外,kubeconfig中的上下文由一個用戶和一個集群組合而成:使用某種身份認證可以訪問特定的Kubernetes集群。
  • 用戶和集群可以在上下文之間共享,但是每個上下文只能有一個用戶和一個集群。
  • 命名空間可以附加到上下文:可以將每個上下文分配給現有的命名空間,如果不存在,它將與默認命名空間一起使用。
  • 當前上下文是客戶端的默認環境:kubeconfig中可能有多個上下文,但當前上下文只有1個。當前上下文和附加的命名空間將為用戶構建默認的計算環境。

現在你應該瞭解,因為命名空間可以與kubeconfig一起使用,所以用戶可以通過切換kubeconfig中的當前上下文輕鬆切換默認資源。但是,用戶仍可以使用指定資源啟動其他命名空間中的任何資源。

12、 使用標籤(label)和selector

標籤是一組鍵/值對,它們會附加到對象元數據。我們可以使用標籤來選擇、組織和分組對象,例如Pod、ReplicaSets和服務。標籤不一定是唯一的,對象可以帶有相同的標籤集。Label selector用於查詢具有以下類型標籤的對象:

  • 基於等式(Equality-based):使用等於(=或==)或非等於(!=)運算符
  • 基於集合(Set-based):使用或不使用運算符

13、 彈性伸縮您的容器

根據預定義的標準來伸縮應用程序或服務是一種最有效地最大程度利用計算資源地常用方法。在Kubernetes中,您可以手動伸縮,也可以使用HPA進行自動彈性伸縮。

14、 更新運行中的容器

為了讓容器運行良好,我們可以通過執行最新的鏡像輕鬆發佈新程序,並減輕環境設置的麻煩。但是,如何在正在運行的容器上發佈程序呢?在本地管理容器時,我們必須先停止正在運行的容器,然後再啟動具有最新鏡像和相同配置的新容器。此外,還有一些簡單有效的方法可以在Kubernetes中更新程序。一種稱為滾動更新,這意味著Deployment可以更新其Pod,而不會導致客戶端停機。另一種方法稱為recreate,它只是終止所有Pod,然後創建一個新的集合。


15、 轉發容器端口

您應該學習如何與Kubernetes服務一起在內部和外部轉發容器端口。另外,您需要了解Kubernetes處理內部和外部通信的方法,在Kubernetes中有4種網絡模型:

  • 容器到容器的通信
  • Pod到Pod的通信
  • Pod到服務的通信
  • 外部到內部的通信


如何在Kubernetes中Pod間共享內存以實現高性能通信?

在Kubernetes環境中,容器間如何進行網絡通信?

16、 在Kubernetes上提交Job

您的容器應用程序不僅適用於諸如nginx之類的守護進程,還適用於某些批處理job,這些job最終會在任務完成時退出。Kubernetes支持這種情況:您可以提交一個容器作為job,而Kubernetes將分派到適當的節點並執行您的job。


17、 使用配置文件

Kubernetes支持兩種不同的文件格式,YAML和JSON。每種格式都可以描述Kubernetes的相同功能。


再也不用擔心學不會K8S!17個K8S初學者必須掌握的知識點


分享到:


相關文章: