Kubernetes架構概覽

目錄

專欄介紹

作者與平臺

您將學到什么?

學習特色

Kubernetes架構概覽

1.1 Kubernetes簡介

1.2 基本架構

1.3 主要組件

1.4 核心功能

組件架構圖解

2.1 控制平面組件詳解

2.1.1 kube-apiserver

2.1.2 etcd

2.1.3 kube-scheduler

2.1.4 kube-controller-manager

2.1.5 cloud-controller-manager

2.2 工作節點組件詳解

2.2.1 kubelet

2.2.2 kube-proxy

2.2.3 容器運行時

2.2.4 網絡插件

2.2.5 Node Local Controller

核心概念詳解

3.1 Pod

3.1.1 定義

3.1.2 共享環境

3.1.3 設計初衷

3.1.4 生命周期

3.1.5 Pod示例

3.2 Deployment

3.2.1 定義

3.2.2 核心功能

3.2.3 與ReplicaSet的關系

3.2.4 Deployment示例

3.3 Service

3.3.1 定義

3.3.2 核心功能

3.3.3 類型與場景

3.3.4 Service示例

核心概念關系圖

4.1 用戶 → Deployment

4.2 Deployment → ReplicaSet

4.3 ReplicaSet → Pod

4.4 Pod → Service

4.5 Service → Node

4.6 Node → 容器運行時

實際應用場景

5.1 部署Web應用

5.1.1 創建Deployment

5.1.2 創建Service

5.1.3 訪問應用

5.2 微服務架構

5.2.1 前端服務

5.2.2 后端API

5.2.3 數據庫服務

5.2.4 架構圖


專欄介紹

作者與平臺

作者:庸子

用戶ID:2401_86478612

第一發表平臺:CSDN

歡迎來到《Kubernetes架構師之路:系統化學習與實踐》專欄!在這個容器化技術主導的時代,Kubernetes已成為云原生應用編排的事實標準,掌握Kubernetes已成為每位開發者和運維工程師的必備技能。

本專欄采用系統化學習方法,從基礎概念到高級實踐,循序漸進地帶您全面掌握Kubernetes技術棧。無論您是剛接觸容器技術的初學者,還是希望深入理解Kubernetes架構的資深工程師,這里都將為您提供清晰的學習路徑和實用的實戰指導。

您將學到什么?

  • 基礎理論:深入理解容器、容器編排、Kubernetes核心概念和架構設計
  • 核心組件:掌握etcd、API Server、Controller Manager、Scheduler等核心組件的工作原理
  • 資源管理:學會Pod、Deployment、Service、Ingress等核心資源的創建與管理
  • 網絡與存儲:理解Kubernetes網絡模型和存儲方案,解決實際部署中的網絡與存儲問題
  • 高可用與擴展:構建高可用的Kubernetes集群,實現應用的自動擴展與故障恢復
  • 監控與日志:掌握集群監控、日志收集與應用性能優化方法
  • CI/CD集成:學習如何將Kubernetes與CI/CD流程結合,實現自動化部署
  • 安全實踐:了解Kubernetes安全模型,掌握RBAC、網絡策略等安全配置

學習特色

  1. 系統化知識體系:從零開始,構建完整的Kubernetes知識框架
  2. 實戰導向:每個知識點都配有實際操作案例,讓您"學以致用"
  3. 問題驅動:針對實際部署中常見的問題提供解決方案
  4. 最新版本覆蓋:基于最新穩定版Kubernetes,緊跟技術發展趨勢
  5. 架構師視角:不僅教您"如何做",更解釋"為什么這樣設計"

無論您是想提升個人競爭力,還是為企業構建高效的云原生基礎設施,本專欄都將助您成為真正的Kubernetes專家。讓我們一起開啟這段激動人心的Kubernetes學習之旅!

立即訂閱,開啟您的Kubernetes架構師成長之路!

Kubernetes架構概覽

1.1 Kubernetes簡介

Kubernetes(簡稱K8s)是一個開源的容器編排平臺,最初由Google設計并捐贈給云原生計算基金會(CNCF)。它用于自動化部署、擴展和管理容器化應用程序,提供了靈活、可擴展的解決方案,幫助開發者和運維人員簡化應用程序的管理流程。

Kubernetes的核心價值在于它能夠自動化容器化應用的部署、擴展和管理,解決了大規模容器環境中的復雜性問題。它提供了服務發現、負載均衡、存儲編排、自動擴縮容、自我修復等關鍵功能,使開發者能夠專注于業務邏輯而非基礎設施管理。

1.2 基本架構

Kubernetes集群由一組節點組成,包括一個或多個控制平面節點和若干工作節點。控制平面節點負責管理集群的整體狀態,而工作節點負責實際運行容器化的應用程序。

1.3 主要組件

Kubernetes集群由兩種類型的節點組成:

  1. 控制平面(Master):負責管理整個集群的狀態和配置
  2. 工作節點(Node):負責運行容器化應用程序

1.4 核心功能

Kubernetes提供了一系列核心功能,使其成為容器編排領域的領導者:

