最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Docker+K8s集成部署的實戰(zhàn)

 更新時間:2026年05月21日 10:15:54   作者:Mr.小海  
本文詳細介紹了Docker與Kubernetes在企業(yè)級生產(chǎn)環(huán)境中的集成部署實踐,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

在微服務和云原生普及的今天,Docker 的容器標準化能力與 Kubernetes 的大規(guī)模編排能力,已成為企業(yè)級部署的黃金組合。但從本地開發(fā)到生產(chǎn)落地,很多開發(fā)者會卡在 “集成配置”“資源優(yōu)化”“故障排查” 等關鍵環(huán)節(jié)。本文結合電商訂單系統(tǒng)的部署升級經(jīng)驗,從核心概念、集成要點到生產(chǎn)實戰(zhàn),一步步拆解 Docker 與 K8s 的協(xié)同邏輯,同時分享 5 個高頻踩坑案例及解決方案。

一、Docker 與 K8s 的核心關系:不是替代,而是互補

Docker 和 K8s 的定位截然不同,卻構成了容器化部署的完整鏈路,理解二者的分工是集成的基礎。

1.1 核心定位與職責劃分

工具核心能力核心價值
Docker容器打包、單機運行將應用及依賴打包為標準化鏡像,確保“一次構建,到處運行”,解決環(huán)境一致性問題
K8s集群編排、自動化管理對大規(guī)模容器進行部署、擴縮容、自愈、網(wǎng)絡調度,解決分布式環(huán)境下的運維復雜性問題

注意:K8s 1.24+ 版本已移除內置的 dockershim 組件,不再直接對接 Docker,但可通過 Docker 內置的 containerd 運行時實現(xiàn)集成——這是當前生產(chǎn)環(huán)境的主流方案,無需額外安裝獨立的 containerd。

1.2 關鍵概念對應關系

Docker 概念K8s 對應概念核心作用說明
鏡像(Image)鏡像(Image)K8s 通過鏡像拉取策略(Always/IfNotPresent/Never)從倉庫拉取鏡像創(chuàng)建容器
容器(Container)Pod 內的容器K8s 最小調度單元是 Pod,一個 Pod 可包含 1~N 個容器,共享網(wǎng)絡和存儲資源
Docker ComposeDeployment/StatefulSetCompose 適用于單機小規(guī)模編排,K8s 控制器實現(xiàn)集群級高可用編排
Docker NetworkCNI 插件 + ServiceDocker 僅支持單機網(wǎng)絡互通,K8s 通過 CNI(如 Calico)實現(xiàn)跨節(jié)點 Pod 通信,Service 提供固定訪問入口

二、Docker 與 K8s 集成的 4 個核心落地要點

集成的關鍵在于 “標準化”“適配性” ——Docker 鏡像需滿足 K8s 的拉取要求,K8s 配置需兼容 Docker 的運行特性,以下 4 個要點是落地必經(jīng)之路。

2.1 鏡像標準化:K8s 拉取成功的前提

鏡像的規(guī)范程度直接影響部署穩(wěn)定性,生產(chǎn)環(huán)境需重點關注 3 點:

(1)鏡像命名規(guī)范

必須遵循 [倉庫地址]:[端口]/[命名空間]/[鏡像名]:[標簽] 格式,示例:

harbor.example.com/apps/order-service:v1.2.3-8f7d6a5
  • 禁止使用 latest 標簽:避免版本漂移導致的部署不一致,建議用“版本號 + Git Commit ID”命名,便于追溯問題。
  • 私有倉庫前綴不可少:明確指定私有倉庫地址(如 Harbor),避免與公倉鏡像混淆。

(2)鏡像優(yōu)化技巧

通過多階段構建減小體積,降低拉取時間和存儲成本,以 Go 語言應用為例:

# 構建階段:使用完整編譯環(huán)境
FROM golang:1.21-alpine AS builder
WORKDIR /app
COPY . .
RUN go mod download && CGO_ENABLED=0 GOOS=linux go build -o order-service .

