哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

系統(tǒng)講解從Deployment到Service的完整數(shù)據(jù)流

馬哥Linux運維 ? 來源:馬哥Linux運維 ? 2026-04-22 14:52 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

背景與問題

在日常運維工作中,經(jīng)常遇到開發(fā)團隊反饋 Service 無法訪問、POD 無法啟動、Pod 之間通信異常等問題。這些問題的根因往往不在應(yīng)用層,而在于 Kubernetes 核心工作流的理解偏差。本文從一線運維視角出發(fā),系統(tǒng)講解從 Deployment 到 Service 的完整數(shù)據(jù)流,剖析每個環(huán)節(jié)的工作原理、常見故障點以及排障方法。

本文基于 Kubernetes 1.29 版本編寫,操作系統(tǒng)環(huán)境為 CentOS Stream 9 或 Ubuntu 24.04 LTS,容器運行時為 containerd 1.7.x。所有命令和配置均經(jīng)過實際環(huán)境驗證。

一、Kubernetes 核心資源對象解析

1.1 Workload 與 WorkloadResources 的區(qū)分

Kubernetes 將資源對象分為 Workload 和 WorkloadResources 兩大類別。Workload 是運行應(yīng)用的工作負(fù)載,WorkloadResources 則是支持工作負(fù)載運行的其他資源。

Workload 資源包括 Deployment、StatefulSet、DaemonSet、Job、CronJob 等。這些資源負(fù)責(zé)管理 Pod 的創(chuàng)建、調(diào)度和生命周期。

WorkloadResources 包括 Service、ConfigMap、Secret、PersistentVolumeClaim、ServiceAccount 等。這些資源為 Pod 提供網(wǎng)絡(luò)、存儲、配置等支撐能力。

理解這個分類是理解 K8s 工作流的基礎(chǔ)。很多新手混淆了這兩類資源的作用域,導(dǎo)致配置錯誤。

1.2 Deployment 的本質(zhì)與作用

Deployment 是 Kubernetes 最常用的 Workload 資源,其核心職責(zé)是管理 ReplicaSet,而 ReplicaSet 才是真正管理 Pod 的資源。

Deployment 的主要功能包括:

第一,聲明式更新。通過 spec.replicas 和 spec.template 定義期望狀態(tài),Kubernetes 控制器會自動將實際狀態(tài)調(diào)整為期望狀態(tài)。

第二,版本管理。每次 Deployment 更新都會創(chuàng)建一個新的 ReplicaSet,保留了版本回滾的能力。

第三,并行滾動更新。通過 strategy.rollingUpdate 參數(shù)控制更新過程中的最大不可用 Pod 數(shù)量和最大 Surplus Pod 數(shù)量。

查看一個標(biāo)準(zhǔn) Deployment 的 YAML 定義:

apiVersion:apps/v1
kind:Deployment
metadata:
name:nginx-deployment
namespace:default
labels:
 app:nginx
spec:
replicas:3
selector:
 matchLabels:
  app:nginx
strategy:
 type:RollingUpdate
 rollingUpdate:
  maxUnavailable:1
  maxSurge:1
template:
 metadata:
  labels:
   app:nginx
 spec:
  containers:
  -name:nginx
   image:nginx:1.27-alpine
   ports:
   -containerPort:80
   resources:
    limits:
     memory:"256Mi"
     cpu:"500m"
    requests:
     memory:"128Mi"
     cpu:"100m"
   livenessProbe:
    httpGet:
     path:/
     port:80
    initialDelaySeconds:10
    periodSeconds:10
   readinessProbe:
    httpGet:
     path:/
     port:80
    initialDelaySeconds:5
    periodSeconds:5

這個 YAML 包含了 Deployment 的核心配置:副本數(shù)、標(biāo)簽選擇器、更新策略、容器配置、健康檢查。

1.3 ReplicaSet 的控制循環(huán)機制

ReplicaSet 是 Kubernetes 控制器的核心實現(xiàn),其工作原理基于經(jīng)典的控制循環(huán)。

控制循環(huán)包含四個組件:觀測器(Observers)、解釋器(Interpreters)、分析器(Analyzers)、執(zhí)行器(Effectors)。

在 ReplicaSet 控制器中:

觀測器負(fù)責(zé)監(jiān)聽 Pod 資源的變化,包括 Pod 創(chuàng)建、刪除、狀態(tài)變更。

解釋器將觀測到的實際狀態(tài)與期望狀態(tài)進行對比。期望狀態(tài)來自 ReplicaSet 的 spec.replicas 字段,實際狀態(tài)是當(dāng)前運行的 Pod 數(shù)量。

