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

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

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

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

一、Docker 與 K8s 的核心關(guān)系:不是替代,而是互補

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

1.1 核心定位與職責劃分

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

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

1.2 關(guān)鍵概念對應(yīng)關(guān)系

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

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

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

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

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

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

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

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

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

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

# 構(gòu)建階段:使用完整編譯環(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 .

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

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

(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 內(nèi)置的 containerd 對接 K8s,無需額外部署獨立運行時,步驟如下:

  1. 安裝 Docker 后,生成 containerd 配置文件:
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
  1. 修改配置文件,適配 K8s 要求:
    • 將 Sandbox 鏡像改為國內(nèi)源(避免拉取失敗):
      sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"
      
    • 啟用 CRI 接口(K8s 與 containerd 通信的標準接口)
  2. 重啟 containerd 并設(shè)置開機自啟:
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 的資源限制(如內(nèi)存、CPU)需通過 K8s 的 resources 字段精準映射,避免容器超限被 Kill 或資源浪費:

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

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

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

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

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

(1)CNI 插件選擇

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

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

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

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

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

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

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 支持域名路由、路徑轉(zhuǎn)發(fā)、TLS 加密,是生產(chǎn)環(huán)境對外暴露服務(wù)的標準方案。

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

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

3.1 遷移背景與目標

(1)原始架構(gòu)痛點

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

(2)遷移目標

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

3.2 核心遷移步驟

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

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

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

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

原架構(gòu)用 -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 轉(zhuǎn) K8s 資源

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

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

重構(gòu)為 K8s Deployment+Service+ConfigMap+Secret,完整配置如下:

# 配置文件存儲(ConfigMap)
apiVersion: v1
kind: ConfigMap
metadata:
  name: order-service-config
data:
  MYSQL_HOST: "mysql-service"  # 用Service名替代固定IP,實現(xiàn)服務(wù)發(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
---
# 服務(wù)訪問入口(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)境部署新版本時,需避免服務(wù)中斷,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

總結(jié)

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

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

相關(guān)文章

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

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

    這篇文章主要介紹了docker容器內(nèi)要啟動兩個進程時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)代云原生架構(gòu)的核心組件,但在某些情況下,比如需要重新安裝 Docker、升級版本或切換到其他容器管理工具時,徹底卸載 Docker 并清理相關(guān)數(shù)據(jù)成為必要步驟,本文將針對 CentOS 7 操作系統(tǒng),詳細梳理并擴展 Docker 卸載的完整流程
    2025-04-04
  • Docker更換MySQL鏡像并確保數(shù)據(jù)完整性的詳細流程

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

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

    Docker上部署FastApi的示例代碼

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

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

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

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

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

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

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

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

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

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

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

最新評論

延安市| 开鲁县| 柘荣县| 石棉县| 会泽县| 于田县| 大荔县| 潍坊市| 棋牌| 临沧市| 沙河市| 平顺县| 西充县| 栾川县| 南康市| 永福县| 东海县| 张家界市| 翁源县| 达拉特旗| 房产| 从江县| 吉安县| 北流市| 南城县| 夏邑县| 汶川县| 邢台市| 扶沟县| 廉江市| 招远市| 逊克县| 竹山县| 池州市| 富裕县| 巴东县| 长春市| 无极县| 大同县| 广德县| 藁城市|