容器編排:自動部署、擴展和管理容器化應用

服務發現:自動為容器分配IP和DNS名稱

負載均衡:在多個容器之間分配流量

自動擴縮容:根據資源需求自動調整應用實例數量

存儲編排:自動掛載和管理存儲系統

自我修復:自動替換失敗的容器

密鑰與配置管理:安全地存儲和管理敏感信息

批處理執行:支持一次性任務和批處理工作負載

組件架構圖解

2.1 控制平面組件詳解

控制平面是Kubernetes集群的大腦,負責管理集群的整體狀態和配置。以下是控制平面各組件的詳細說明:

2.1.1 kube-apiserver

kube-apiserver是Kubernetes集群的統一入口,負責處理所有REST請求,提供RESTful API接口服務。它是Kubernetes控制平面的核心組件,所有其他組件都通過它進行通信。

主要功能

提供集群操作的唯一入口點

處理認證、授權和準入控制

維護集群狀態,并將狀態持久化到etcd

提供集群資源對象的CRUD操作接口

關鍵特性

水平擴展:可以通過部署多個實例實現高可用

RESTful API:支持JSON和Protocol Buffers格式

驗證機制:確保所有操作符合Kubernetes API規范

事件通知:支持Watch機制,允許客戶端實時監控集群狀態變化

2.1.2 etcd

etcd是一個高可用的鍵值存儲系統,用于保存Kubernetes集群的所有狀態數據。它是Kubernetes集群的"真相來源",存儲了集群中所有資源對象的配置和狀態信息。

主要功能

持久化存儲集群狀態

提供高可用性和一致性保證

支持分布式部署和故障恢復

提供Watch機制,允許客戶端監聽鍵值變化

關鍵特性

強一致性:采用Raft算法確保數據一致性

高可用性:支持多節點部署,自動處理節點故障

快速響應:提供高效的讀寫性能

版本控制:支持數據的歷史版本查詢

2.1.3 kube-scheduler

kube-scheduler負責為新創建的Pod選擇一個合適的Node節點運行。它根據調度算法和約束條件,評估集群中各個節點的資源狀況和Pod的需求,選擇最優的節點進行調度。

主要功能

監聽未調度的Pod

根據調度算法選擇合適的Node

將Pod綁定到選定的Node上

支持多種調度策略和插件

關鍵特性

多種調度策略:包括資源需求、親和性/反親和性、污點容忍等

可擴展性:支持自定義調度器

并行調度:提高大規模集群的調度效率

預選和優選:兩階段調度過程,確保調度質量

2.1.4 kube-controller-manager

kube-controller-manager運行多個控制器進程,負責管理集群狀態的控制循環。這些控制器持續監控集群狀態,并確保實際狀態與期望狀態一致。

主要功能

運行各種控制器,如Node Controller、Replication Controller等

監控集群狀態變化

自動修復不符合期望狀態的資源

處理集群中的各種事件

關鍵特性

多控制器集成:在一個進程中運行多個控制器

自動修復:自動處理節點故障、Pod崩潰等問題

事件驅動:基于集群狀態變化觸發相應操作

可擴展性:支持自定義控制器

2.1.5 cloud-controller-manager

cloud-controller-manager是在公有云環境中負責管理與云提供商相關的資源的組件。它抽象了底層云平臺的差異,使Kubernetes可在多種云平臺上運行。

主要功能

管理云提供商特定的資源

處理節點、負載均衡器等云資源

提供統一的接口抽象不同云平臺

減少對核心Kubernetes組件的依賴

關鍵特性

云平臺抽象:支持多種云服務提供商

資源隔離:將云相關功能與核心組件分離

安全增強:減少對云憑證的暴露

獨立部署:可以獨立于其他控制平面組件部署

2.2 工作節點組件詳解

工作節點是Kubernetes集群中的執行者,負責實際運行容器化應用程序。以下是工作節點各組件的詳細說明:

2.2.1 kubelet

kubelet是運行在每個工作節點上的主要代理進程,負責管理節點上的Pod和容器。它是節點與控制平面的橋梁,確保Pod按照預期運行。

主要功能

管理Pod的生命周期

與容器運行時交互,啟動和管理容器

監控節點和容器的資源使用情況

向控制平面報告節點狀態

關鍵特性

Pod管理:負責Pod的創建、更新和刪除

容器管理:與容器運行時API交互

健康檢查:執行Pod和容器的健康檢查

資源監控:收集和報告節點和容器的資源使用情況

2.2.2 kube-proxy

kube-proxy是運行在每個工作節點上的網絡代理服務,負責維護網絡規則,管理Pod間的網絡通信和負載均衡。

主要功能

實現Service的負載均衡

維護節點上的網絡規則

處理Service的端口轉發

實現集群內的網絡通信

關鍵特性

負載均衡:將流量分發到多個Pod

網絡代理:支持多種代理模式(iptables、IPVS等)

服務發現:根據Service規則轉發流量

高可用:確保網絡服務的連續性

2.2.3 容器運行時

