狠狠撸

狠狠撸Share a Scribd company logo
DEVOPS TOOL CHAIN
IMAGE REGISTRY
TROUBLESHOOTING AND BEST
PRACTICE Presented By
Duran Hsieh
Site Reliability Engineer
Duran Hsieh (謝政廷)
專長於開發測試、效能調教、DevOps 相關技術,過去曾擔任
技術顧問,提供國內外企業技術諮詢與數位轉型。目前同時為
Study4TW 社群核心成員、微軟最有價值專家、 Google
Developer Group Taichung 共同創辦人,曾積極參與技術社
群與經營技術部落格,曾獲得三次 IT 邦幫忙鐵人賽佳作與撰寫
<動手學 GitHub 現代人不能不知道的協同合作平台>書籍。
? Duran 技術冶煉廠 : https://dog0416.blogspot.com/
? Duran 速寫筆記: https://note.duranhsieh.com/
ABOUT ME
? DevOps Tool Chain
? Image Registry
? 第一個挑戰: Storage
? 第二個挑戰: Security
? 第三個挑戰: Performance
? 第四個挑戰: Operation & Reliability
? Best practices
IMAGE REGISTRY 管理實務
4
Presented By: Duran Hsieh
DevOps Tool Chain
? DevOps 基礎知識 (建設) 的集合,提供 DevOps Team 在開發生命週期內進行協作
? 一般來說,具自動化、可連續執行特性
? 可能來自不同供應商,可用於不同階段
? 工具鏈包含
? Planning
? Continuous integration
? Continuous delivery
? Operations
? Monitor
? Collaboration
? Feedback
5
Presented By: Duran Hsieh
DevOps Tool Chain
? All-in-one DevOps Tool Chain
? 完整解決方案
? 不容易與第三方工具整合 (無法整合既有工具)
? 適用於剛導入 DevOps 團隊
? 無法適應快速變化的市場
? Customizable DevOps toolchain
? 依據團隊的需求整合不同工具
? 這使得團隊可以將他們了解和喜愛的現有工具引入更廣泛的 DevOps 工具鏈中
? 使用 Jira 規劃工作流程、使用 GitHub 進行開發協作與使用 Kubernetes 設置隔離的
開發環境
? 額外的、工具整合、學習與維護負擔
? 可能需要不斷的切換視窗、登入多個位置,且難以共享資訊
6
Presented By: Duran Hsieh
DevOps Tool Chain : Microsoft Solution
考慮容易整合工具之 DevOps 服務
尤其是中小型團隊
善用工具讓團隊成員專注於開發、維運與交付
8
Presented By: Duran Hsieh
IMAGE REGISTRY
? 用於儲存和分享 Image 的集中儲存服務
? Docker Hub 是任何人皆可使用的 Public Registry,且為預設使用
? 雲端服務
? Amazon Elastic Container Registry (ECR)
? Azure Container Registry (ACR)
? Google Container Registry (GCR)
? 本機執行或企業內部建立 Private Registry
? Harbor
? JFrog Artifactory
? Nexus
? …
9
Presented By: Duran Hsieh
IMAGE REGISTRY
? Registry 與 Repository
? 在 Registry 內存放 Image 稱為 Repository
? 相同 Image 但不同版本放在相同的 Repository 內
Harbor 以 Project 方式隔離 Repos
以 Artifact 區分不同版本 Image
10
Presented By: Duran Hsieh
HARBOR
? CNCF Graduated project
? 開源且功能齊全
? 使用者管理功能 (支援多種驗證)
? 隔離環境 (Project 架構)
? Proxy Cache 與 Replication (支援多種 Registry)
? 保留策略與垃圾回收
? 支援 High Availability
? 支援安全掃描
? 支援 WebAPI
11
Presented By: Duran Hsieh
Azure Container Registry
? 受控服務 (Microsoft Entra ID)
? 支援巢狀命名空間,可跨多個群組共用
? 支援保留策略
? 支援快取
? 支援安全掃描
? 支援標籤、按清單摘要和儲存庫刪除
? 支援全域規模調
? 多重主機異地複寫
啟用單一登錄整
12
Presented By: Duran Hsieh
IMAGE REGISTRY
? 在軟體開發生命週期,你需要考慮這些 Image 該放在哪裡…
? 開發期間
? 開發時所需要的 Base Image
? 開發後所建置的 Image
? 測試與安全掃描階段的 Image
? 維運期間
? 地理區域
? K8S Cluster 使用的 Image
? 工具類型 Image
? 需定期從 Public Image Registry 拉取
? 安全的拉取 Image
? 建立緩存
? 組織內部釋出 Image
13
Presented By: Duran Hsieh
第一個挑戰: Storage
? Image Registry 管理最容易遇到容量不足問題
? 容量不足造成 Image Registry 無法正常運作,影響 CI/CD
? 即使容量充裕,過多 Image 也會造成效能問題
? 頻繁的 Pull/Push 操作
? Image Scan
? Delete Image
? 容量管理需注意
? 硬碟容量: df -h
? 資料數: df -i
一般來說,儲存空間顯示也並非實際占用容量
不同的 DOCKER IMAGE 可能有 SHARED BLOB
計算出來的容量可能大於實際硬碟佔用空間
15
Presented By: Duran Hsieh
第一個挑戰: Storage
? Registry 容量不足解決方法
? 緊急情況
? 確認是否能增加硬碟空間
? ACR 若要提升容量需開單請工程師協助 (非無上限)
? 視情況關閉對外服務,避免持續推送 Image
? 移除部分檔案 (如: Log)
? 移除 Image 並執行垃圾回收 (GC)
移除 IMAGE 與 GC 非常耗時耗資源
若非必要,強烈建議離峰時間執行
精密計算,會影響任何對 Image 的操作
17
Presented By: Duran Hsieh
第一個挑戰: Storage
? Registry 容量不足解決方法
? 平日維運
? 區分開發測試與正式環境使用 Registry
? 建立 Image 命名規則
? 開發測試除 Base Image 外,設定 Retention policy 定期刪除 (如保留30天)
? 正式區設定 Retention policy 定期刪除 (如保留最新5份或特定 Tag)
? 依情況設定保留規則
? 設定排程:離峰時間執行垃圾回收 (Garbage Collection)
? 設定監控與警告
? 設定容量限額
? Harbor 可以依據專案設定上限
18
Presented By: Duran Hsieh
第一個挑戰: Storage
? 多環境 Image Registry
? Dev & Test 環境保留策略為定期移除
? STG & Prod 環境為保留數量
? 可以透過 Pipeline 或 Replication Rule 作推送
Git Repos Pipeline Harbor - Dev
Harbor - Prod
Harbor – Test
Release
Pipeline
Harbor – STG
19
Presented By: Duran Hsieh
第二個挑戰: Security
? Image 弱點掃描
? 平日維運
? 特定環境與離峰時間掃描
? 設定 CVE 等級
? 設定特定區域處理 Image 弱點問題
? 定期更新 Base Image
IMAGE SCAN 會有效能與存取問題
建議離峰時間執行
掃描期間可能造成 Image 無法存取
21
Presented By: Duran Hsieh
第二個挑戰: Security
? 最佳 Image Scan 時機
? Dev 環境所使用 Base Image,於外部拉取/推送時掃描
? Test 環境 (前往 STG & Prod 前)
? 離峰時間於 Dev/Test 環境掃描
Git Repos Pipeline Harbor – Dev
離峰時間掃描
Harbor - Prod
Harbor – Test
推送時掃描
Release
Pipeline
Harbor – STG
Harbor
外部拉取時掃描區
22
Presented By: Duran Hsieh
第三個挑戰: Performance
? Performance Issue
? 開發階段
? 大量拉取與推送 image
? 維運階段
? 大量 Image 拉取時
? 大量佈署
? Cluster issue 造成大量 node not ready
? 安全掃描或特別操作
23
Presented By: Duran Hsieh
第三個挑戰: Performance
? 高可用性架構 - 1
? 主從架構
? Replication 方式同步 Image 至各終端 Harbor
? 終端 Harbor 以 Proxy Cache (連結) 方式取得 Image
? 多節點方式達到地理區域傳遞
主從架構
Docker Client
Docker Client
Docker Client
Asia
US
UK
透過 WEBAPI 建議批次或排程執行
頻繁資料存取易造成效能問題
善用 Image Registry 所提供的排程功能
(Scheduler/Job)
25
Presented By: Duran Hsieh
第三個挑戰: Performance
? 高可用性架構 - 1
? 雙主節點架構
? 透過 Replication 方式同步主節點
? 抽出 PostgreSQL, Redis 與 NFS
Docker Client
Request
Storage Storage
Replication
nginx
Postgresql
Redis
Storage
26
Presented By: Duran Hsieh
第四個挑戰: Operation & Reliability
? 開發維運建構隔離環境
? Base Image 以 Public 方式分享
? 不同團隊或區域只存取自己的 Image
? 隔離環境實作方式
? ACR: 群組命名與權限控管 (連結)
? Harbor: 提供多種驗證方式與機器人帳號 (連結)
27
Presented By: Duran Hsieh
第四個挑戰: Operation & Reliability
? 高可用性架構 - 3
? 雙主節點 + 區域節點架構
28
Presented By: Duran Hsieh
常見問題
? Harbor 啟動時模組不正確
? Harbor LDAP 錯誤字元導致權限問題
? Harbor GC 資料錯誤
? 資料庫 Index 毀損
29
Presented By: Duran Hsieh
Best Practices
? 初期即要定義產品版本,並呈現在 Image Name、Tag
? 有利於設定保留原則
? 有利於佈署設定
? 增加容量不是最好的解決方法,多個 Registry 架構才是最有效益
? 區分環境,經過安全掃描的 Image 才得以進入產品
? 移除與安全掃描需要在離峰時間進行
? 除了跨區域需要較近的 Registry,你應該考慮在各生產環境建立專屬 Registry
QUESTION & ANSWERS
THANK YOU FOR
WATCHING

