共計 2917 個字符,預計需要花費 8 分鐘才能閱讀完成。
KubeSphere 容器平臺 2.1 的 Binary-to-Image 新功能怎么用,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
什么是 Binary-to-image
Binary-to-image(B2I)是 KubeSphere 容器平臺在 2.1.0 版本新增的功能,旨在幫助開發者和運維在項目打包成 WAR、JAR、Binary 這一類的制品后,快速將制品或二進制的 Package 打包成 Docker 鏡像,并發布到 DockerHub 或 Harbor 等鏡像倉庫中。并且支持以創建服務的形式,一鍵將制品生成鏡像推送到倉庫,并創建其部署(Deployment)和服務(Service)最終 自動發布到 Kubernetes 中。
Binary-to-image 特性
Binary-to-image(B2I)能夠在實際的項目快速部署上線、微服務改造的過程中,極大地賦能開發者和運維用戶。B2I 無需編寫一行 Dockerfile,降低學習成本的同時提升發布效率,使用戶能夠更好地專注在業務本身。
下圖簡述了 B2I 的業務實現流程,B2I 已將以下多個步驟工具化和流程化,因此只需要在一個表單中完成。
① 在 KubeSphere 創建 B2I 類型的服務,上傳制品或二進制包
② B2I 將在后臺創建 K8s Job、Deployment 和 Service
③ 將制品自動打包成 Docker 鏡像
④ 推送鏡像至 DockerHub 或 harbor
⑤ B2I Job 將在第二步創建的 Deloyment 中使用倉庫中的鏡像
⑥ 自動發布至 Kubernetes
說明:在上述流程中,B2I Job 還會在后臺執行狀態上報的功能
接下來用兩個示例介紹 B2I 的兩種使用方式,本文提供了示例制品 WAR、JAR、Binary 方便實操。
以下提供 5 個供測試使用的制品包,您也可以提交個人打包的測試項目到 KubeSphere 社區。
示例包示例項目(代碼倉庫)b2i-war-java8.warSpring-MVC-Showcaseb2i-war-java11.warSpringMVC5b2i-binaryDevOps-go-sampleb2i-jar-java11.jarjava-maven-exampleb2i-jar-java8.jardevops-java-sample 創建服務使用 B2I
第一個示例將使用創建服務的方式實現 B2I,實現上圖的 6 個步驟。在 2.1.0 版本中,創建服務的方式和用戶體驗相較于 2.0.x 版本變得更加方便和高效。
前提條件
B2I 屬于 DevOps 功能組件,因此使用前需開啟安裝 DevOps 組件。
創建密鑰
由于 B2I 的自動構建流程中需要將打包的 Docker 鏡像推送到鏡像倉庫,因此需要先創建一個鏡像倉庫的密鑰(Secret),以下創建一個 DockerHub 的密鑰,可參考 創建常用的幾類密鑰。
創建服務
在 應用負載 → 服務 下點擊 創建服務。
下拉至 通過制品構建新的服務,選擇 WAR,此處僅以一個 Spring-MVC-Showcase 的項目倉庫作為示例,將它的 WAR 包(b2i-war-java8)b2i-war-java8.war 上傳到 KubeSphere。
自定義名稱,如 b2i-war-java8,下一步構建設置中,默認無狀態服務,點擊將本地的制品 b2i-war-java8.war 上傳,構建環境選擇 tomcat85-java8-centos7:latest。
鏡像名稱為 DOCKERHUB_USERNAME / IMAGE NAME,tag 默認 latest,目標鏡像倉庫選擇已創建的 dockerhub-secret。
下一步容器設置,鏡像名稱和端口名稱可自定義,容器端口 與 服務端口 填寫 tomcat 默認的 8080。
由于是無狀態服務,因此跳過掛載存儲。
在高級設置中勾選外網訪問,并設置為 NodePort,點擊 創建。
驗證狀態
B2I 創建完成后,在 構建鏡像 下查看 B2I 的構建狀態,包括執行記錄(動態日志)、資源狀態、鏡像制品、環境變量和 Events。
查看構建鏡像
查看服務
查看部署狀態
查看任務執行狀態
若您習慣使用 kubectl 命令行,也可以通過 工具箱 → Web Kubectl 通過 kubectl get all -n PRJECT_NAME 來查看 b2i 具體創建了哪些資源。
web kubectl 查看資源
訪問服務
從服務的列表中,可以看到 NodePort 是 30571,因此在瀏覽器通過 $IP : $NodePort /spring-mvc-showcase/ 訪問 Spring-MVC-Showcase 服務(默認的訪問路徑 $IP : $NodePort 是 tomcat 服務)。
查看鏡像推送
登錄 DockerHub 賬號,查看 B2I 自動推送的 Docker 鏡像。
構建鏡像使用 B2I
第一個示例是以創建服務的方式完成了 B2I,最終將 Spring-MVC-Showcase 的 WAR 包打包成鏡像后部署到了 Kubernetes。而以 構建鏡像 的方式使用 B2I 更像一個基于制品自動生成鏡像的 快速工具,最終不會自動發布至 Kubernetes。
以下將使用一個基于 Go 語言 的 示例項目 打包的 Binary 制品 – b2i-binary(點擊下載),演示 B2I 的第二種使用方式 – 構建鏡像使用 B2I。
上傳制品包
1、在 構建鏡像 下點擊 創建構建鏡像,然后選擇 binary。
2、下一步,將下載的 b2i-binary 上傳至 KubeSphere,鏡像名稱可自定義 DOCKERHUB_USERNAME / IMAGE NAME,目標鏡像倉庫選擇已創建的 dockerhub-secret,點擊 創建。
驗證 B2I 狀態
查看任務
驗證鏡像推送
登錄 DockerHub 賬號,查看 B2I 自動推送的 Docker 鏡像。
總結
您可以根據需求使用上述兩種不同的方式來完成 B2I 的自動鏡像構建。一般來說,像 Java 語言的項目,可以通過 mvn package 命令打成 JAR/WAR 包,而像 C、C++ 和 Go 這類不需要運行時的語言,可以使用其語言自身的 build 命令打包成 binary 格式的制品,最終就可以通過 KubeSphere B2I 來快速將制品打包成 Docker 鏡像,并發布到鏡像倉庫和 Kubernetes 中。而像 Python、Nodejs 和 PHP 這類腳本式語言的項目,可以通過 KubeSphere Source-to-Image(S2I)完成類似 B2I 的自動構建與發布。
KubeSphere (https://github.com/kubesphere/kubesphere) 是一個開源的以應用為中心的容器管理平臺,支持部署在任何基礎設施之上,并提供簡單易用的 UI,極大減輕日常開發、測試、運維的復雜度,旨在解決 Kubernetes 本身存在的存儲、網絡、安全和易用性等痛點,幫助企業輕松應對敏捷開發與自動化監控運維、端到端應用交付、微服務治理、多租戶管理、多集群管理、服務與網絡管理、鏡像倉庫、AI 平臺、邊緣計算等業務場景。
看完上述內容,你們掌握 KubeSphere 容器平臺 2.1 的 Binary-to-Image 新功能怎么用的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注丸趣 TV 行業資訊頻道,感謝各位的閱讀!