K8s學習與實踐

一、Kubernetes 核心原理

1. Kubernetes 設計哲學

Kubernetes(k8s)是一個開源的容器編排平臺,旨在自動化容器化應用的部署、擴展和管理。其核心設計圍繞以下目標:

  • 聲明式配置:用戶描述期望狀態(如 YAML 文件),系統自動驅動實際狀態匹配期望狀態。
  • 自愈能力:自動重啟故障容器、替換不可用節點、動態擴展副本等。
  • 松耦合架構:組件模塊化,通過 API 交互,支持靈活擴展。

2. Kubernetes 架構概覽

Kubernetes 集群由 Master 節點(控制平面)和 Worker 節點(計算節點)組成:

二、Master 節點組件原理

1. API Server

  • 功能:Kubernetes 的前端接口,接收并處理所有 REST 請求(如 kubectl 命令)。
  • 原理
    • 驗證請求合法性(Authentication)。
    • 鑒權(Authorization)與準入控制(Admission Control)。
    • 將資源狀態持久化到 etcd。
  • 高可用:多實例部署,通過負載均衡對外服務。

2. etcd

  • 功能:分布式鍵值存儲,保存集群所有配置數據(如 Pod、Service 狀態)。
  • 原理
    • 基于 Raft 算法實現強一致性。
    • 監聽機制(Watch)支持組件實時感知狀態變更。
  • 優化:定期備份數據,分離 Kubernetes 數據與其他業務數據。

3. Scheduler

  • 功能:將未調度的 Pod 分配到合適的 Worker 節點。
  • 調度流程
    1. 過濾(Predicate):排除不滿足條件的節點(如資源不足)。
    2. 打分(Priority):對剩余節點評分(如 CPU 空閑率最高者優先)。
  • 擴展性:支持自定義調度策略(如 GPU 親和性)。

4. Controller Manager

  • 功能:運行控制器循環,確保系統實際狀態匹配期望狀態。
  • 核心控制器
    • Deployment Controller:管理 ReplicaSet 的副本數。
    • Node Controller:監控節點狀態,驅逐不可用節點上的 Pod。
    • Service Controller:為 Service 配置負載均衡器(如 AWS ELB)。

三、Worker 節點組件原理

1. kubelet

  • 功能:節點代理,管理 Pod 生命周期(創建/銷毀容器)。
  • 核心職責
    • 監聽 API Server 分配的 Pod 清單。
    • 調用容器運行時(如 Docker、Containerd)啟動容器。
    • 定期上報節點狀態(CPU、內存使用率)到 API Server。

2. kube-proxy

  • 功能:實現 Service 的負載均衡和網絡規則。
  • 實現模式
    • iptables(默認):為每個 Service 生成 iptables 規則。
    • IPVS:基于內核級負載均衡,性能更優。
  • 原理:將訪問 Service VIP 的流量轉發到后端 Pod。

3. 容器運行時

  • 功能:執行容器生命周期操作(如 Docker、Containerd、CRI-O)。
  • CRI(Container Runtime Interface):Kubernetes 定義的容器運行時標準接口。

四、核心對象與資源模型

1. Pod

  • 最小調度單元:包含一個或多個共享網絡/存儲的容器。
  • 生命周期:Pending → Running → Succeeded/Failed。
  • 設計模式
    • Sidecar:輔助容器(如日志收集)。
    • Init Container:在主容器前運行初始化任務。

2. Deployment

  • 功能:管理 Pod 副本集,支持滾動更新和回滾。
  • 示例 YAML
    apiVersion: apps/v1
    kind: Deployment
    metadata:name: nginx-deployment
    spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.19ports:- containerPort: 80
    

3. Service

  • 功能:為一組 Pod 提供穩定的訪問入口(VIP 或 DNS)。
  • 類型
    • ClusterIP(默認):集群內部訪問。
    • NodePort:通過節點端口暴露服務。
    • LoadBalancer:云平臺負載均衡器集成。

五、實踐指南:從零部署應用

1. 環境準備

