Kubernetes簡介以及如何使用YAML配置?

banq發表於2024-03-08

 Kubernetes 提供的極大簡單性,這部分歸功於 Kubernetes 資源模型 (KRM)。

KRM資源模型描述了一種以清晰易懂的格式建立配置檔案的機制:

  • 允許使用程式碼指定所需的系統狀態。
  • 通用宣告性後設資料的概念是 KRM 的重要組成部分。

因此,KRM 通常表示為 YAML,建立了 Kubernetes 中的所有內容都可以提煉為 YAML 的核心概念。

Kubernetes 和 YAML
與用於雲原生應用程式的 21 世紀 Linux 核心版本相比,Kubernetes 代表了我們管理現代 IT 系統並與之互動的方式的重大轉變。這一比較強調了 Kubernetes 和 Linux 之間的相似之處,強調它們訪問和更改系統資訊的共同能力,儘管透過不同的機制。

Linux 中的 /proc 目錄提供對核心和大量系統資料的訪問。檢查這些虛擬檔案流允許使用者調查和檢索有關係統的資訊。同樣,API 是 Kubernetes 中系統內部運作的門戶。該API公開了整個Kubernetes叢集的資訊,並允許使用者查詢和控制Kubernetes資源。

至關重要的是,這種可訪問性是由 Linux 和 Kubernetes 中的可訪問格式提供的。它是 Linux 中的虛擬檔案流和 Kubernetes 中的 YAML 檔案。YAML 檔案提供了一種結構化且人類可讀的方法來定義配置和預期狀態。

此方法簡化了系統管理、配置和監控任務:

  • 人性化: YAML 檔案易於人們訪問且易於使用,這使其成為配置的絕佳選擇。
  • 多功能性和表現力: YAML 的多功能性使其能夠表達廣泛的配置和資料結構,從而允許廣泛的用例。
  • 易於設定和操作:設定和操作都很簡單,最大限度地縮短了 Kubernetes 和相關係統新手的學習曲線。
  • 跨語言相容性: YAML 可以輕鬆地從一種程式語言翻譯為另一種程式語言,從而促進互操作性。
  • 一致的資料模型: YAML 檔案遵循一致的資料模型,簡化了通用工具和解析器的構建。
  • 一次性處理: YAML 檔案可以一次性處理,從而提高人力和機器效率。
  • 使用簡單:它們減少了在命令列上鍵入複雜命令的需要,從而使與系統的通訊變得更加容易。
  • 版本控制: YAML 檔案可以新增到原始碼控制系統中以啟用版本控制和更改跟蹤。
  • 適應性: YAML 描述複雜資料結構的能力使其適合構建命令列無法實現的複雜設定。
  • DevSecOps 和協作性質:出於幾個令人信服的原因,使用 YAML 確保實施的相同型別和一致性至關重要,特別是在 DevSecOps 和現代 IT 運營的協作性質的背景下:
  • 清晰度和可讀性:由於 YAML 是結構化的,因此配置清晰易讀。當每個人都遵循相同的型別和結構時,所有團隊成員都可以更輕鬆地理解和使用配置,而不受部門或職能的影響。這種清晰度可以提高理解和溝通。

現實生活中的例子
想象一下在您辦公室的典型一天,不同的團隊一起工作以保持公司的應用程式和系統順利執行。您有開發團隊、運營團隊和安全團隊,每個團隊都有自己獨特的職責。

有一天,出現了一個令開發和運營團隊頭疼的問題。他們花了好幾個小時絞盡腦汁,試圖找出為什麼應用程式在一種環境中執行完美,但在另一種環境中卻慘敗,儘管一切看起來都一樣。

當他們遇到障礙時,沮喪感油然而生。他們決定聯絡安全團隊,希望他們能提供一些見解。畢竟,他們聽說他們使用的第三方解決方案可能是罪魁禍首。

令所有人驚訝的是,安全團隊深入研究後發現,第三方解決方案在容器中執行的應用程式程序中引入了一些隱藏元素。這些隱藏的元素阻礙了開發和運營團隊認為的正常行為。

現在,這就是令人沮喪的地方。安全團隊訪問了其他人沒有訪問過的某些介面和資訊。他們需要專業知識和獨特的途徑才能發現這個問題。
但這種情況提出了一個重要問題:您是否應該始終需要針對任何與基礎設施相關的問題進行安全檢查?如果每個相關人員(無論是開發人員、運營人員還是安全人員)都能看到並瞭解基礎設施中發生的情況,這不是更好嗎?

想象一下一個所有團隊都可以平等訪問相同資訊和工具的工作場所。當出現問題時,團隊無縫協作以快速識別和解決問題。在這裡,每個人都對系統的安全性、可靠性和效能共同承擔責任。