# 運行階段:使用輕量基礎鏡像
FROM alpine:3.18
RUN apk --no-cache add ca-certificates  # 解決HTTPS證書問題
WORKDIR /app
COPY --from=builder /app/order-service .
USER nobody  # 非root用戶運行,降低安全風險
EXPOSE 8080
CMD ["./order-service"]

優(yōu)化效果:鏡像體積可從 2G+ 壓縮至 80M 以內,同時移除冗余依賴,提升安全性。

(3)私有倉庫集成配置

K8s 拉取私有倉庫鏡像需配置認證信息,步驟如下:

  1. 創(chuàng)建鏡像拉取密鑰:
kubectl create secret docker-registry harbor-secret \
  --docker-server=harbor.example.com \
  --docker-username=admin \
  --docker-password=123456
  1. 在 Deployment 中引用密鑰:
spec:
  template:
    spec:
      imagePullSecrets:
        - name: harbor-secret  # 與創(chuàng)建的Secret名稱一致

2.2 容器運行時集成(K8s 1.24+ 重點)

通過 Docker 內置的 containerd 對接 K8s,無需額外部署獨立運行時,步驟如下:

  1. 安裝 Docker 后,生成 containerd 配置文件:
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
  1. 修改配置文件,適配 K8s 要求:
    • 將 Sandbox 鏡像改為國內源(避免拉取失敗):
      sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"
      
    • 啟用 CRI 接口(K8s 與 containerd 通信的標準接口)
  2. 重啟 containerd 并設置開機自啟:
systemctl restart containerd && systemctl enable containerd
  1. K8s 集群初始化時指定運行時:
kubeadm init --image-repository registry.aliyuncs.com/google_containers \
  --cri-socket unix:///run/containerd/containerd.sock \
  --pod-network-cidr=10.244.0.0/16

2.3 資源配置:Docker 限制與 K8s 配置的映射

Docker 的資源限制(如內存、CPU)需通過 K8s 的 resources 字段精準映射,避免容器超限被 Kill 或資源浪費:

Docker 限制方式K8s 對應配置說明
docker run --memory 1Glimits.memory: 1Gi容器最大可用內存,超限可能被 OOM Kill
docker run --cpus 1limits.cpu: 1000m容器最大可用 CPU(1000m=1 核)
docker run --restart alwaysK8s 自愈機制 + replicasDeployment 通過 replicas 指定副本數(shù),故障時自動重啟并重新調度

生產(chǎn)環(huán)境配置示例(訂單服務):

resources:
  requests:  # 最小資源需求(K8s調度依據(jù))
    cpu: 500m  # 0.5核
    memory: 512Mi
  limits:    # 最大資源限制
    cpu: 1000m # 1核
    memory: 1Gi
  • requests:確保 Pod 被調度到資源充足的節(jié)點,避免資源競爭;
  • limits:防止單個 Pod 占用過多資源,影響其他服務。

2.4 網(wǎng)絡集成:從 Docker 單機網(wǎng)絡到 K8s 跨節(jié)點通信

Docker 的單機網(wǎng)絡無法滿足分布式部署需求,K8s 通過 CNI 插件和 Service 實現(xiàn)網(wǎng)絡互通:

(1)CNI 插件選擇

生產(chǎn)環(huán)境優(yōu)先選擇 Calico(支持網(wǎng)絡策略、跨節(jié)點通信穩(wěn)定),安裝命令:

kubectl apply -f https://docs.projectcalico.org/v3.25/manifests/calico.yaml

安裝后,每個 Pod 會被分配獨立 IP,跨節(jié)點 Pod 可直接通信,無需額外配置端口映射。

(2)服務暴露:Ingress 替代 NodePort

Docker 的 -p 8080:80 端口映射,在 K8s 中需通過 Service+Ingress 實現(xiàn),生產(chǎn)環(huán)境禁止使用 NodePort(端口沖突風險高):