容器運行時是負責創建和管理應用程序容器的軟件。Kubernetes支持多種容器運行時,包括Docker、containerd、CRI-O等。

主要功能

啟動和管理容器

下載和管理容器鏡像

提供容器隔離和資源限制

處理容器的生命周期事件

關鍵特性

鏡像管理:支持多種鏡像倉庫

資源隔離:提供cgroups和namespaces隔離

安全增強:支持安全容器和鏡像掃描

標準接口:遵循OCI和CRI標準

2.2.4 網絡插件

網絡插件是實現容器之間和容器與外部網絡通信的組件。Kubernetes支持多種網絡插件,如Flannel、Calico、Weave等。

主要功能

實現Pod間的網絡通信

提供跨節點的網絡連接

支持網絡策略和安全規則

處理服務發現和負載均衡

關鍵特性

CNI接口:遵循容器網絡接口標準

網絡策略:支持基于標簽的網絡訪問控制

覆蓋網絡:支持跨節點的網絡通信

性能優化:提供高效的網絡轉發機制

2.2.5 Node Local Controller

Node Local Controller是負責在每個節點上執行特定控制任務的組件,如本地存儲管理、節點健康檢查等。

主要功能

管理節點上的本地存儲

執行節點健康檢查

處理節點特定的資源分配

協助節點故障恢復

關鍵特性

本地優化:針對節點級別的特定優化

資源管理:高效管理節點本地資源

故障檢測:快速檢測節點故障

性能監控:收集節點性能指標

核心概念詳解

3.1 Pod

3.1.1 定義

Pod是Kubernetes中最小的調度單元,可以包含一個或多個容器。Pod中的容器共享網絡和存儲資源,被作為一個整體進行調度和管理。

關鍵特性

最小部署單元:Kubernetes調度的最小單位

多容器支持:一個Pod可以包含多個容器

共享資源:容器共享網絡和存儲

生命周期管理:Pod有明確的創建、運行和終止生命周期

3.1.2 共享環境

同一Pod內的容器共享IP地址和端口空間,可通過localhost互相通信。這種設計使得容器之間可以高效地交換數據和信息。

共享網絡

共享IP地址:所有容器使用相同的IP地址

共享端口空間:容器間不能使用相同的端口

localhost通信:容器間可通過localhost互相訪問

域名解析:容器間可以通過容器名互相解析

共享存儲

共享卷:Pod可以掛載共享存儲卷

數據持久化:容器間共享數據,實現數據持久化

配置共享:通過共享卷共享配置文件

臨時存儲:支持臨時存儲需求

3.1.3 設計初衷

Pod的設計初衷是支持緊密耦合的容器組或臨時任務。例如:

主容器+Sidecar容器

主容器:運行主要應用程序

Sidecar容器:輔助主容器,如日志收集、監控等

共享資源:通過共享網絡和存儲實現高效通信

生命周期一致:Pod中的容器一起啟動和終止

臨時任務

短期運行:執行一次性任務后自動終止

資源隔離:與其他任務隔離運行

結果收集:通過共享存儲收集任務結果

自動清理:任務完成后自動清理資源

3.1.4 生命周期

Pod有明確的生命周期狀態,反映了其內部容器的運行狀態:

Pending(創建中)

Pod已被接受,但尚未創建

可能正在下載鏡像或調度節點

用戶可以通過kubectl get pods查看狀態

Running(運行中)

Pod已被綁定到節點,且至少一個容器正在運行

如果容器啟動失敗,Pod可能處于此狀態但容器未運行

用戶可以通過kubectl describe pods查看詳細信息

Succeeded(成功)

所有容器已成功終止

適用于一次性任務

容器退出碼為0

Failed(失敗)

所有容器已終止,至少一個容器以非零退出碼終止

適用于一次性任務

用戶可以通過kubectl logs查看容器日志

Unknown(未知)

無法確定Pod狀態

通常是由于與節點通信失敗

3.1.5 Pod示例

以下是一個Pod的YAML配置示例:

apiVersion: v1

kind: Pod

metadata:

??name: nginx-pod

??labels:

????app: nginx

spec:

??containers:

??- name: nginx

????image: nginx:1.23

????ports:

- containerPort: 80

關鍵配置說明

apiVersion: 指定API版本

kind: 資源類型,這里是Pod

metadata: 元數據,包括名稱和標簽

spec: Pod規格,包括容器定義

containers: 容器列表,每個容器指定鏡像和端口

3.2 Deployment

3.2.1 定義

Deployment是用于管理Pod副本集(ReplicaSet)的控制器,確保指定數量的Pod始終運行。它提供了一種聲明式的方式來部署和管理應用,支持聲明式配置和自動更新。

關鍵特性

聲明式配置:用戶只需聲明期望狀態

自動更新:支持滾動更新和回滾

擴縮容:支持手動和自動擴縮容

版本管理:支持多版本管理和回滾

3.2.2 核心功能

Deployment提供了一系列核心功能,簡化了應用的部署和管理:

滾動更新(Rolling Update)

逐步替換舊Pod,實現零停機部署

