用Helm部署Kubernetes應用,支持多環境部署與版本回滾

来源:https://www.cnblogs.com/larrydpk/archive/2020/07/09/13276513.html
-Advertisement-
Play Games

1 前言 Helm是優秀的基於Kubernetes的包管理器。利用Helm,可以快速安裝常用的Kubernetes應用,可以針對同一個應用快速部署多套環境,還可以實現運維人員與開發人員的職責分離。現在讓我們安裝並體現一下,如何通過Helm安裝MongoDB吧。 Kubernetes環境搭建可參考:M ...


1 前言

Helm是優秀的基於Kubernetes的包管理器。利用Helm,可以快速安裝常用的Kubernetes應用,可以針對同一個應用快速部署多套環境,還可以實現運維人員與開發人員的職責分離。現在讓我們安裝並體現一下,如何通過Helm安裝MongoDB吧。

Kubernetes環境搭建可參考:Mac上使用Docker Desktop啟動Kubernetes,踩坑後終於搞掂

2 Helm相關概念

包管理是一種復用理念,HelmKubernetes的關係,就像是yumCentOSpippythonnpmJavaScriptHelm的作用有以下幾點:

  • 快速安裝常用應用:許多大公司都有helm倉庫,為我們提供了許多優秀的應用,可以直接拉取安裝,如快速部署Redis集群、安裝Jenkins等。
  • 多環境部署:通常我們需要多套環境,如開發環境、測試環境、生產環境等,helm可以通過模板+變數的形式實現快速部署;
  • 運維與開發隔離:運維人員管理k8s資源,寫部署模板及預設配置;開發人員只需要提供少量配置即可,把精力專註在業務開發上。

在使用helm之前,以下概念應該要搞懂:

  • helm客戶端:安裝在能連上kubernetes集群的機器都行,用於安裝、卸載應用等。
  • tiller:這是helm的服務端,部署在kubernetes集群中。客戶端發請求給TillerTiller再提交給kubernetes。在helm3已經不再需要tiller了,所以建議使用v3版本的helm
  • chart:一個helm的軟體包,採用TAR格式打包,其實就是一堆用來定義kubernetes資源的YAML文件的集合。
  • Repository:倉庫,存放Chart的地方,helm可以同時管理多個Repository,非常方便。
  • Release:使用helm部署在kubernetes的應用集叫Release,它是以label的方式來標記的。

3 安裝並使用

3.1 安裝helm

這裡安裝helm v3,原因已經講過,這樣可以省去安裝tiller。通過直接從GitHub下載安裝的方式,地址為:https://github.com/helm/helm/releases

下載解壓後,添加環境變數到.bash_profile即可。

export HELM_HOME=/Users/pkslow/Software/helm
export PATH=$PATH:$HELM_HOME

測試一下命令:

$ helm version
version.BuildInfo{Version:"v3.2.4", GitCommit:"0ad800ef43d3b826f31a5ad8dfbb4fe05d143688", GitTreeState:"clean", GoVersion:"go1.13.12"}

3.2 倉庫管理

列出已經配置的倉庫(我配置了阿裡和微軟的庫):

$ helm repo ls
NAME  	URL                                                   
stable	https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
azure 	http://mirror.azure.cn/kubernetes/charts

新增倉庫:

$ helm repo add bitnami https://charts.bitnami.com/bitnami
"bitnami" has been added to your repositories

刪除倉庫:

$ helm repo remove bitnami
"bitnami" has been removed from your repositories

更新倉庫包信息到本地:

$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "stable" chart repository
...Successfully got an update from the "azure" chart repository
Update Complete. ⎈ Happy Helming!⎈ 

3.3 安裝MongoDB

查看有什麼MongoDB相關的包:

$ helm search repo mongo
NAME                             	CHART VERSION	APP VERSION	DESCRIPTION                                       
azure/mongodb                    	7.8.10       	4.2.4      	DEPRECATED NoSQL document-oriented database tha...
azure/mongodb-replicaset         	3.16.1       	3.6        	NoSQL document-oriented database that stores JS...
azure/prometheus-mongodb-exporter	2.5.0        	v0.10.0    	A Prometheus exporter for MongoDB metrics         
stable/mongodb                   	0.4.27       	3.7.1      	NoSQL document-oriented database that stores JS...
stable/mongodb-replicaset        	2.3.1        	3.6        	NoSQL document-oriented database that stores JS...
azure/unifi                      	0.10.0       	5.12.35    	Ubiquiti Network's Unifi Controller               

指定Chart安裝MongoDB

$ helm install release101 azure/mongodb

其中release101Release的名字,可按自己需求指定。查看Release狀態:

$ helm ls
$ helm status release101

查看Dashboard如下,已經安裝成功:

3.4 卸載重裝

預設它的Service類型是ClusterIP,只能供kubernetes使用,我們將它刪除:

$ helm delete release101
release "release101" uninstalled

從倉庫下載Chart到本地:

$ helm fetch azure/mongodb

解壓Chart的壓縮文件:

$ tar zxvf ./mongodb-7.8.10.tgz

目錄結構如下:

  • Chart.yaml文件:用於描述Chart的基本信息,如名稱、版本等;

  • templates目錄:部署文件模板目錄;

  • values.yaml文件:預設配置文件。

我們修改一下values.yaml文件,再重新安裝:

修改Service類型為NodePort,並配置埠:

service:
  annotations: {}
  type: NodePort
  port: 27017
  nodePort: 30018

指定目錄安裝:

$ helm install pkslow1 ./mongodb

安裝完成後,會提示如何獲取MongoDB的用戶名和密碼,其中用戶名為root,鑒權庫為admin,密碼通過以下命令獲取(會提供命令):