在這樣的環境中,問題可以更快地得到解決,每個人都感到有權貢獻自己的專業知識,並且安全性不是看門人,而是流程的一個組成部分。這種協作方法可以使操作更加順暢,並確保您的系統安全並符合行業法規。

最終,它是為了建立一個工作場所,讓每個人都擁有成功所需的工具和知識,並且透明度和團隊合作是解決挑戰的關鍵。

如何使用YAML
在 Kubernetes 中,首選的配置語言是 YAML(YAML 不是標記語言)。它用於定義和配置各種 Kubernetes 資源和應用程式。YAML 以其簡單和人類可讀的風格,成為定義和維護 Kubernetes 叢集中資源的不錯選擇。在 Kubernetes 中,YAML 的使用方法如下:

資源定義:在 Kubernetes 中,YAML 主要用於定義資源的理想狀態。每個資源都有自己的 YAML 配置檔案,如 pod、服務、部署、配置對映和機密。

apiVersion: v1  
kind: Pod  
metadata:  
  name: my-pod  
Spec:  
  containers:  
  - name: nginx-container  
    image: nginx:latest  

此示例中的 YAML 檔案定義了一個名為 "my-pod "的 pod,其中有一個執行最新版本 Nginx 映像的容器。

Labels & Metadata:
Metadata(如name名稱、label標籤和annotation註釋)是資源定義的重要組成部分。

  • annotation註釋用於儲存非標識性資訊,
  • label標籤是鍵值對,可提供有關資源的更多資訊。

apiVersion: v1  
kind: Pod  
metadata:  
  name: my-pod  
  labels:  
    app: my-app  
  annotations:  
    description: This is my pod.  
spec:  
  containers:  
  - name: nginx-container  
    image: nginx:latest  

本例中的 pod 有label標籤("app: my-app")和帶有說明的annotation註釋。

apiVersion: v1  
kind: Pod  
metadata:  
  name: my-pod  
spec:  
  containers:  
  - name: nginx-container  
    image: nginx:latest  
    ports:  
    - containerPort: 80  
  volumes:  
  - name: data-volume  
    hostPath:  
      path: /data  

YAML 檔案定義了一個包含 Nginx 容器和卷掛載的 pod。

Services 和 Networking:
YAML 檔案用於定義 Kubernetes 服務和網路配置,如服務型別(ClusterIP、NodePort、LoadBalancer)、埠和選擇器。

apiVersion: v1  
kind: Service  
metadata:  
  name: my-service  
spec:  
  selector:  
    app: my-app  
  ports:  
  - protocol: TCP  
    port: 80  
    targetPort: 80  

此 YAML 檔案定義了一項服務,可將流量路由到標有 "app: my-app "的 pod。

Deployments和Controllers:
YAML 檔案用於定義更高階別的控制器,如部署、狀態集和 DaemonSets。這些控制器負責管理 pod 的生命週期和擴充套件。

apiVersion: apps/v1  
kind: Deployment  
metadata:  
  name: my-deployment  
spec:  
  replicas: 3  
  selector:  
    matchLabels:  
      app: my-app  
  template:  
    metadata:  
      labels:  
        app: my-app  
    spec:  
      containers:  
      - name: nginx-container  
        image: nginx:latest  

該 YAML 檔案定義了一個部署,可確保執行 Nginx 的 pod 有三個副本。

配置檔案:
Kubernetes 還使用 YAML 配置檔案來設定叢集範圍內的配置,包括身份驗證、授權和網路策略。

apiVersion: v1  
kind: ConfigMap  
metadata:  
  name: my-config  
data:  
  key1: value1  
  key2: value2  

該 YAML 檔案定義了一個 ConfigMap,其中包含可用於配置設定的鍵值對。

Helm 圖表
Helm 是 Kubernetes 的軟體包管理器,它使用 YAML 檔案來定義封裝 Kubernetes 應用程式的 Helm 圖表。Helm 圖表包括模板、值檔案和後設資料,全部用 YAML 定義。

apiVersion: v1  
kind: Service  
metadata:  
  name: {{ .Release.Name }}-web  
spec:  
  selector:  
    app: {{ .Chart.Name }}  
  ports:  
    - port: 80  
      targetPort: 8080  

這是 Kubernetes 服務的 Helm 圖表模板示例。

YAML 是定義和配置 Kubernetes 資源的標準語言。它用於定義資源規範,包括後設資料、配置、服務、控制器等。Kubernetes 會解釋這些 YAML 檔案,以建立、更新或刪除資源,從而與 YAML 配置中指定的所需狀態相匹配。瞭解如何編寫和管理 YAML 檔案是有效使用 Kubernetes 的基礎。

 

相關文章