通過控制更新速率,確保應用在更新過程中仍然可用

支持更新策略(如Recreate、RollingUpdate)

可配置更新最大不可用時間和最大 surge 數量

回滾(Rollback)

快速恢復到歷史版本

Deployment會保留歷史版本,允許用戶在出現問題時快速回滾

支持回滾到特定修訂版本

記錄每次變更,便于問題排查

擴縮容(Scaling)

手動或自動調整Pod副本數

支持水平Pod自動擴縮容(HPA)

根據CPU、內存等指標自動調整副本數

支持自定義指標和外部指標

3.2.3 與ReplicaSet的關系

Deployment管理ReplicaSet,ReplicaSet管理Pod。每次更新Deployment會生成新的ReplicaSet,舊ReplicaSet保留以便回滾。

關系說明

Deployment:定義應用的期望狀態(副本數、鏡像等)

ReplicaSet:確保Pod數量符合預期,并管理Pod的標簽選擇器

Pod:實際運行容器的工作負載單元

更新過程

  1. 用戶更新Deployment的配置(如鏡像版本)
  2. Deployment創建一個新的ReplicaSet
  3. 新ReplicaSet根據滾動更新策略逐步創建新Pod
  4. 舊ReplicaSet逐步終止舊Pod
  5. 更新完成后,舊ReplicaSet保留(默認保留10個歷史版本)

回滾過程

  1. 用戶執行回滾命令,指定要回滾的修訂版本
  2. Deployment創建一個新的ReplicaSet,使用歷史配置
  3. 新ReplicaSet根據滾動更新策略逐步創建Pod
  4. 舊ReplicaSet逐步終止當前Pod
  5. 回滾完成,當前ReplicaSet更新為新的版本
3.2.4 Deployment示例

以下是一個Deployment的YAML配置示例:

apiVersion: apps/v1

kind: Deployment

metadata:

??name: nginx-deployment

??labels:

????app: nginx

spec:

??replicas: 3

??selector:

????matchLabels:

??????app: nginx

??template:

????metadata:

??????labels:

????????app: nginx

????spec:

??????containers:

??????- name: nginx

????????image: nginx:1.23

????????ports:

????????- containerPort: 80

關鍵配置說明

apiVersion: 指定API版本(apps/v1)

kind: 資源類型,這里是Deployment

metadata: 元數據,包括名稱和標簽

spec: Deployment規格,包括副本數和Pod模板

replicas: 期望的Pod副本數

selector: 用于選擇要管理的Pod的標簽選擇器

template: Pod模板,定義Pod的規格

3.3 Service

3.3.1 定義

Service是Kubernetes中用于定義一組Pod訪問策略的抽象資源,為動態變化的Pod提供穩定的訪問端點(IP/DNS)。Pod的IP地址是動態分配的,可能會隨著Pod的重新調度而改變,Service通過為一組Pod提供一個穩定的虛擬IP地址和DNS名稱,使得其他應用程序可以通過該IP地址或DNS名稱與這組Pod進行通信。

關鍵特性

穩定訪問:為動態變化的Pod提供穩定的訪問端點

負載均衡:將流量分發到多個Pod

服務發現:通過DNS名稱訪問服務,避免依賴Pod IP

會話保持:支持會話親和性,將來自同一客戶端的請求定向到同一Pod

3.3.2 核心功能

Service提供了一系列核心功能,簡化了服務間的通信:

負載均衡

將流量分發到多個Pod

支持多種負載均衡算法(輪詢、最少連接等)

支持會話親和性(基于客戶端IP)

支持流量權重分配

服務發現

通過DNS名稱訪問服務,避免依賴Pod IP

支持內網DNS解析

支持服務別名和端口映射

支持服務端點健康檢查

網絡策略

控制Pod間的網絡訪問

支持基于標簽的網絡訪問控制

支持基于端口的網絡訪問控制

支持基于命名空間的網絡訪問控制

3.3.3 類型與場景

Service支持多種類型,適用于不同的場景:

ClusterIP(內部服務通信)

默認類型,僅在集群內部可訪問的虛擬IP

適用于內部微服務通信

不直接暴露給外部客戶端

通過kube-proxy實現負載均衡

NodePort(通過節點端口暴露服務)

在ClusterIP基礎上,在每個節點開放靜態端口

適用于開發測試環境

可以通過節點IP和端口訪問服務

可以與LoadBalancer類型結合使用

LoadBalancer(通過云平臺負載均衡器暴露服務)

使用云提供商的負載均衡器

適用于生產環境公網訪問

自動分配外部IP地址

支持多種云服務提供商

Headless(直接獲取Pod IP)

不分配ClusterIP,直接返回Pod的IP地址

適用于StatefulSet或DNS發現場景

支持自定義DNS記錄

適用于需要直接訪問Pod的場景

3.3.4 Service示例

以下是一個Service的YAML配置示例:

apiVersion: v1

kind: Service

metadata:

??name: nginx-service

spec:

??selector:

????app: nginx

??ports:

????- protocol: TCP