① 創(chuàng)建 ClusterIP 類型 Service(集群內訪問):

apiVersion: v1
kind: Service
metadata:
  name: order-service
spec:
  selector:
    app: order-service
  ports:
  - port: 8080
    targetPort: 8080
  type: ClusterIP

② 通過 Ingress 暴露對外訪問入口(以 NGINX Ingress 為例):

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: order-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: order.example.com  # 自定義域名
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: order-service
            port:
              number: 8080
  tls:  # 啟用HTTPS
  - hosts:
    - order.example.com
    secretName: order-tls-secret  # 存儲證書的Secret名稱

Ingress 支持域名路由、路徑轉發(fā)、TLS 加密,是生產(chǎn)環(huán)境對外暴露服務的標準方案。

三、生產(chǎn)環(huán)境實戰(zhàn):電商訂單系統(tǒng)從 Docker Compose 遷移到 K8s

以電商訂單系統(tǒng)為例,分享從單機 Docker Compose 到 K8s 集群部署的完整遷移過程及思考。

3.1 遷移背景與目標

(1)原始架構痛點

  • 3 臺物理機,用 Docker Compose 部署訂單服務、庫存服務、MySQL(單機)、Redis(單機);
  • 核心問題:容器故障需手動重啟、擴縮容效率低、主機目錄掛載導致數(shù)據(jù)易丟失、端口沖突頻繁。

(2)遷移目標

  • 高可用:服務可用性從 99.5% 提升至 99.99%,支持故障自愈;
  • 自動化:支持一鍵擴縮容、滾動更新、版本回滾;
  • 可追溯:鏡像版本與代碼提交綁定,部署過程可審計;
  • 資源優(yōu)化:提升節(jié)點 CPU/內存利用率,降低硬件成本。

3.2 核心遷移步驟

(1)鏡像重構:從 “能用” 到 “生產(chǎn)級”

原 Dockerfile 基于 Ubuntu,包含冗余工具(如 vim、gcc),鏡像體積達 2.3G,重構后:

  • 采用多階段構建,體積壓縮至 78M;
  • 敏感配置(如 MySQL 密碼)從鏡像中移除,通過 K8s Secret 掛載;
  • 鏡像標簽改為 v1.2.3-8f7d6a5(版本號 + Git Commit ID)。

(2)存儲方案升級:從 hostPath 到 PVC

原架構用 -v /data/logs:/app/logs 掛載主機目錄,節(jié)點故障后日志丟失,優(yōu)化方案:

  1. 部署 NFS 分布式存儲,提供共享存儲能力;
  2. 創(chuàng)建 PersistentVolume(PV)和 PersistentVolumeClaim(PVC):
# PV配置
apiVersion: v1
kind: PersistentVolume
metadata:
  name: order-logs-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  nfs:
    server: 192.168.1.100
    path: /nfs/order/logs
# PVC配置
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: order-service-logs-pvc
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Gi
  1. 在 Deployment 中引用 PVC:
volumeMounts:
- name: logs
  mountPath: /app/logs
volumes:
- name: logs
  persistentVolumeClaim:
    claimName: order-service-logs-pvc

(3)部署文件編寫:Docker Compose 轉 K8s 資源

原 Docker Compose 配置(訂單服務):

version: '3'
services:
  order-service:
    image: order-service:latest
    ports:
      - "8080:8080"
    volumes:
      - ./config:/app/config
      - /data/logs:/app/logs
    restart: always
    environment:
      - MYSQL_HOST=192.168.1.100
      - REDIS_HOST=192.168.1.101

重構為 K8s Deployment+Service+ConfigMap+Secret,完整配置如下:

# 配置文件存儲(ConfigMap)
apiVersion: v1
kind: ConfigMap
metadata:
  name: order-service-config
data:
  MYSQL_HOST: "mysql-service"  # 用Service名替代固定IP,實現(xiàn)服務發(fā)現(xiàn)
  REDIS_HOST: "redis-service"
  LOG_LEVEL: "info"