安裝 Minikube(本地單節點集群)
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
minikube start --driver=docker
驗證集群狀態
kubectl get nodes
kubectl cluster-info

2. 部署 Nginx 應用

創建 Deployment
kubectl create deployment nginx --image=nginx:1.19
kubectl get pods -l app=nginx
暴露 Service
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get svc nginx
訪問應用
minikube service nginx --url  # 獲取訪問URL
curl http://<NodeIP>:<NodePort>

3. 應用擴展與更新

水平擴展副本
kubectl scale deployment nginx --replicas=5
kubectl get pods -l app=nginx
滾動更新版本
kubectl set image deployment/nginx nginx=nginx:1.21
kubectl rollout status deployment/nginx
回滾到舊版本
kubectl rollout undo deployment/nginx

六、高級實踐:持久化存儲與配置管理

1. PersistentVolume (PV) 與 PersistentVolumeClaim (PVC)

創建 PV 和 PVC
# pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:name: my-pv
spec:capacity:storage: 5GiaccessModes:- ReadWriteOncehostPath:path: /data/pv
---
# pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: my-pvc
spec:accessModes:- ReadWriteOnceresources:requests:storage: 3Gi
掛載到 Pod
apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:containers:- name: appimage: nginxvolumeMounts:- name: datamountPath: /usr/share/nginx/htmlvolumes:- name: datapersistentVolumeClaim:claimName: my-pvc

2. ConfigMap 與 Secret

管理配置
# 創建 ConfigMap
kubectl create configmap app-config --from-file=config.properties# 創建 Secret
kubectl create secret generic db-secret --from-literal=username=admin --from-literal=password=123456
在 Pod 中使用
apiVersion: v1
kind: Pod
metadata:name: config-demo
spec:containers:- name: appimage: busyboxcommand: ["/bin/sh", "-c", "env"]envFrom:- configMapRef:name: app-config- secretRef:name: db-secret

七、監控與日志

1. 部署 Prometheus + Grafana

安裝監控組件
kubectl create namespace monitoring
kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/main/manifests/setup/prometheus-operator-0servicemonitorCustomResourceDefinition.yaml
kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/main/manifests/
訪問 Grafana
kubectl port-forward -n monitoring svc/grafana 3000:3000

訪問 http://localhost:3000,使用默認賬號 admin/admin

2. 集中日志(EFK 棧)

部署 Elasticsearch、Fluentd、Kibana
kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/fluentd-elasticsearch/

八、總結與最佳實踐

1. 核心原則

  • 聲明式配置:所有資源通過 YAML 文件管理,納入版本控制。
  • 資源限制:為 Pod 設置 CPU/內存請求與上限(requests/limits)。
  • 滾動更新策略:配置 maxUnavailablemaxSurge 確保服務可用性。

2. 生產環境建議

  • 集群高可用:多 Master 節點 + 負載均衡。
  • 網絡策略:使用 Calico 或 Cilium 實現網絡隔離。
  • 安全加固:啟用 RBAC、Pod 安全策略(PSP)。

通過掌握 Kubernetes 的核心原理與實踐技巧,您將能夠構建高效、穩定的容器化應用平臺,應對從開發到生產的全流程挑戰。

擴展閱讀

  • Kubernetes 官方文檔
  • Kubernetes 網絡模型詳解
  • 生產環境 Kubernetes 集群設計指南

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

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

相關文章

Umi-OCR項目(1)

最近接觸到了一個項目&#xff0c;我在想能不能做出點東西出來。 目標&#xff1a;識別一張帶表格的圖片&#xff0c;要求非表格內容和表格內容都要識別得很好&#xff0c;并且可視化輸出為word文檔。 下面是第一步的測試代碼&#xff0c;測試是否能夠調用ocr能力。 import re…

Mioty|采用報文分割(Telegram Splitting)以提高抗干擾能力的無線通信技術【無線通信小百科】