$ kubectl get secret --namespace default pkslow1-mongodb -o jsonpath="{.data.mongodb-root-password}" | base64 --decode

獲取之後,就可以通過Robo3T連接資料庫了:

4 玩點新花樣

4.1 更新變數

複製values.yamlvalues-pkslow.yaml,修改一下埠為30028,執行以下命令:

$ helm upgrade pkslow1 ./mongodb --values ./mongodb/values-pkslow.yaml

只是更新了埠,用戶名和密碼沒有變,改了一下埠便可以連接。

查看定義了哪些變數:

$ helm get values pkslow1

4.2 部署一個新環境

同樣準備一份yaml文件:values-pkslow-uat.yaml,修改想要的參數後,執行以下命令:

$ helm install pkslow-uat ./mongodb --values ./mongodb/values-pkslow-uat.yaml

查看列表:

$ helm ls
NAME      	NAMESPACE	REVISION	UPDATED                             	STATUS  	CHART         	APP VERSION
pkslow-uat	default  	1       	2020-07-09 16:57:32.971523 +0800 CST	deployed	mongodb-7.8.10	4.2.4      
pkslow1   	default  	2       	2020-07-09 16:45:41.217333 +0800 CST	deployed	mongodb-7.8.10	4.2.4   

這樣就有兩個環境了,其它一個環境還有兩個版本,可以回滾。

4.3 版本回滾

查看歷史版本:

$ helm history pkslow1
REVISION	UPDATED                 	STATUS    	CHART         	APP VERSION	DESCRIPTION     
1       	Thu Jul  9 01:14:09 2020	superseded	mongodb-7.8.10	4.2.4      	Install complete
2       	Thu Jul  9 16:45:41 2020	deployed  	mongodb-7.8.10	4.2.4      	Upgrade complete

回滾到版本1

$ helm rollback pkslow1 1
Rollback was a success! Happy Helming!

再查看一下版本:

$ helm history pkslow1
REVISION	UPDATED                 	STATUS    	CHART         	APP VERSION	DESCRIPTION     
1       	Thu Jul  9 01:14:09 2020	superseded	mongodb-7.8.10	4.2.4      	Install complete
2       	Thu Jul  9 16:45:41 2020	superseded	mongodb-7.8.10	4.2.4      	Upgrade complete
3       	Thu Jul  9 17:06:49 2020	deployed  	mongodb-7.8.10	4.2.4      	Rollback to 1 

5 總結

一句話,helm就是一個方便部署的工具,沒有它一樣可以,有它就會更方便,真香!


歡迎訪問南瓜慢說 www.pkslow.com獲取更多精彩文章!

歡迎關註微信公眾號<南瓜慢說>,將持續為你更新...

多讀書,多分享;多寫作,多整理。

歡迎大家關註、轉發、在看、點贊一波四連。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 九九乘法表 中文名 產生年代 別稱 最早見於 九九乘法表 春秋戰國 九九歌 《演算法大成》 /** * 九九乘法表 */ public class MultiplicationTable { public static void main(String[] args) { // 定義第一層for語句循 ...
  • pip使用 最近在學人工智慧,需要用到pip,但是當我打開時,發現出現了一系列錯誤 Unknown or unsupported command 'install' 又或者是 Did not provide a command 但是出現了這種情況後,該怎麼辦呢 在經過N次折騰之後,執行了下where ...
  • 1. 按位運算符 2. 按位運算圖解 3. 按位右移圖解 4. 按位與、按位或圖解 5. 按位異或、按位取反圖解 6. 二進位正負數轉換 7. 位運算符總結 進位轉換: 十六位數對應位置的表示方法 八進位轉二進位 十進位轉二進位 十六進位轉二進位 二進位轉八進位 二進位轉十進位 二進位轉十六進位 十 ...
  • 賦值運算符分類 基本賦值運算符:=(支持連續賦值) 擴展賦值運算符:+=,-=,*=,/=,%= 1 short s = 3; 2 s = s + 2; 3 s+=2; 上述代碼第2行和第3行有什麼區別?第2行:變數s為short類型,2預設為int類型,兩者相加後賦值給short類型的變數s時,會 ...
  • @ 前言 前面幾篇文章分析了Mybatis的核心原理,但模塊較多,沒有一一分析,更多的需要讀者自己下來研究。不過Mybatis的插件擴展機制還是非常重要的,像PageHelper就是一個擴展插件,熟悉其擴展原理,才能更好的針對我們的業務作出更合適的擴展。另外,現在Mybatis都是和Spring/S ...
  • 本文源碼:GitHub·點這裡 || GitEE·點這裡 一、分散式事務簡介 1、轉賬經典案例 跨地區和機構的轉賬的業務在實際生活中非常常見,基礎流程如下: 賬戶01通過一系列服務和支付的流程,把錢轉入賬戶02,在這一過程中,如果賬戶01出現出賬成功,但是賬戶02沒有入賬,這就導致數據不一致,違反了 ...
  • 在解釋這兩個函數之前,為了方便大家更容易理解,我們先來講講下麵的這幅圖。 ​ 這個圖中的例子其實很簡單,我們就是把題目通過輸入設備(例如鍵盤滑鼠)傳輸到電腦中,然後讓電腦進行運算得出結果,再然後把結果通過輸出設備(例如顯示器)反饋給我們,這是一個簡單的人機的交互過程。 在 C 語言中其實也是一樣 ...
  • 一篇文章掌握 Python 內置 zip() 的全部內容 zip() 是 Python 中最好用的內置類型之一,它可以接收多個可迭代對象參數,再返回一個迭代器,可以把不同可迭代對象的元素組合起來。 我之前寫迭代器系列的時候,在《Python進階:設計模式之迭代器模式》中簡單地介紹過它,前幾天翻譯了 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...