---
# 敏感信息存儲(Secret)
apiVersion: v1
kind: Secret
metadata:
  name: order-service-secret
type: Opaque
data:
  MYSQL_PASSWORD: "cGFzc3dvcmQxMjM="  # base64加密(echo -n "password123" | base64)
---
# 部署控制器(Deployment)
apiVersion: apps/v1
kind: Deployment
metadata:
  name: order-service
spec:
  replicas: 3  # 3副本確保高可用
  selector:
    matchLabels:
      app: order-service
  strategy:
    rollingUpdate:  # 滾動更新策略
      maxSurge: 1    # 最多可額外創(chuàng)建1個Pod
      maxUnavailable: 1  # 最多允許1個Pod不可用
  template:
    metadata:
      labels:
        app: order-service
    spec:
      imagePullSecrets:
        - name: harbor-secret
      containers:
      - name: order-service
        image: harbor.example.com/apps/order-service:v1.2.3-8f7d6a5
        ports:
        - containerPort: 8080
        resources:
          requests:
            cpu: 500m
            memory: 512Mi
          limits:
            cpu: 1000m
            memory: 1Gi
        env:
        - name: MYSQL_HOST
          valueFrom:
            configMapKeyRef:
              name: order-service-config
              key: MYSQL_HOST
        - name: MYSQL_PASSWORD
          valueFrom:
            secretKeyRef:
              name: order-service-secret
              key: MYSQL_PASSWORD
        volumeMounts:
        - name: logs
          mountPath: /app/logs
        readinessProbe:  # 就緒探針,確保Pod就緒后才接收流量
          httpGet:
            path: /health
            port: 8080
          initialDelaySeconds: 30
          periodSeconds: 10
      volumes:
      - name: logs
        persistentVolumeClaim:
          claimName: order-service-logs-pvc
---
# 服務訪問入口(Service)
apiVersion: v1
kind: Service
metadata:
  name: order-service
spec:
  selector:
    app: order-service
  ports:
  - port: 8080
    targetPort: 8080
  type: ClusterIP

(4)滾動更新與回滾配置

生產(chǎn)環(huán)境部署新版本時,需避免服務中斷,K8s 滾動更新機制可實現(xiàn)零停機部署:

  1. 觸發(fā)更新(修改鏡像版本):
kubectl set image deployment/order-service order-service=harbor.example.com/apps/order-service:v1.2.4-9a3b7c2
  1. 查看更新狀態(tài):
kubectl rollout status deployment/order-service
  1. 若新版本出現(xiàn)問題,快速回滾:
# 回滾到上一版本
kubectl rollout undo deployment/order-service

# 回滾到指定版本(先查看歷史版本)
kubectl rollout history deployment/order-service
kubectl rollout undo deployment/order-service --to-revision=2

總結

  1. 排版優(yōu)化核心:通過分級標題、表格、代碼塊格式化、重點內容加粗,讓文檔結構更清晰,關鍵信息更易查找;
  2. 格式規(guī)范:統(tǒng)一代碼塊語法高亮、標準化配置示例格式,符合技術文檔的閱讀習慣;
  3. 信息整合:將分散的踩坑案例整理為表格,對比展示問題、原因和解決方案,提升實用性。