分析器根據(jù)對比結(jié)果決定是否需要采取行動。如果實際 Pod 數(shù)小于期望數(shù)量,需要創(chuàng)建新 Pod;如果大于期望數(shù)量,需要刪除多余 Pod。

執(zhí)行器通過 API Server 創(chuàng)建或刪除 Pod 資源。

這個控制循環(huán)是 Kubernetes 自愈能力的基礎(chǔ)。當(dāng)某個節(jié)點上的 Pod 異常退出時,ReplicaSet 控制器會自動檢測到 Pod 數(shù)量減少,然后創(chuàng)建新的 Pod 來補充。

1.4 Pod 的調(diào)度流程詳解

Pod 的調(diào)度分為兩個階段:控制平面階段的調(diào)度決策,和節(jié)點階段的容器啟動。

1.4.1 控制平面調(diào)度

控制平面的調(diào)度器(kube-scheduler)負(fù)責(zé)為每個未調(diào)度的 Pod 選擇最佳節(jié)點。調(diào)度決策基于以下因素:

節(jié)點親和性(NodeAffinity):根據(jù)節(jié)點的標(biāo)簽選擇符合條件的節(jié)點。

Pod 親和性與反親和性(PodAffinity、PodAntiAffinity):控制 Pod 之間的部署關(guān)系,例如將同一個應(yīng)用的 Pod 分散到不同節(jié)點。

污點與容忍(Taints、Tolerations):節(jié)點可以通過污點拒絕特定 Pod,Pod 通過容忍來接受帶有污點的節(jié)點。

資源請求與限制(Requests、Limits):調(diào)度器會檢查節(jié)點的可用資源,確保 Pod 的資源請求能夠得到滿足。

優(yōu)先級與搶占(Priority、Preemption):高優(yōu)先級的 Pod 可以搶占低優(yōu)先級 Pod 的資源。

查看調(diào)度器配置:

# 查看調(diào)度器配置
kubectl get configmap kube-scheduler-config -n kube-system -o yaml

# 查看 Pod 的調(diào)度結(jié)果
kubectl describe pod  | grep -A 10"Events:"

# 查看節(jié)點的可用資源
kubectl describe node  | grep -A 5"Allocated resources"

1.4.2 節(jié)點階段容器啟動

調(diào)度決策完成后,節(jié)點上的 kubelet 負(fù)責(zé)容器的實際啟動。kubelet 通過 CRI(Container Runtime Interface)與容器運行時交互。

容器啟動流程:

首先,kubelet 通過 CRI API 調(diào)用容器運行時,拉取容器鏡像。

然后,容器運行時創(chuàng)建容器的文件系統(tǒng)、網(wǎng)絡(luò)、存儲等命名空間。

接著,kubelet 配置容器的資源限制和環(huán)境變量。

最后,啟動容器內(nèi)的主進程,并持續(xù)監(jiān)控其狀態(tài)。

1.5 Service 的網(wǎng)絡(luò)抽象

Service 是 Kubernetes 網(wǎng)絡(luò)模型的核心抽象,它為一組 Pod 提供穩(wěn)定的 IP 地址和 DNS 名稱。

1.5.1 Service 的四種類型

ClusterIP:集群內(nèi)部訪問,僅在集群內(nèi)部可達(dá),默認(rèn)類型。

NodePort:通過節(jié)點端口訪問,每個節(jié)點都會開放一個相同的端口,范圍 30000-32767。

LoadBalancer:通過云廠商的負(fù)載均衡器訪問,需要云廠商支持。

ExternalName:通過 CNAME 記錄將 Service 映射到外部域名。

apiVersion:v1
kind:Service
metadata:
name:nginx-service
namespace:default
spec:
type:ClusterIP
selector:
 app:nginx
ports:
-name:http
 protocol:TCP
 port:80
 targetPort:80

1.5.2 kube-proxy 與服務(wù)發(fā)現(xiàn)

Kubernetes 不直接實現(xiàn) Service 的網(wǎng)絡(luò)轉(zhuǎn)發(fā),而是通過每個節(jié)點上的 kube-proxy 組件實現(xiàn)。

kube-proxy 有三種工作模式:

iptables 模式:kube-proxy 通過 iptables 規(guī)則實現(xiàn)負(fù)載均衡。適用于節(jié)點數(shù)量不多的場景。

IPVS 模式:kube-proxy 通過 IPVS(IP Virtual Server)實現(xiàn)負(fù)載均衡。適用于大規(guī)模集群,性能更好。

nftables 模式:新一代模式,逐步替代 iptables。

查看 kube-proxy 的工作模式:

# 查看 kube-proxy 模式
kubectl get configmap kube-proxy-config -n kube-system -o yaml | grep mode