1、什么是Mioty 在物聯網&#xff08;IoT&#xff09;快速發展的背景下&#xff0c;低功耗廣域網&#xff08;LPWAN&#xff09;技術成為連接海量設備的關鍵。LPWAN具有低功耗、低成本、廣覆蓋和強抗干擾能力等特點&#xff0c;使其特別適用于大規模、遠距離、低數據速率的IoT…

TCP三次握手、四次揮手+多線程并發處理

目錄 一、三次握手建立連接 1.1 標記位 1.2 三次握手的過程 二、四次揮手斷開連接 三、模擬服務器和客戶端收發數據 四、多線程并發處理 五、TCP粘包問題 5.1 什么是TCP粘包&#xff1f; 5.2 TCP粘包會有什么問題&#xff1f; 5.3 TCP粘包的解決方法&#xff1f; 一、三…

使用HunyuanVideo搭建文本生視頻大模型

1.摘要 HunyuanVideo是一個全新的開源視頻基礎模型&#xff0c;其視頻生成性能堪比領先的閉源模型&#xff0c;甚至超越它們。我們采用了多項模型學習的關鍵技術&#xff0c;通過有效的模型架構和數據集擴展策略&#xff0c;我們成功訓練了一個擁有超過 130 億個參數的視頻生成…

LabVIEW圓錐滾子視覺檢測系統

基于LabVIEW平臺的視覺檢測系統提高圓錐滾子內組件的生產質量和效率。通過集成高分辨率攝像頭和先進的圖像處理算法&#xff0c;系統能夠自動識別和分類產品缺陷&#xff0c;從而減少人工檢查需求&#xff0c;提高檢測的準確性和速度。 ?? ? 項目背景 隨著制造業對產品質…

mac 基于Docker安裝minio服務器

在 macOS 上基于 Docker 安裝 MinIO 是一個高效且靈活的方案&#xff0c;尤其適合本地開發或測試環境。以下是詳細的安裝與配置步驟&#xff0c;結合了最佳實踐和常見問題的解決方案&#xff1a; 一、安裝 Docker Desktop 下載安裝包 訪問 Docker 官網&#xff0c;下載適用于 …

EchoMimicV2 部署記錄

在這里插入代碼片# 虛擬環境配置 pip install pip -U pip install torch2.5.1 torchvision0.20.1 torchaudio2.5.1 xformers0.0.28.post3 --index-url https://download.pytorch.org/whl/cu124 pip install torchao --index-url https://download.pytorch.org/whl/nightly/cu1…

數據升降級:醫療數據的“時空穿梭“系統工程(分析與架構篇)

一、核心挑戰與量化分析 1. 版本演化困境的深度解析 (1) 格式斷層的結構化危機 數據轉換黑洞:某醫療信息平臺(2021-2023)統計顯示: 數據類型CDA R1→R2轉換失敗率R2→FHIR轉換失敗率關鍵失敗點診斷記錄28.4%19.7%ICD編碼版本沖突(18.7%)用藥記錄15.2%12.3%劑量單位標準化…

個人開發免費好用

聊一聊 現在輸入法非常多&#xff0c;有時候都不知道哪個更好用。 其實&#xff0c;只有多嘗試&#xff0c;才能找到適合自己的。 今天給大家分享一款輸入法&#xff0c;用起來比較順手&#xff0c;大家可以試試。 軟件介紹 BL輸入法 這是一款綠色純凈&#xff0c;安全放心…

Windows查看和修改IP,IP互相ping通

Windows系統 查看IP地址 winr 輸入cmd 打開終端使用 ipconfig 或 ipconfig -all 命令查看當前網絡 IPV4地址 Windows系統 修改IP地址 自動獲取IP&#xff08;DHCP&#xff09;&#xff1a; 打開 控制面板&#xff0c;點擊 網絡和Internet。點擊 網絡和共享中心。選擇 更改適配…

【IP101】圖像處理基礎:從零開始學習顏色操作(RGB、灰度化、二值化、HSV變換)

&#x1f3a8; 顏色操作詳解 &#x1f31f; 在圖像處理的世界里&#xff0c;顏色操作就像是一個魔術師的基本功。今天&#xff0c;讓我們一起來解鎖這些有趣又實用的"魔法"吧&#xff01; &#x1f4da; 目錄 通道替換 - RGB與BGR的"調包"游戲灰度化 - 讓…