??????port: 80

??????targetPort: 80

??type: ClusterIP

關鍵配置說明

apiVersion: 指定API版本(v1)

kind: 資源類型,這里是Service

metadata: 元數據,包括名稱

spec: Service規格,包括選擇器、端口和類型

selector: 用于選擇要關聯的Pod的標簽選擇器

ports: 定義服務的端口映射

type: Service類型,這里使用ClusterIP

核心概念關系圖

4.1 用戶 → Deployment

用戶通過Deployment定義Pod模板和副本數,聲明應用的期望狀態。用戶只需關心"想要什么",而不需要關心"如何實現"。

交互過程

  1. 用戶創建或更新Deployment資源
  2. Deployment控制器監聽資源變化
  3. Deployment根據Pod模板創建ReplicaSet
  4. ReplicaSet根據副本數創建和管理Pod

關鍵特性

  • 聲明式配置:用戶只需聲明期望狀態
  • 自動化:系統自動實現期望狀態
  • 版本管理:支持多版本管理和回滾
  • 擴縮容:支持手動和自動擴縮容

4.2 Deployment → ReplicaSet

Deployment控制ReplicaSet,確保Pod數量符合預期。每次更新Deployment會生成新的ReplicaSet,舊ReplicaSet保留以便回滾。

交互過程

  1. 用戶更新Deployment的配置(如鏡像版本)
  2. Deployment創建一個新的ReplicaSet
  3. 新ReplicaSet根據滾動更新策略逐步創建新Pod
  4. 舊ReplicaSet逐步終止舊Pod
  5. 更新完成后,舊ReplicaSet保留(默認保留10個歷史版本)

關鍵特性

分層管理:Deployment管理ReplicaSet,ReplicaSet管理Pod

版本控制:每次更新創建新的ReplicaSet

回滾支持:保留歷史版本,支持快速回滾

滾動更新:支持零停機更新

4.3 ReplicaSet → Pod

ReplicaSet管理Pod,確保Pod數量符合預期,并管理Pod的標簽選擇器。ReplicaSet通過標簽選擇器關聯Pod,并監控Pod的狀態。

交互過程

  1. ReplicaSet根據副本數創建Pod
  2. Pod被調度到合適的節點上運行
  3. ReplicaSet監控Pod的狀態
  4. 如果Pod失敗,ReplicaSet會創建新的Pod替代
  5. 如果副本數變化,ReplicaSet會相應增加或減少Pod數量

關鍵特性

自動修復:自動替換失敗的Pod

標簽選擇:通過標簽選擇器關聯Pod

副本管理:確保Pod數量符合預期

狀態監控:持續監控Pod的狀態

4.4 Pod → Service

Pod通過標簽關聯Service,提供訪問入口。Service通過標簽選擇器關聯一組Pod,為這組Pod提供統一的訪問入口。

交互過程

  1. 用戶創建Service,指定標簽選擇器
  2. Service控制器根據標簽選擇器查找匹配的Pod
  3. Service創建端點(Endpoints),記錄Pod的IP和端口
  4. 客戶端通過Service的IP或DNS名稱訪問服務
  5. kube-proxy將流量分發到后端的Pod

關鍵特性

動態發現:自動發現新創建的Pod

負載均衡:將流量分發到多個Pod

服務抽象:為客戶端提供穩定的訪問入口

會話保持:支持會話親和性

4.5 Service → Node

Service關聯Node,運行Pod的物理機/虛擬機。Node是Kubernetes集群中的工作節點,負責運行容器化應用程序。

交互過程

  1. Pod被調度到Node上運行
  2. Service通過kube-proxy在Node上設置網絡規則
  3. 客戶端請求到達Node,根據網絡規則轉發到Pod
  4. kube-proxy維護Node上的網絡規則,確保流量正確轉發
  5. 如果Node故障,Pod會被重新調度到其他Node

關鍵特性

負載均衡:在多個Node之間分配流量

故障轉移:自動處理Node故障

網絡代理:實現Service的負載均衡

資源管理:管理Node上的資源使用情況

4.6 Node → 容器運行時

Node關聯容器運行時,實際運行容器。容器運行時是負責創建和管理應用程序容器的軟件,如Docker、containerd等。

交互過程

  1. kubelet在Node上接收Pod規格
  2. kubelet與容器運行時API交互
  3. 容器運行時下載鏡像并創建容器
  4. 容器運行時啟動容器并管理其生命周期
  5. kubelet監控容器的狀態和資源使用情況

關鍵特性

容器管理:創建、啟動、停止和刪除容器

鏡像管理:下載和管理容器鏡像

資源隔離:提供cgroups和namespaces隔離

生命周期管理:管理容器的生命周期事件

實際應用場景

5.1 部署Web應用

部署一個簡單的Web應用是Kubernetes最常見的使用場景之一。以下是一個完整的部署流程:

5.1.1 創建Deployment

首先,創建一個Deployment來定義Nginx Pod的模板和副本數:

apiVersion: apps/v1

kind: Deployment

metadata:

??name: nginx-deployment