# 在節(jié)點上查看 iptables 規(guī)則
sudo iptables -t nat -L KUBE-SERVICES -n -v | head -20

# 查看 IPVS 規(guī)則
sudo ipvsadm -L -n | grep KUBE

二、從 Deployment 到 Service 的完整數(shù)據(jù)流

2.1 工作流的完整路徑

從 Deployment 到 Service 的完整數(shù)據(jù)流包含以下步驟:

第一步,用戶通過 kubectl 或 API 創(chuàng)建 Deployment 資源。

第二步,Deployment 控制器創(chuàng)建 ReplicaSet 資源。

第三步,ReplicaSet 控制器根據(jù) spec 創(chuàng)建 Pod 資源。

第四步,調(diào)度器為每個未調(diào)度的 Pod 選擇節(jié)點。

第五步,節(jié)點上的 kubelet 創(chuàng)建和啟動容器。

第六步,用戶創(chuàng)建 Service 資源,通過 selector 關(guān)聯(lián)到 Pod。

第七步,kube-proxy 配置網(wǎng)絡(luò)規(guī)則,實現(xiàn)服務(wù)訪問。

2.2 實際工作流演示

2.2.1 創(chuàng)建 Deployment

# 創(chuàng)建 Deployment
kubectl apply -f deployment.yaml

# 查看 Deployment 狀態(tài)
kubectl get deployment nginx-deployment
kubectl describe deployment nginx-deployment

# 查看 ReplicaSet
kubectl get replicaset
kubectl get rs -l app=nginx

# 查看 Pod
kubectl get pod -l app=nginx
kubectl get pods -o wide -l app=nginx

Deployment 創(chuàng)建后,ReplicaSet 控制器會立即創(chuàng)建對應(yīng)的 ReplicaSet。然后 ReplicaSet 控制器會創(chuàng)建 Pod 對象。調(diào)度器為每個 Pod 選擇節(jié)點后,kubelet 在對應(yīng)節(jié)點上啟動容器。

2.2.2 創(chuàng)建 Service

# 創(chuàng)建 Service
kubectl apply -f service.yaml

# 查看 Service
kubectl get svc nginx-service
kubectl describe svc nginx-service

# 查看 Endpoint
kubectl get endpoints nginx-service
kubectl describe endpoints nginx-service

Service 創(chuàng)建后,kube-proxy 會自動配置相應(yīng)的網(wǎng)絡(luò)規(guī)則。Endpoint 控制器會根據(jù) selector 自動創(chuàng)建 Endpoint 對象,關(guān)聯(lián)到匹配的 Pod。

2.3 核心配置項詳解

2.3.1 Selector 的作用機制

Selector 是連接 Deployment、ReplicaSet、Pod、Service 的關(guān)鍵紐帶。

Deployment 的 selector 用于標(biāo)識它管理的 ReplicaSet。

ReplicaSet 的 selector 必須匹配其模板中的 Pod 標(biāo)簽。

Service 的 selector 用于發(fā)現(xiàn)和關(guān)聯(lián)后端 Pod。

這三個 selector 的關(guān)系必須一致,否則會導(dǎo)致工作流斷裂。

常見錯誤案例:

# Deployment 的 selector
selector:
matchLabels:
 app:nginx

# 但是 Pod 模板的標(biāo)簽是
template:
metadata:
 labels:
  app:nginx-web# 標(biāo)簽不一致,導(dǎo)致無法管理

# Service 的 selector
selector:
app:nginx-proxy# 與 Pod 標(biāo)簽不匹配,導(dǎo)致無法關(guān)聯(lián)

2.3.2 端口配置的關(guān)鍵點

Service 的端口配置有幾個關(guān)鍵參數(shù):

port:Service 暴露的端口,其他 Pod 訪問 Service 時使用這個端口。

targetPort:后端 Pod 監(jiān)聽端口,流量轉(zhuǎn)發(fā)到這個端口。

nodePort:節(jié)點端口,外部訪問時使用。

protocol:協(xié)議類型,TCP 或 UDP。

ports:
-name:http
protocol:TCP
port:80   # Service 端口
targetPort:8080# 容器端口,如果省略則默認(rèn)等于 port
nodePort:30080# 節(jié)點端口,僅 NodePort 類型需要指定

三、滾動更新與回滾機制

3.1 滾動更新原理

滾動更新是 Deployment 的默認(rèn)更新策略,它通過逐步替換舊版 Pod 來實現(xiàn)零停機部署。

3.1.1 滾動更新參數(shù)

maxUnavailable:更新過程中允許不可用的最大 Pod 數(shù)量??梢允墙^對值或百分比。