More Related Content

DevOps Tool Chain - Image Registry Troubleshooting and Best practices

  • 1. DEVOPS TOOL CHAIN IMAGE REGISTRY TROUBLESHOOTING AND BEST PRACTICE Presented By Duran Hsieh Site Reliability Engineer
  • 2. Duran Hsieh (謝政廷) 專長於開發測試、效能調教、DevOps 相關技術,過去曾擔任 技術顧問,提供國內外企業技術諮詢與數位轉型。目前同時為 Study4TW 社群核心成員、微軟最有價值專家、 Google Developer Group Taichung 共同創辦人,曾積極參與技術社 群與經營技術部落格,曾獲得三次 IT 邦幫忙鐵人賽佳作與撰寫 <動手學 GitHub 現代人不能不知道的協同合作平台>書籍。 ? Duran 技術冶煉廠 : https://dog0416.blogspot.com/ ? Duran 速寫筆記: https://note.duranhsieh.com/ ABOUT ME
  • 3. ? DevOps Tool Chain ? Image Registry ? 第一個挑戰: Storage ? 第二個挑戰: Security ? 第三個挑戰: Performance ? 第四個挑戰: Operation & Reliability ? Best practices IMAGE REGISTRY 管理實務
  • 4. 4 Presented By: Duran Hsieh DevOps Tool Chain ? DevOps 基礎知識 (建設) 的集合,提供 DevOps Team 在開發生命週期內進行協作 ? 一般來說,具自動化、可連續執行特性 ? 可能來自不同供應商,可用於不同階段 ? 工具鏈包含 ? Planning ? Continuous integration ? Continuous delivery ? Operations ? Monitor ? Collaboration ? Feedback
  • 5. 5 Presented By: Duran Hsieh DevOps Tool Chain ? All-in-one DevOps Tool Chain ? 完整解決方案 ? 不容易與第三方工具整合 (無法整合既有工具) ? 適用於剛導入 DevOps 團隊 ? 無法適應快速變化的市場 ? Customizable DevOps toolchain ? 依據團隊的需求整合不同工具 ? 這使得團隊可以將他們了解和喜愛的現有工具引入更廣泛的 DevOps 工具鏈中 ? 使用 Jira 規劃工作流程、使用 GitHub 進行開發協作與使用 Kubernetes 設置隔離的 開發環境 ? 額外的、工具整合、學習與維護負擔 ? 可能需要不斷的切換視窗、登入多個位置,且難以共享資訊
  • 6. 6 Presented By: Duran Hsieh DevOps Tool Chain : Microsoft Solution
  • 8. 8 Presented By: Duran Hsieh IMAGE REGISTRY ? 用於儲存和分享 Image 的集中儲存服務 ? Docker Hub 是任何人皆可使用的 Public Registry,且為預設使用 ? 雲端服務 ? Amazon Elastic Container Registry (ECR) ? Azure Container Registry (ACR) ? Google Container Registry (GCR) ? 本機執行或企業內部建立 Private Registry ? Harbor ? JFrog Artifactory ? Nexus ? …
  • 9. 9 Presented By: Duran Hsieh IMAGE REGISTRY ? Registry 與 Repository ? 在 Registry 內存放 Image 稱為 Repository ? 相同 Image 但不同版本放在相同的 Repository 內 Harbor 以 Project 方式隔離 Repos 以 Artifact 區分不同版本 Image
  • 10. 10 Presented By: Duran Hsieh HARBOR ? CNCF Graduated project ? 開源且功能齊全 ? 使用者管理功能 (支援多種驗證) ? 隔離環境 (Project 架構) ? Proxy Cache 與 Replication (支援多種 Registry) ? 保留策略與垃圾回收 ? 支援 High Availability ? 支援安全掃描 ? 支援 WebAPI
  • 11. 11 Presented By: Duran Hsieh Azure Container Registry ? 受控服務 (Microsoft Entra ID) ? 支援巢狀命名空間,可跨多個群組共用 ? 支援保留策略 ? 支援快取 ? 支援安全掃描 ? 支援標籤、按清單摘要和儲存庫刪除 ? 支援全域規模調 ? 多重主機異地複寫 啟用單一登錄整
  • 12. 12 Presented By: Duran Hsieh IMAGE REGISTRY ? 在軟體開發生命週期,你需要考慮這些 Image 該放在哪裡… ? 開發期間 ? 開發時所需要的 Base Image ? 開發後所建置的 Image ? 測試與安全掃描階段的 Image ? 維運期間 ? 地理區域 ? K8S Cluster 使用的 Image ? 工具類型 Image ? 需定期從 Public Image Registry 拉取 ? 安全的拉取 Image ? 建立緩存 ? 組織內部釋出 Image
  • 13. 13 Presented By: Duran Hsieh 第一個挑戰: Storage ? Image Registry 管理最容易遇到容量不足問題 ? 容量不足造成 Image Registry 無法正常運作,影響 CI/CD ? 即使容量充裕,過多 Image 也會造成效能問題 ? 頻繁的 Pull/Push 操作 ? Image Scan ? Delete Image ? 容量管理需注意 ? 硬碟容量: df -h ? 資料數: df -i
  • 14. 一般來說,儲存空間顯示也並非實際占用容量 不同的 DOCKER IMAGE 可能有 SHARED BLOB 計算出來的容量可能大於實際硬碟佔用空間
  • 15. 15 Presented By: Duran Hsieh 第一個挑戰: Storage ? Registry 容量不足解決方法 ? 緊急情況 ? 確認是否能增加硬碟空間 ? ACR 若要提升容量需開單請工程師協助 (非無上限) ? 視情況關閉對外服務,避免持續推送 Image ? 移除部分檔案 (如: Log) ? 移除 Image 並執行垃圾回收 (GC)
  • 16. 移除 IMAGE 與 GC 非常耗時耗資源 若非必要,強烈建議離峰時間執行 精密計算,會影響任何對 Image 的操作
  • 17. 17 Presented By: Duran Hsieh 第一個挑戰: Storage ? Registry 容量不足解決方法 ? 平日維運 ? 區分開發測試與正式環境使用 Registry ? 建立 Image 命名規則 ? 開發測試除 Base Image 外,設定 Retention policy 定期刪除 (如保留30天) ? 正式區設定 Retention policy 定期刪除 (如保留最新5份或特定 Tag) ? 依情況設定保留規則 ? 設定排程:離峰時間執行垃圾回收 (Garbage Collection) ? 設定監控與警告 ? 設定容量限額 ? Harbor 可以依據專案設定上限
  • 18. 18 Presented By: Duran Hsieh 第一個挑戰: Storage ? 多環境 Image Registry ? Dev & Test 環境保留策略為定期移除 ? STG & Prod 環境為保留數量 ? 可以透過 Pipeline 或 Replication Rule 作推送 Git Repos Pipeline Harbor - Dev Harbor - Prod Harbor – Test Release Pipeline Harbor – STG
  • 19. 19 Presented By: Duran Hsieh 第二個挑戰: Security ? Image 弱點掃描 ? 平日維運 ? 特定環境與離峰時間掃描 ? 設定 CVE 等級 ? 設定特定區域處理 Image 弱點問題 ? 定期更新 Base Image
  • 21. 21 Presented By: Duran Hsieh 第二個挑戰: Security ? 最佳 Image Scan 時機 ? Dev 環境所使用 Base Image,於外部拉取/推送時掃描 ? Test 環境 (前往 STG & Prod 前) ? 離峰時間於 Dev/Test 環境掃描 Git Repos Pipeline Harbor – Dev 離峰時間掃描 Harbor - Prod Harbor – Test 推送時掃描 Release Pipeline Harbor – STG Harbor 外部拉取時掃描區
  • 22. 22 Presented By: Duran Hsieh 第三個挑戰: Performance ? Performance Issue ? 開發階段 ? 大量拉取與推送 image ? 維運階段 ? 大量 Image 拉取時 ? 大量佈署 ? Cluster issue 造成大量 node not ready ? 安全掃描或特別操作
  • 23. 23 Presented By: Duran Hsieh 第三個挑戰: Performance ? 高可用性架構 - 1 ? 主從架構 ? Replication 方式同步 Image 至各終端 Harbor ? 終端 Harbor 以 Proxy Cache (連結) 方式取得 Image ? 多節點方式達到地理區域傳遞 主從架構 Docker Client Docker Client Docker Client Asia US UK
  • 24. 透過 WEBAPI 建議批次或排程執行 頻繁資料存取易造成效能問題 善用 Image Registry 所提供的排程功能 (Scheduler/Job)
  • 25. 25 Presented By: Duran Hsieh 第三個挑戰: Performance ? 高可用性架構 - 1 ? 雙主節點架構 ? 透過 Replication 方式同步主節點 ? 抽出 PostgreSQL, Redis 與 NFS Docker Client Request Storage Storage Replication nginx Postgresql Redis Storage
  • 26. 26 Presented By: Duran Hsieh 第四個挑戰: Operation & Reliability ? 開發維運建構隔離環境 ? Base Image 以 Public 方式分享 ? 不同團隊或區域只存取自己的 Image ? 隔離環境實作方式 ? ACR: 群組命名與權限控管 (連結) ? Harbor: 提供多種驗證方式與機器人帳號 (連結)
  • 27. 27 Presented By: Duran Hsieh 第四個挑戰: Operation & Reliability ? 高可用性架構 - 3 ? 雙主節點 + 區域節點架構
  • 28. 28 Presented By: Duran Hsieh 常見問題 ? Harbor 啟動時模組不正確 ? Harbor LDAP 錯誤字元導致權限問題 ? Harbor GC 資料錯誤 ? 資料庫 Index 毀損
  • 29. 29 Presented By: Duran Hsieh Best Practices ? 初期即要定義產品版本,並呈現在 Image Name、Tag ? 有利於設定保留原則 ? 有利於佈署設定 ? 增加容量不是最好的解決方法,多個 Registry 架構才是最有效益 ? 區分環境,經過安全掃描的 Image 才得以進入產品 ? 移除與安全掃描需要在離峰時間進行 ? 除了跨區域需要較近的 Registry,你應該考慮在各生產環境建立專屬 Registry