??labels:

????app: nginx

spec:

??replicas: 3

??selector:

????matchLabels:

??????app: nginx

??template:

????metadata:

??????labels:

????????app: nginx

????spec:

??????containers:

??????- name: nginx

????????image: nginx:1.23

????????ports:

????????- containerPort: 80

關鍵配置說明

replicas: 期望的Pod副本數,這里設置為3,實現高可用

selector: 用于選擇要管理的Pod的標簽選擇器

template: Pod模板,定義Pod的規格

containers: 容器列表,這里使用Nginx鏡像

5.1.2 創建Service

接下來,創建一個Service來暴露Nginx應用,使其能夠被訪問:

apiVersion: v1

kind: Service

metadata:

??name: nginx-service

spec:

??selector:

????app: nginx

??ports:

????- protocol: TCP

??????port: 80

??????targetPort: 80

??type: ClusterIP

關鍵配置說明

selector: 用于選擇要關聯的Pod的標簽選擇器,與Deployment的標簽匹配

ports: 定義服務的端口映射,將80端口映射到容器的80端口

type: Service類型,這里使用ClusterIP,僅在集群內部可訪問

如果需要從外部訪問,可以將type改為LoadBalancer:

apiVersion: v1

kind: Service

metadata:

??name: nginx-service

spec:

??selector:

????app: nginx

??ports:

????- protocol: TCP

??????port: 80

??????targetPort: 80

??type: LoadBalancer

5.1.3 訪問應用

創建Service后,可以通過以下方式訪問應用:

集群內部訪問

使用Service的名稱:kubectl exec -it <pod-name> -- curl http://nginx-service

使用Service的ClusterIP:kubectl get svc nginx-service -o jsonpath='{.spec.clusterIP}'

集群外部訪問

如果使用NodePort類型,可以通過節點IP和端口訪問:http://<node-ip>:<node-port>

如果使用LoadBalancer類型,可以通過外部負載均衡器的IP訪問:http://<external-ip>

DNS訪問

在集群內部,可以通過DNS名稱訪問:http://nginx-service.default.svc.cluster.local

在同一命名空間內,可以直接使用服務名:http://nginx-service

5.2 微服務架構

Kubernetes非常適合部署和管理微服務架構。以下是一個典型的微服務架構示例:

5.2.1 前端服務

前端服務通常需要暴露給外部用戶,因此使用LoadBalancer類型的Service:

apiVersion: apps/v1

kind: Deployment

metadata:

??name: frontend-deployment

??labels:

????app: frontend

spec:

??replicas: 2

??selector:

????matchLabels:

??????app: frontend

??template:

????metadata:

??????labels:

????????app: frontend

????spec:

??????containers:

??????- name: frontend

????????image: my-frontend-app:1.0

????????ports:

????????- containerPort: 80

????????env:

????????- name: API_URL

??????????value: "http://api-service"

---

apiVersion: v1

kind: Service

metadata:

??name: frontend-service

spec:

??selector:

????app: frontend

??ports:

????- protocol: TCP

??????port: 80

??????targetPort: 80

??type: LoadBalancer

關鍵配置說明

前端應用通過環境變量API_URL配置后端API的地址

使用LoadBalancer類型,將服務暴露給外部用戶

副本數設置為2,確保高可用

5.2.2 后端API

后端API通常只在集群內部被訪問,因此使用ClusterIP類型的Service:

apiVersion: apps/v1

kind: Deployment

metadata:

??name: api-deployment

??labels:

????app: api

spec:

??replicas: 3

??selector:

????matchLabels:

??????app: api

??template:

????metadata:

??????labels:

????????app: api

????spec:

??????containers:

??????- name: api

????????image: my-api-app:1.0

????????ports:

????????- containerPort: 8080

????????env:

????????- name: DB_HOST

??????????value: "database-service"

????????- name: DB_PORT

??????????value: "5432"

---

apiVersion: v1

kind: Service

metadata:

??name: api-service

spec:

??selector:

????app: api

??ports:

????- protocol: TCP

??????port: 80

??????targetPort: 8080

??????targetPort:?8080

關鍵配置說明

后端API通過環境變量配置數據庫連接信息

使用ClusterIP類型,僅在集群內部可訪問

副本數設置為3,確保高可用和負載均衡

5.2.3 數據庫服務

數據庫服務通常需要持久化存儲和穩定的網絡標識,因此使用StatefulSet和Headless Service:

apiVersion: apps/v1

kind: StatefulSet

metadata:

??name: database-statefulset

spec:

??serviceName: database-service

??replicas: 1

??selector:

????matchLabels:

??????app: database

??template:

????metadata:

??????labels:

????????app: database

????spec:

??????containers:

??????- name: database

????????image: postgres:13

????????ports:

????????- containerPort: 5432

????????env:

????????- name: POSTGRES_PASSWORD

??????????valueFrom:

????????????secretKeyRef:

??????????????name: postgres-secret

??????????????key: password

????????volumeMounts:

????????- name: database-storage

??????????mountPath: /var/lib/postgresql/data