maxSurge:更新過程中允許超過期望副本數(shù)的最大 Pod 數(shù)量??梢允墙^對值或百分比。

這兩個參數(shù)配合使用,實現(xiàn)更新過程中的服務(wù)連續(xù)性。

示例配置:

spec:
strategy:
 type:RollingUpdate
 rollingUpdate:
  maxUnavailable:25% # 最多25%的 Pod 不可用
  maxSurge:25%    # 最多25%的 Pod 超出期望數(shù)量

3.1.2 滾動更新過程

滾動更新的實際過程:

假設(shè) replicas=3,maxUnavailable=1,maxSurge=1。

初始狀態(tài):3 個舊版 Pod 正常運行。

第一步:創(chuàng)建一個新版 Pod,總數(shù)變?yōu)?4。

第二步:等待新版 Pod Ready 后,刪除一個舊版 Pod,總數(shù)變?yōu)?3。

第三步:再創(chuàng)建一個新版 Pod,總數(shù)變?yōu)?4。

第四步:等待新版 Pod Ready 后,再刪除一個舊版 Pod。

重復(fù)以上步驟,直到所有 Pod 都更新為新版。

查看滾動更新狀態(tài):

# 查看更新歷史
kubectl rollouthistorydeployment/nginx-deployment

# 查看特定版本的詳情
kubectl rollouthistorydeployment/nginx-deployment --revision=2

# 查看當(dāng)前滾動狀態(tài)
kubectl rollout status deployment/nginx-deployment

# 查看 Deployment 事件
kubectl describe deployment nginx-deployment | grep -A 10"Events:"

3.2 回滾操作

當(dāng)滾動更新出現(xiàn)問題時,可以快速回滾到之前的版本。

# 回滾到上一個版本
kubectl rollout undo deployment/nginx-deployment

# 回滾到指定版本
kubectl rollout undo deployment/nginx-deployment --to-revision=2

# 驗證回滾狀態(tài)
kubectl rollout status deployment/nginx-deployment
kubectl get pods -l app=nginx

回滾的本質(zhì)是創(chuàng)建一個新的 ReplicaSet,其配置與指定版本的 ReplicaSet 相同。

3.3 暫停與恢復(fù)更新

對于復(fù)雜的更新場景,可以暫停滾動更新,分步進行。

# 暫停更新
kubectl rollout pause deployment/nginx-deployment

# 執(zhí)行部分更新
kubectlsetimage deployment/nginx-deployment nginx=nginx:1.28-alpine

# 恢復(fù)更新
kubectl rollout resume deployment/nginx-deployment

四、網(wǎng)絡(luò)通信機制

4.1 容器間通信

同一節(jié)點上的容器通過 CNI(Container Network Interface)插件配置的網(wǎng)橋進行通信。

Kubernetes 使用 Pause 容器作為 Pod 的基礎(chǔ)設(shè)施容器,所有業(yè)務(wù)容器共享 Pause 容器的網(wǎng)絡(luò)命名空間。

查看節(jié)點網(wǎng)絡(luò)配置:

# 在節(jié)點上查看網(wǎng)橋
ip link showtypebridge

# 查看 cni0 網(wǎng)橋
ip addr show cni0

# 查看路由表
ip route

4.2 Pod 間通信

不同節(jié)點上的 Pod 通過 overlay 網(wǎng)絡(luò)進行通信。常用的 CNI 插件包括 Flannel、Calico、Cilium 等。

Flannel 使用 VXLAN 封裝數(shù)據(jù)包,通過 UDP 發(fā)送到目標(biāo)節(jié)點。

Calico 使用 BGP 協(xié)議直接路由數(shù)據(jù)包,性能更好。

Cilium 基于 eBPF 實現(xiàn),提供更精細(xì)的網(wǎng)絡(luò)控制和觀測能力。

4.3 Service 訪問原理

當(dāng)一個 Pod 訪問 Service 時,流量經(jīng)過以下路徑:

第一步,Pod 通過 DNS 解析 Service 名稱得到 ClusterIP。

第二步,Pod 將請求發(fā)送到 ClusterIP。

第三步,kube-proxy 攔截請求,根據(jù) iptables 或 IPVS 規(guī)則將目標(biāo) IP 替換為后端 Pod 的真實 IP。

第四步,請求被路由到后端 Pod。

查看 DNS 解析:

# 進入測試 Pod
kubectl run -it --rm debug --image=busybox:1.36 -- sh

# 查詢 DNS
nslookup kubernetes.default
nslookup nginx-service.default.svc.cluster.local

# 測試 Service 訪問
wget -qO- http://nginx-service:80

五、常見故障與排障