到此這篇關于Docker+K8s集成部署的實戰(zhàn)的文章就介紹到這了,更多相關Docker+K8s集成部署內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • docker容器內要啟動兩個進程時Dockerfile的實現(xiàn)代碼

    docker容器內要啟動兩個進程時Dockerfile的實現(xiàn)代碼

    這篇文章主要介紹了docker容器內要啟動兩個進程時Dockerfile的實現(xiàn)代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • Docker配置文件daemon.json使用及說明

    Docker配置文件daemon.json使用及說明

    這篇文章主要介紹了Docker配置文件daemon.json使用及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-07-07
  • CentOS7徹底卸載Docker的完整流程

    CentOS7徹底卸載Docker的完整流程

    Docker 已成為現(xiàn)代云原生架構的核心組件,但在某些情況下,比如需要重新安裝 Docker、升級版本或切換到其他容器管理工具時,徹底卸載 Docker 并清理相關數(shù)據(jù)成為必要步驟,本文將針對 CentOS 7 操作系統(tǒng),詳細梳理并擴展 Docker 卸載的完整流程
    2025-04-04
  • Docker更換MySQL鏡像并確保數(shù)據(jù)完整性的詳細流程

    Docker更換MySQL鏡像并確保數(shù)據(jù)完整性的詳細流程

    這篇文章主要介紹了在更換MySQL鏡像之前備份數(shù)據(jù)的重要性,并詳細描述了使用mysqldump備份和恢復MySQL數(shù)據(jù)的步驟,同時,文章還解釋了如何停止并刪除舊的MySQL容器,需要的朋友可以參考下
    2025-05-05
  • Docker上部署FastApi的示例代碼

    Docker上部署FastApi的示例代碼

    本文主要介紹了Docker上部署FastApi的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • 使用Docker查看Elasticsearch錯誤日志的詳細步驟

    使用Docker查看Elasticsearch錯誤日志的詳細步驟

    在使用 Elasticsearch(簡稱 ES)的過程中,我們可能會遇到各種問題,為了快速定位和解決這些問題,查看錯誤日志是關鍵,本文將介紹如何使用 Docker 查看 Elasticsearch 的錯誤日志,并提供一些實用技巧,需要的朋友可以參考下
    2025-08-08
  • docker中使用mysql數(shù)據(jù)庫詳解(在局域網(wǎng)訪問)

    docker中使用mysql數(shù)據(jù)庫詳解(在局域網(wǎng)訪問)

    這篇文章主要給大家介紹了在docker中使用mysql數(shù)據(jù)庫,在局域網(wǎng)訪問的相關資料,文中通過圖文以及示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-06-06
  • 詳解Docker 容器互聯(lián)方法

    詳解Docker 容器互聯(lián)方法

    這篇文章主要介紹了詳解Docker 容器互聯(lián)方法,Docker容器都是獨立的,互相隔離的環(huán)境。然而,它們通常只有互相通信時才能發(fā)揮作用。
    2017-03-03
  • 基于VS Code的Docker調試環(huán)境搭建過程

    基于VS Code的Docker調試環(huán)境搭建過程

    本文詳細介紹了如何在VSCode中配置和使用Docker容器進行Autoware項目的開發(fā)調試,通過安裝Docker和VSCode插件,配置開發(fā)容器,掛載本地目錄,以及使用colcon編譯項目,使得開發(fā)環(huán)境更加高效和一致
    2026-02-02
  • 刪除Docker鏡像、容器和卷的教程指南

    刪除Docker鏡像、容器和卷的教程指南

    Docker 可以輕松地將應用程序和服務封裝在容器中,以便在任何地方運行,然而,在使用 Docker 的過程中,很容易積累大量未使用的鏡像、容器和數(shù)據(jù)卷,這些會使輸出雜亂,并占用磁盤空間,所以本文給大家介紹了如何刪除Docker鏡像、容器和卷,需要的朋友可以參考下
    2024-10-10

最新評論

靖州| 临潭县| 武乡县| 淮安市| 西峡县| 隆安县| 青冈县| 布尔津县| 文水县| 灵璧县| 香港| 德令哈市| 安康市| 梧州市| 通州区| 临邑县| 永靖县| 定兴县| 兴宁市| 城步| 尚志市| 德昌县| 泽普县| 陵川县| 宿迁市| 霞浦县| 龙州县| 壤塘县| 花莲市| 泗洪县| 灌云县| 韶关市| 万州区| 千阳县| 宝山区| 资溪县| 巩义市| 富顺县| 大英县| 湘潭县| 兰溪市|