??volumeClaimTemplates:

??- metadata:

??????name: database-storage

????spec:

??????accessModes: [ "ReadWriteOnce" ]

??????resources:

????????requests:

??????????storage: 10Gi

---

apiVersion: v1

kind: Service

metadata:

??name: database-service

spec:

??clusterIP: None

??selector:

????app: database

??ports:

????- protocol: TCP

??????port: 5432

??????targetPort: 5432

關鍵配置說明

使用StatefulSet管理有狀態應用,提供穩定的網絡標識和持久化存儲

使用Headless Service(clusterIP: None),直接返回Pod的IP地址

通過volumeClaimTemplates自動創建持久化存儲

使用Secret管理敏感信息(如數據庫密碼)

5.2.4 架構圖

以下是這個微服務架構的示意圖:

Kubernetes作為云原生時代的核心技術,正在改變軟件開發和運維的方式。作為一名架構師,深入理解Kubernetes的架構和核心概念,不僅能夠更好地設計和管理云原生應用,還能夠為企業數字化轉型提供技術支持。

本文系統性地介紹了Kubernetes架構概覽、組件架構圖解以及核心概念,希望能夠幫助讀者構建扎實的Kubernetes知識體系。隨著技術的不斷發展,K8s生態系統也在不斷演進,讀者需要持續學習,跟上技術發展的步伐。

在未來的技術道路上,愿讀者能夠不斷探索、實踐和創新,成為真正的Kubernetes架構師,為云原生技術的發展和應用做出貢獻。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/91914.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/91914.shtml
英文地址,請注明出處:http://en.pswp.cn/web/91914.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

前端技術棧查缺補漏

前端技術棧涵蓋廣泛&#xff0c;涉及多個領域和技術方向。以下是全面的分類總結&#xff0c;幫助你對前端技術生態有系統化的了解&#xff1a;一、核心基礎HTML/CSS HTML5&#xff08;語義化標簽、Web Components&#xff09;CSS3&#xff08;Flexbox/Grid、動畫、變量、BEM/SM…

文明7|席德·梅爾的文明VII PC/手機雙端 模擬器版(Sid Meier’s Civilization VII)免安裝中文版

網盤鏈接&#xff1a; 文明7|席德梅爾的文明VII 免安裝中文版 名稱&#xff1a;文明7|席德梅爾的文明VII PC/手機雙端 模擬器版 免安裝中文版 描述&#xff1a;這款策略神作重新定義了"歷史蝴蝶效應"&#xff01; 《文明7》的"文明基因"系統讓每個選擇都刻…

C#模式匹配用法與總結

1. 模式匹配概述?? 模式匹配是C# 7.0引入的機制&#xff0c;用于檢查數據的類型、值或結構&#xff0c;并提取信息。通過is表達式、switch語句/表達式實現&#xff0c;顯著簡化條件邏輯&#xff0c;提升代碼可讀性和安全性。 ??核心優勢??&#xff1a; ??簡潔性??&…

修改git commit 提交版本的描述信息

1 修改最后一次提交&#xff08;未推送到遠程倉庫&#xff09; 適用場景&#xff1a;提交僅存在于本地&#xff0c;尚未執行 git push 操作步驟&#xff1a;git commit --amend -m "新的正確備注"原理&#xff1a;–amend 會合并新的修改到上一次提交&#xff0c;并允…

PyQt GUI開發初學者:固定尺寸還是全屏自適應?

PyQt GUI開發初學者&#xff1a;固定尺寸還是全屏自適應&#xff1f;在PyQt GUI開發中&#xff0c;新手常常面臨一個選擇&#xff1a;是應該為應用程序設置固定尺寸&#xff0c;還是采用全屏自適應設計&#xff1f;這個決定不僅關乎用戶體驗&#xff0c;還影響開發效率和應用的…

量子圖靈機 Quantum Turing Machine, QTM

量子圖靈機&#xff08;Quantum Turing Machine, QTM&#xff09;是經典圖靈機&#xff08;Turing Machine, TM&#xff09;在量子計算框架下的推廣&#xff0c;它利用量子力學原理&#xff08;如疊加態、糾纏和幺正演化&#xff09;擴展了計算能力。下面對量子圖靈機進行解析。…

用于 UBI 的 Elasticsearch 插件:從搜索查詢中分析用戶行為

作者&#xff1a;來自 Elastic Eduard Martin 想獲得 Elastic 認證&#xff1f;了解下一期 Elasticsearch Engineer 培訓的時間&#xff01; Elasticsearch 擁有豐富的新功能&#xff0c;幫助你為你的使用場景構建最佳搜索解決方案。深入查看我們的示例筆記本以了解更多信息&a…

python的蛋糕店管理系統

前端開發框架:vue.js 數據庫 mysql 版本不限 后端語言框架支持&#xff1a; 1 java(SSM/springboot)-idea/eclipse 2.NodejsVue.js -vscode 3.python(flask/django)–pycharm/vscode 4.php(thinkphp/laravel)-hbuilderx 數據庫工具&#xff1a;Navicat/SQLyog等都可以 該系統通…