5.1 Pod 無法啟動

5.1.1 鏡像拉取失敗

這是最常見的 Pod 啟動失敗原因。

排查步驟:

# 查看 Pod 狀態(tài)
kubectl get pod  -o wide

# 查看詳細(xì)事件
kubectl describe pod  | grep -A 20"Events:"

# 常見錯誤信息:
# ErrImagePull:鏡像拉取失敗
# ImagePullBackOff:多次拉取失敗后進入回退狀態(tài)
# InvalidImageName:鏡像名稱格式錯誤

解決方案:

# 檢查鏡像是否存在
docker pull 

# 使用私有鏡像倉庫
kubectl create secret docker-registry regcred 
 --docker-server= 
 --docker-username= 
 --docker-password= 
 --docker-email=

# 在 Pod 中引用 secret
spec:
 imagePullSecrets:
 - name: regcred

5.1.2 資源不足

節(jié)點資源不足會導(dǎo)致 Pod 無法調(diào)度或啟動。

排查方法:

# 查看節(jié)點狀態(tài)
kubectl describe node 

# 查看資源分配
kubectl describe node  | grep -A 5"Allocated resources"

# 查看 Pod 的資源請求
kubectl get pod  -o jsonpath='{.spec.containers[*].resources}'

5.1.3 調(diào)度失敗

# 查看 Pod 事件中的調(diào)度錯誤
kubectl describe pod  | grep -A 5"Events:"

# 常見錯誤:
# FailedScheduling:調(diào)度失敗
# 0/3 nodes are available: 1 node(s) had taint {node.kubernetes.io/not-ready:...}
# 0/3 nodes are available: 1 node(s) didn't match Pod's node affinity/selector

5.2 Service 無法訪問

5.2.1 Endpoint 為空

# 查看 Service 和 Endpoint
kubectl get svc nginx-service
kubectl get endpoints nginx-service

# 如果 Endpoint 為空,檢查 selector 是否匹配
kubectl get pods -l app=nginx
kubectl describe svc nginx-service | grep Selector

常見原因:Deployment 的 selector 與 Service 的 selector 不匹配。

5.2.2 kube-proxy 異常

# 檢查 kube-proxy 日志
kubectl logs -n kube-system -l k8s-app=kube-proxy

# 檢查 kube-proxy 配置
kubectl get configmap kube-proxy-config -n kube-system -o yaml

# 重啟 kube-proxy(謹(jǐn)慎操作)
kubectl rollout restart daemonset kube-proxy -n kube-system

5.2.3 DNS 解析問題

# 檢查 CoreDNS 是否正常運行
kubectl get pod -n kube-system -l k8s-app=kube-dns

# 測試 DNS 解析
kubectlexec-it  -- nslookup nginx-service

# 檢查 /etc/resolv.conf 配置
kubectlexec-it  -- cat /etc/resolv.conf

5.3 網(wǎng)絡(luò)連接問題

5.3.1 跨節(jié)點通信故障

# 在源節(jié)點上測試
ping 

# 追蹤路由
traceroute 

# 檢查 CNI 插件狀態(tài)
ip link show | grep cni
cat /etc/cni/net.d/10-flannel.conflist

5.3.2 網(wǎng)絡(luò)策略問題

# 檢查是否配置了 NetworkPolicy
kubectlgetnetworkpolicy-oyaml

# 示例:允許特定命名空間的流量
apiVersion:networking.k8s.io/v1
kind:NetworkPolicy
metadata:
name:allow-frontend
spec:
podSelector:
 matchLabels:
  app:backend
policyTypes:
-Ingress
ingress:
-from:
 -namespaceSelector:
   matchLabels:
    name:frontend
 ports:
 -protocol:TCP
  port:80

5.4 滾動更新異常

5.4.1 更新卡住

# 查看 Deployment 狀態(tài)
kubectl get deployment nginx-deployment

# 查看 ReplicaSet 狀態(tài)
kubectl get rs -l app=nginx

# 檢查不可用的 Pod
kubectl get pod -l app=nginx | grep -v Running

# 強制回滾
kubectl rollout undo deployment/nginx-deployment

5.4.2 Pod 無法 Ready

# 檢查探針配置
kubectl describe pod  | grep -A 10"Conditions:"

# 測試健康檢查端點
kubectlexec-it  -- curl -k http://localhost:80/healthz

# 檢查探針日志
kubectl describe pod  | grep -A 5"Liveness"| grep -A 5"Reason:"

六、最佳實踐

6.1 資源配額與限制

為每個容器設(shè)置合理的資源請求和限制:

spec:
containers:
-name:nginx
 resources:
  requests:
   memory:"128Mi"
   cpu:"100m"
  limits:
   memory:"256Mi"
   cpu:"500m"

建議的做法:

requests 設(shè)置為實際平均使用量,確保調(diào)度器能夠做出正確決策。

limits 設(shè)置為峰值上限,防止單個容器耗盡節(jié)點資源。

內(nèi)存 limits 應(yīng)該與 requests 相近,避免內(nèi)存碎片化。

6.2 健康檢查配置

合理配置探針,避免過早或過晚檢測到故障:

spec:
containers:
-name:nginx
 livenessProbe:
  httpGet:
   path:/healthz
   port:80
  initialDelaySeconds:15 # 等待容器啟動完成
  periodSeconds:10    # 每10秒檢查一次
  failureThreshold:3   # 連續(xù)3次失敗才重啟
 readinessProbe:
  httpGet:
   path:/ready
   port:80
  initialDelaySeconds:5
  periodSeconds:5
  failureThreshold:1   # 一次失敗即移除

initialDelaySeconds 需要根據(jù)應(yīng)用啟動時間調(diào)整。過短會導(dǎo)致啟動過程中被殺死,過長會導(dǎo)致故障發(fā)現(xiàn)延遲。

6.3 標(biāo)簽管理策略

建立統(tǒng)一的標(biāo)簽管理規(guī)范:

metadata:
labels:
 app.kubernetes.io/name:nginx    # 應(yīng)用名稱
 app.kubernetes.io/instance:nginx-prod# 實例名稱
 app.kubernetes.io/version:"1.27"   # 版本號
 app.kubernetes.io/component:webserver# 組件類型
 app.kubernetes.io/part-of:frontend  # 所屬應(yīng)用
 app.kubernetes.io/managed-by:kubectl # 管理工具

使用標(biāo)簽進行環(huán)境隔離、版本管理、團隊劃分。

6.4 部署策略選擇

根據(jù)業(yè)務(wù)需求選擇合適的部署策略:

金絲雀發(fā)布:逐步將流量切換到新版本,降低發(fā)布風(fēng)險。

spec:
strategy:
 type:RollingUpdate
 rollingUpdate:
  maxUnavailable:0
  maxSurge:10%

藍(lán)綠部署:通過兩個完全相同的環(huán)境實現(xiàn)瞬時切換。

滾動更新:適用于無狀態(tài)服務(wù),默認(rèn)策略。

6.5 日志與監(jiān)控

配置集群級日志收集:

# 使用 Fluentd 收集日志
apiVersion:apps/v1
kind:DaemonSet
metadata:
name:fluentd-logging
namespace:kube-system
spec:
selector:
 matchLabels:
  k8s-app:fluentd-logging
template:
 spec:
  containers:
  -name:fluentd
   image:fluentd:v1.16
   volumeMounts:
   -name:varlog
    mountPath:/var/log
   -name:containers
    mountPath:/var/lib/docker/containers
  volumes:
  -name:varlog
   hostPath:
    path:/var/log
  -name:containers
   hostPath:
    path:/var/lib/docker/containers

七、性能與擴展

7.1 調(diào)度器性能調(diào)優(yōu)

大規(guī)模集群中,調(diào)度器可能成為瓶頸:

# kube-scheduler 配置
apiVersion:kubescheduler.config.k8s.io/v1beta3
kind:KubeSchedulerConfiguration
profiles:
-schedulerName:default-scheduler
percentageOfNodesToScore:50# 減少掃描節(jié)點數(shù)量
podInitialBackoffSeconds:10
podMaxBackoffSeconds:20

7.2 kube-proxy 性能優(yōu)化

IPVS 模式相比 iptables 有更好的性能:

# 查看當(dāng)前模式
kubectl get configmap kube-proxy-config -n kube-system -o yaml | grep mode

# 切換到 IPVS 模式
kubectl edit configmap kube-proxy-config -n kube-system

7.3 水平自動擴縮容

使用 HPA 實現(xiàn)自動擴縮容:

apiVersion:autoscaling/v2
kind:HorizontalPodAutoscaler
metadata:
name:nginx-hpa
spec:
scaleTargetRef:
 apiVersion:apps/v1
 kind:Deployment
 name:nginx-deployment
minReplicas:3
maxReplicas:10
metrics:
-type:Resource
 resource:
  name:cpu
  target:
   type:Utilization
   averageUtilization:70
-type:Resource
 resource:
  name:memory
  target:
   type:Utilization
   averageUtilization:80

八、安全配置

8.1 RBAC 權(quán)限控制

最小權(quán)限原則:

apiVersion:rbac.authorization.k8s.io/v1
kind:Role
metadata:
name:pod-reader
namespace:default
rules:
-apiGroups:[""]
resources:["pods"]
verbs:["get","list","watch"]

---
apiVersion:rbac.authorization.k8s.io/v1
kind:RoleBinding
metadata:
name:pod-reader-binding
subjects:
-kind:ServiceAccount
name:default
namespace:default
roleRef:
kind:Role
name:pod-reader
apiGroup:rbac.authorization.k8s.io

8.2 Pod 安全策略

使用 Pod Security Standards:

apiVersion:v1
kind:Namespace
metadata:
name:production
labels:
 pod-security.kubernetes.io/enforce:restricted
 pod-security.kubernetes.io/audit:restricted
 pod-security.kubernetes.io/warn:restricted

總結(jié)

從 Deployment 到 Service 的工作流是 Kubernetes 最核心的運維主線。理解 Deployment 的聲明式更新機制、ReplicaSet 的控制循環(huán)、Pod 的調(diào)度與啟動過程、Service 的網(wǎng)絡(luò)抽象,是解決日常問題的理論基礎(chǔ)。

實際排障中,應(yīng)該按照數(shù)據(jù)流順序逐層排查:先看資源狀態(tài)是否達(dá)到期望,再看調(diào)度是否成功,然后看容器是否正常啟動,最后看網(wǎng)絡(luò)是否連通。每個環(huán)節(jié)都有對應(yīng)的 kubectl 命令和節(jié)點工具可以使用。

配置層面,資源限制要合理、健康檢查要準(zhǔn)確、標(biāo)簽管理要規(guī)范,這些最佳實踐能夠顯著減少生產(chǎn)環(huán)境中的故障發(fā)生概率。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    7433

    瀏覽量

    129602
  • Service
    +關(guān)注

    關(guān)注

    0

    文章

    32

    瀏覽量

    14371
  • kubernetes
    +關(guān)注

    關(guān)注

    0

    文章

    275

    瀏覽量

    9530