windows系統搭建自己的ftp服務器,保姆級教程(用戶驗證+無驗證)

前言 最近在搭建環境時&#xff0c;我發現每次都需要在網上下載依賴包和軟件&#xff0c;這不僅耗時&#xff0c;而且有時還會遇到網絡不穩定的問題&#xff0c;導致下載速度慢或者中斷&#xff0c;實在不太方便。于是&#xff0c;我產生了搭建一個FTP服務器的想法。通過搭建FT…

藍橋杯 7. 晚會節目單

晚會節目單 原題目鏈接 題目描述 小明要組織一臺晚會&#xff0c;總共準備了 n 個節目。然而晚會時間有限&#xff0c;他只能從中選擇 m 個節目。 這 n 個節目是按照小明設想的順序給定的&#xff0c;順序不能改變。 小明發現觀眾對于晚會的喜歡程度與前幾個節目的好看程度…

JavaScript如何實現類型判斷?

判斷一個數據的類型&#xff0c;常用的方法有以下幾種&#xff1a; typeofinstanceofObject.prototype.toString.call(xxx) 下面來分別分析一下這三種方法各自的優缺點 typeof typeof的本意是用來判斷一個數據的數據類型&#xff0c;所以返回的也是一個數據類型。但是會遇到下…

哈希表筆記(四)Redis對比Java總結

文章目錄 一、基礎結構對比數據結構定義Java HashMapRedis字典 主要區別與設計思路 二、關鍵操作API對比初始化Java HashMapRedis字典 添加元素Java HashMapRedis字典 查找元素Java HashMapRedis字典 刪除元素Java HashMapRedis字典 擴容/重哈希操作Java HashMapRedis字典 三、…

docker拉取國內鏡像

1. 場景 最近整了一個tencent云服務器&#xff0c;想要玩一下docker&#xff0c;結果發現拉不下來&#xff0c;鏡像根本拉不下來。 2. 原因 1.云服務器無法訪問外網&#xff1b; 2. 國內的很多公有鏡像倉庫都被封了&#xff1b; 3. 推薦 https://zhuanlan.zhihu.com/p/713…

Codeforces Round 1008 (Div. 2) C

C 構造 題意&#xff1a;a的數據范圍大&#xff0c;b的數據范圍小&#xff0c;要求所有的a不同&#xff0c;考慮讓丟失的那個a最大即可。問題變成&#xff1a;構造一個最大的a[i] 思路&#xff1a;令a2是最大的,將a1,a3,a5....a2*n1&#xff0c;置為最大的b&#xff0c;將a4,a…

STM32 HAL庫實現USB虛擬串口

1. 引言 在嵌入式系統開發中&#xff0c;USB 虛擬串口是一種非常實用的功能。它允許 STM32 微控制器通過 USB 接口與計算機進行通信&#xff0c;就像使用傳統的串口一樣。這種方式不僅簡化了硬件設計&#xff0c;還提高了通信的靈活性和穩定性。STM32F407 系列微控制器具有強大…

JAVA EE_網絡原理_UDP與TCP

人海中未遇見時&#xff0c;我將獨自前行... ----------陳長生. 1.UDP協議 1.1.UDP協議端格式 UDP&#xff08;用戶數據報協議&#xff09;是由 源端口&#xff0c;目標端口&#xff0c;長度&#xff0c;校驗和&#xff0c;數據 5種結構組成。16位是UDP報文中字段的長度&#…

【免費】1992-2021年各省GDP數據/各省地區生產總值數據

1992-2021年各省GDP數據/各省地區生產總值數據 1、時間&#xff1a;1992-2021年 2、來源&#xff1a;國家統計局、統計年鑒 3、指標&#xff1a;GDP/地區生產總值 4、范圍&#xff1a;31省 5、指標說明:國內生產總值&#xff08;GDP&#xff09;是一個國家或地區在一定時期…