開源項目:排序算法的多種實現方式

以 排序算法 為例&#xff0c;展示如何在 Python 中進行不同實現方式的對比項目概述本項目旨在通過 Python 實現幾種經典的排序算法&#xff0c;并通過性能對比、代碼注釋和優化手段&#xff0c;為開源社區提供參考。選擇排序、冒泡排序、快速排序和歸并排序作為主要算法&#…

操作系統數據格式相關(AI回答)

二進制接口&#xff08;ABI&#xff09; DeepSeek-R1 回答完成 深度思考完成 用時20秒&#xff0c;搜索全網24篇資料 二進制接口&#xff08;ABI&#xff0c;Application Binary Interface&#xff09;是計算機系統中定義二進制層面交互規則的低層接口規范&#xff0c;確保不…

從入倉到結算全自動化:易境通如何重構散貨拼柜業務流程?

在全球貿易蓬勃發展的今天&#xff0c;海運拼箱&#xff08;LCL&#xff09;憑借成本低、靈活性強的優勢&#xff0c;成為中小貨主、跨境電商和國際貿易企業的首選物流方式。然而&#xff0c;散貨拼柜業務涉及多貨主、多環節、多流程&#xff0c;傳統管理方式存在信息不透明、效…

CAP 理論筆記

一、CAP 理論概述 CAP 理論由 Eric Brewer 于 2000 年提出&#xff0c;并在 2002 年被正式證明。它描述了分布式系統在 一致性&#xff08;Consistency&#xff09;、可用性&#xff08;Availability&#xff09;、分區容忍性&#xff08;Partition Tolerance&#xff09; 三個…

Android 底層實現基礎

Activity 生命周期應用內 Activity 跳轉流程&#xff08;A → B&#xff09; 從 Activity A 打開新的 Activity B&#xff08;如點擊按鈕跳轉詳情頁&#xff09; A.onCreate() → A.onStart() → A.onResume() &#xff08;A 已在前臺&#xff09;點擊跳轉按鈕 → A.onPause() …

MySQL進階:(第一篇) 深入解析MySQL存儲引擎架構

一、MySQL的體系結構連接層&#xff1a;最上層是一些客戶端和鏈接服務&#xff0c;主要完成一些類似于連接處理、授權認證、及相關的安全方案。服務器也會為安全接入的每個客戶端驗證它所具有的操作權限。服務層&#xff1a;第二層架構主要完成大多數的核心服務功能&#xff0c…

京東m端 滑塊 分析 t30

聲明: 本文章中所有內容僅供學習交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包內容、敏感網址、數據接口等均已做脫敏處理&#xff0c;嚴禁用于商業用途和非法用途&#xff0c;否則由此產生的一切后果均與作者無關&#xff01;部分python代碼response requests.pos…

CentOS使用命令行工具為其配置靜態網絡并使用VMware軟件ovf配置文件快速配置多臺不同ip的centos文件

目錄 一、實驗前準備 1.SSH遠程登錄工具 二、CentOS配置靜態IP并實現遠程ssh登錄 1.VMware軟件查看NAT模式下默認網段和網關 2.使用ipconfig查看當前網卡名字和動態分配的ip地址 3.使用VIM編輯網絡配置文件&#xff08;此步驟可有其他編輯器替代&#xff0c;例如&#xf…

設計模式學習[17]---組合模式

文章目錄前言1.引例2.一致性抽象處理3.透明組合模式與安全組合模式總結前言 在畫類圖的時候&#xff0c;類與類之間有組合關系&#xff0c;聚合關系&#xff0c;我本來以為這個組合模式應該是整體與部分的關系&#xff0c;其實設計模式中的組合模式和類圖中的組合不是同一個東…

48Days-Day12 | 添加字符,數組變換,裝箱問題

添加字符 添加字符_牛客筆試題_牛客網 算法原理 因為本題數據量都比較小&#xff0c;所以我們可以直接使用暴力解法&#xff0c;枚舉B字符串的每一個位置作為與A字符串比較的起點&#xff0c;維護一個最小位數的值 代碼 import java.util.*;// 注意類名必須為 Main, 不要有…

關于npm前端項目編譯時棧溢出 Maximum call stack size exceeded的處理方案

背景&#xff1a;使用vueelementui的前端項目&#xff0c;使用jenkins進行自動化編譯部署&#xff0c;某天在進行編譯發版的時候&#xff0c;突然出現 npm ERR! Maximum call stack size exceeded 錯誤&#xff0c;一直都沒法編譯成功。原因&#xff1a;隨著前端項目的不斷迭代…

微信小程序組件發布為 npm 包的具體步驟

1. 準備工作 首先&#xff0c;您需要在系統上安裝 Node.js 和 npm。如果尚未安裝&#xff0c;請訪問 Node.js — Run JavaScript Everywhere 下載并安裝最新版本。 2. 創建獨立的組件目錄 為了更好地管理組件&#xff0c;建議將其從當前項目中獨立出來&#xff1a; wechat-…