原文標(biāo)題:從 Deployment 到 Service,K8s 最核心的工作流其實沒那么玄

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    大眾數(shù)據(jù)流分析

    、3.0發(fā)動機數(shù)據(jù)流定義與解釋別克君威2.0發(fā)動機數(shù)據(jù)流定義與解釋凱越數(shù)據(jù)流列表凱越發(fā)動機數(shù)據(jù)流定義賽歐數(shù)據(jù)流列表賽歐
    發(fā)表于 06-15 12:28

    大眾防盜數(shù)據(jù)流

    汽車防盜數(shù)據(jù)流
    發(fā)表于 08-31 16:23

    研究labview的數(shù)據(jù)流

    我在NI上下載了labview一個程序,運行起來還有點小問題,我想運行 看看他的數(shù)據(jù)流,深入的研究下,哪位大神能指導(dǎo)下,怎么增加個仿真信號 和輸出采集,這樣能清楚的看到其整個數(shù)據(jù)流的過程,謝謝~
    發(fā)表于 12-31 10:40

    LabVIEW中的數(shù)據(jù)流編程基礎(chǔ)

    ?!  D1顯示了一個數(shù)據(jù)流編程的范例,程序框圖中兩個數(shù)字相加,然后結(jié)果中減去50.00。 在這個范例中,程序框圖左向右執(zhí)行,這并非因為對象的放置順序,而是因為“減”函數(shù)必須在“加”函數(shù)執(zhí)行完,并將
    發(fā)表于 11-20 10:47

    mqtt怎么上傳數(shù)據(jù)指定主題?如何獲取數(shù)據(jù)流信息?

    OneNET初始化函數(shù)mqtt怎么上傳數(shù)據(jù)指定主題如何獲取數(shù)據(jù)流信息?設(shè)備管理
    發(fā)表于 03-30 07:50

    關(guān)于高速數(shù)據(jù)流盤處理技術(shù)看完你就懂了

    本文討論了支持高速數(shù)據(jù)流處理的技術(shù)、最大化系統(tǒng)處理性能的應(yīng)用設(shè)計和在數(shù)據(jù)流導(dǎo)入磁盤與數(shù)據(jù)流導(dǎo)入存儲器應(yīng)用中可獲得的
    發(fā)表于 04-29 06:25

    基于數(shù)據(jù)流的Java字節(jié)碼分析

    本文基于數(shù)據(jù)流框架理論,提出了如何將數(shù)據(jù)流分析方法應(yīng)用于JAVA 字節(jié)碼中,通過建立數(shù)據(jù)流與半格、數(shù)據(jù)流和函數(shù)調(diào)用圖的關(guān)系,從而對類型信息進行分析。實驗表明該
    發(fā)表于 12-25 13:22 ?9次下載

    網(wǎng)絡(luò)數(shù)據(jù)流存儲算法分析與實現(xiàn)

    針對網(wǎng)絡(luò)數(shù)據(jù)流存儲的瓶頸問題,提出了一種網(wǎng)絡(luò)數(shù)據(jù)流存儲算法分析與實現(xiàn)方法,仿真結(jié)果表明,模型能顯著提高網(wǎng)絡(luò)數(shù)據(jù)流的實時存儲能力
    發(fā)表于 05-26 15:57 ?21次下載
    網(wǎng)絡(luò)<b class='flag-5'>數(shù)據(jù)流</b>存儲算法分析與實現(xiàn)

    完整數(shù)據(jù)采集系統(tǒng)的硬件的構(gòu)建方法

    本文詳細(xì)介紹了完整數(shù)據(jù)采集系統(tǒng)的硬件的構(gòu)建方法。
    發(fā)表于 11-15 14:35 ?20次下載
    <b class='flag-5'>完整數(shù)據(jù)</b>采集<b class='flag-5'>系統(tǒng)</b>的硬件的構(gòu)建方法

    基于FPGA芯片的數(shù)據(jù)流結(jié)構(gòu)分析

    的兼容性。 這里詳細(xì)介紹了Virtex 系列FPGA 芯片的數(shù)據(jù)流大小及結(jié)構(gòu)。Virtex支持一些新的非常強大的配置模式,包括部分重新配置,這種配置機制被設(shè)計高級應(yīng)用中,以便通過芯片的配置接口能夠訪問及操作片內(nèi)數(shù)據(jù)。但想要配置
    發(fā)表于 11-18 11:37 ?3048次閱讀

    數(shù)據(jù)流是什么

    數(shù)據(jù)流最初是通信領(lǐng)域使用的概念,代表傳輸中所使用的信息的數(shù)字編碼信號序列。然而,我們所提到的數(shù)據(jù)流概念與此不同。這個概念最初在1998年由Henzinger在文獻87中提出,他將數(shù)據(jù)流定義為“只能以事先規(guī)定好的順序被讀取一次的
    的頭像 發(fā)表于 02-27 15:25 ?8165次閱讀

    數(shù)據(jù)流頻繁模式挖掘的詳細(xì)資料說明

    模式集合的完整程度進行分類,數(shù)據(jù)流中頻繁模式分為全集模式和壓縮模式。壓縮模式主要包括閉合模式、最大模式.top-k 模式以及三者的組合模式。不同之處是閉合模式是無損壓縮的,而其他模式是有損壓縮的。為了得到有趣的頻繁模
    發(fā)表于 03-27 14:49 ?2次下載
    <b class='flag-5'>數(shù)據(jù)流</b>頻繁模式挖掘的詳細(xì)資料說明

    MSi001完整數(shù)據(jù)手冊

    MSi001完整數(shù)據(jù)手冊,含電氣特性、信號波形等。
    發(fā)表于 03-09 15:14 ?88次下載

    控制數(shù)據(jù)流的區(qū)別

    控制數(shù)據(jù)流的區(qū)別? 在計算機科學(xué)中,控制數(shù)據(jù)流是兩個非常重要的概念。雖然它們經(jīng)常一起使用,但它們具有非常不同的含義。本文將討論控制
    的頭像 發(fā)表于 09-13 11:17 ?8153次閱讀

    EsDA科普 | AWFlow數(shù)據(jù)流圖開發(fā):讓嵌入式開發(fā)像搭積木一樣簡單

    (DataFlowDiagram)是一種圖形化表示系統(tǒng)數(shù)據(jù)流動與處理過程的方式。它能幫助開發(fā)者直觀理解數(shù)據(jù)輸入輸出的
    的頭像 發(fā)表于 03-27 11:42 ?162次閱讀
    EsDA科普 | AWFlow<b class='flag-5'>數(shù)據(jù)流</b>圖開發(fā):讓嵌入式開發(fā)像搭積木一樣簡單
    嫩江县| 施甸县| 东乡族自治县| 平远县| 凭祥市| 大渡口区| 天柱县| 北流市| 济宁市| 长垣县| 太仆寺旗| 葵青区| 韶关市| 石楼县| 富蕴县| 东安县| 铁岭县| 简阳市| 福清市| 广河县| 岳阳市| 定兴县| 资源县| 化德县| 儋州市| 元氏县| 临澧县| 临漳县| 莱西市| 乃东县| 新巴尔虎左旗| 北宁市| 临颍县| 湟中县| 额济纳旗| 阳西县| 金秀| 呼玛县| 贵阳市| 高邑县| 大庆市|