chart倉庫之創建-入庫-使用(helm,helm-push,chartmuseum)


前言:

使用helm管理chart包,需要三個部門協作完成,都有哪三個部門呢?
1)  倉庫, chartmuseum,  作為chart的存儲倉庫,一方面提供存儲,一方面對外提供上傳和下載, 其也包含兩部分
              服務器: 真正提供服務的;
              客戶端/命令行: 用來操作和設置服務器;
2)helm-push,專門用作上傳chart包到倉庫中
3)  helm,  一方面可以訪問倉庫並從倉庫中下載chart包,另一方面可以與自己的實際服務器tiller交互渲染chart包

 

一: chartmuseum的安裝
0. 前言
chartmuseum的安裝實際上是可以有多種方式的,常用的方式有
1,CLI,包括兩種個,一種是完全源碼安裝,一種是手動下載二進制程序,然后直接放到系統目錄下(本文選擇的)
2,Docker鏡像方式的安裝
3,chart包方式的安裝。因為既然他最為一種自定義的chart包倉庫,那么肯定是很helm合作的,所以他本身的安裝也是可以利用helm安裝
   即helm的stable倉庫中,是由chartmuseum的chart包的....
   wxy:用這種方式的安裝,應該就以為着是將其放到pod里面提供服務了吧....
官網文檔/源碼:https://github.com/helm/chartmuseum
目前可用的倉庫地址為:
http://192.168.48.82:8080/
1. 安裝chartmuseum的命令行客戶端
1),首先windows上通過迅雷下載
      https://s3.amazonaws.com/chartmuseum/release/latest/bin/linux/amd64/chartmuseum
2),輾轉拷貝到目標linux機器上
3),安裝
chmod +x ./chartmuseum
mv ./chartmuseum /usr/local/bin
4), 驗證
chartmuseum --version

2. 安裝chartmuseum服務器
1),創建system 服務文件,即用systemctl來方便管理,文件中指定chartmuseum的配置文件
       參考鏈接:https://www.jianshu.com/p/b31a091a4ef2
# vi /etc/systemd/system/chartmuseum.service
[Unit]
Description=chartmuseum
Requires=network-online.target
After=network-online.target
[Service]
EnvironmentFile=/etc/chartmuseum/chartmuseum.config
User=root
Restart=allways
ExecStart=/usr/local/bin/chartmuseum $ARGS
ExecStop=/usr/local/bin/chartmuseum step-down
[Install]
WantedBy=multi-user.target
2),配置啟動參數
       包括提供服務的端口號; 使用的底層存儲的方式以及底層存儲的路徑(主要是為他選擇一塊存儲,好放置那些chart包呀,可以有多種選擇,在這里我們選自本地);
       認證的賬號和明碼; 等等....
# vi /etc/chartmuseum/chartmuseum.config
ARGS=\
--port=8080 \
--storage="local" \
--storage-local-rootdir="/var/lib/chartmuseum/chartstorage" \
--log-json \
--basic-auth-user=admin \
--basic-auth-pass="hengsheng123"  \
--auth-anonymous-get        可選,表示對於get操作,不需要認證
3)啟動chartmuseum服務
# systemctl start chartmuseum
# systemctl enable  chartmuseum
# systemctl status chartmuseum

4)向本地存儲中添加chart包,創建索引,真正作為一個chart倉庫對外提供服務
 (1)進入到存放chart包的路徑下,可以手動放一些chart包,也可以通過某個helm-push工具(后面會說)
     # cd /var/lib/chartmuseum/chartstorage
 (2)添加或刪除chart包---
 (3)使用chartmuseum命令工具生成索引文件,之后也可以使用該命令重新生成一個索引文件到指定目錄下,
      helm客戶端在訪問倉庫的時候就是使用改文件得到倉庫中chart列表
     # chartmuseum --gen-index --storage="local" --storage-local-rootdir="/var/lib/chartmuseum/chartstorage"
 
   注: 目前還沒確定這個命令是覆蓋掉啟動時配置的參數,還是增量設置,這個之后再研究
 (4) 驗證,找一個添加本倉庫的helm客戶端設備將創建的,詳見下一個章節
     # helm repo update
     # helm search repo chartmuseum

5) 放開宿主機的安全策略
使能網絡中其他設置上訪問,需要配置防火牆
systemctl stop firewalld.service
或者
iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
之后,遠程訪問成功
 
 
chart倉庫(chartmuseum)的工作原理
存儲庫索引文件稱為index.yaml, 是根據storage中的chart包動態生成的,如果你想使用自己創建該文件,則自動生成的將被忽略;
注意:  storage中的chart包必須是.tgz格式,否則storage backend不識別,即不會生成到index.yaml中。
chartmuseum缺省會在內存類型的cache中存儲index.yaml文件的內容,也可以通過設置將其offload到外部cache中。
一旦有index的請求過來,storage backend就會掃描當前storage中所有的chart包,然后和自己cache進行比對然后刷新並將內容返回給請求者。
當然,你也可以通過設置緩存間隔來周期性刷新index。他會基於storage中的包動態的更新。
 --gen-index 這個命令參數可以掃描當前storage中的chart包,然后生成index.yaml並將其內容打印到標准輸出上.
一旦index 文件重新生成,chartmuseum會在storage中保存一個狀態文件稱為 index-cache.yaml,用於cache優化。這個文件只在內部使用,但可以用於向simple storage遷移使用。
當有helm客戶端執行 helm repo add chartmuseum http://localhost:8080 或者  helm repo update 時,實際都是向倉庫發出了GET /index.yaml 請求
所以當你手動 add/remove 一個 .tgz 包  from storage時,  他會直接反映給 GET /index.yaml 操作中。
 
二。helm客戶端的安裝
0. 這里安裝的是helm v3
    # tar -zxvf helm-v3.0.0-linux-amd64.tar.gz
    # mv linux-amd64/helm /usr/local/bin/helm
    # helm version
1,查看當前helm客戶端可以與哪些倉庫連接
[root@node213 helm-push-master]# helm repo list
Error: no repositories to show
2,將自建的chartmuseum倉庫加入到helm的repo列表中
[root@node213 helm-push-master]# helm repo add chartmuseum http://192.168.48.82:8080/ --username admin --password hengsheng123
"chartmuseum" has been added to your repositories
[root@node213 helm-push-master]# helm repo list
NAME        URL                  
chartmuseum http://192.168.48.82:8080/
3. 更新遠端倉庫中的索引文件
# helm repo update,
注:
helm的倉庫信息缺省在:/root/.cache/helm/repository  目錄下~
一個xxx-index.yaml文件代表一個倉庫,官方缺省倉庫對應就是index.yaml文件
 
 
三: helm-push工具的安裝
helm-push的安裝包含兩部分:
1)負責安裝的工具包(tar包),包含了安裝腳本以及依賴,該腳本會去官方目錄下載真正的源碼進行呢編譯然后安裝;
2)真正的的業務源碼包;
【方式一】
1, 首先下載helm push的源碼,直接在git hub上下載,下載地址是:
https://github.com/chartmuseum/helm-push
這里源碼的版本是:v0.8.1,這個很重要,因為后面會用到
2,找一個目錄,然后解壓,在這里,我的解壓目錄是/home/wxy/helm-push

3,  在源碼包路徑下新建一個目錄叫做download,用來放置工具包,並解壓
      下載地址為:https://github.com/chartmuseum/helm-push/releases/download/v0.8.1/helm-push_0.8.1_linux_amd64.tar.gz
      0) # cd  /home/wxy/helm-push/download
      1) 解壓工具包到目錄下
          # tar -xf helm-push_0.8.1_darwin_amd64.tar.gz
       注意:這個注意工具包和源碼包不是一回事,他的內容是一些腳本和執行文件,可以看做是安裝源碼的工具
4,此時我的目錄結構是這樣的:
[root@node213 helm-push]# pwd
/home/wxy/helm-push
[root@node213 helm-push]# ll
...
drwxr-xr-x. 3 root root    93 4月  10 16:15 download
...
drwxr-xr-x. 2 root root   100 4月  10 16:07 scripts
...
[root@node213 helm-push]# ll download/
drwxr-xr-x. 2 root root       22 4月  10 16:15 bin
-rw-r--r--. 1 root root  9729851 4月  10 16:15 helm-push_0.8.1_linux_amd64.tar.gz
-rw-r--r--. 1  501 games   11357 12月 17 11:36 LICENSE
-rw-r--r--. 1  501 games     395 12月 17 11:52 plugin.yaml

5,修改源碼包中的安裝腳本
0) 因為helm安裝插件的命令是:
     #helm plugin install /home/wxy/helm-push   ----注意,這個一定要是絕對路徑,實際上一般情況下這個往往是git路徑
     其原理是:
     首先拉取源碼包,然后讀取/script/install_plugin.sh文件,最后安裝
     所以,因為網絡的原因,為了讓他不走尋常路,我們需要改一下這個文件
1)修改/script/install_plugin.sh文件,需要刪除:
if [ "$(uname)" = "Darwin" ]; then
    ...
fi
    和
# Download with curl if possible
 ...
需要增加:
cp download/helm-push_${version}_linux_amd64.tar.gz releases/v${version}.tar.gz
   解析一下:原邏輯:  是構建一個下載路徑,然后下載到releases目錄下,再移動到對應的目錄下
                     更改之后: 不再實時下載,而是將之前下載到本地的tar包直接復制到這條目錄下
6,正式安裝插件
#helm plugin install /home/wxy/helm-push
坑:
# helm push -h
Error: fork/exec /root/.local/share/helm/plugins/helm-push/bin/helmpush: no such file or directory
[root@node213 wxy]# cd /root/.local/share/helm/plugins
[root@node213 plugins]# ll
lrwxrwxrwx. 1 root root 19 4月  10 16:06 helm-push -> /home/wxy/helm-push
原因: 因為之前有裝過一回,但是安裝后報錯了,說tar包沒獲取到,但是軟鏈接已經建立,所以再次安裝說已經安裝好了,就沒理會
          但是,就出現了錯誤,后來講鏈接刪除,重新安裝,成功了,
另外,可以發現,helm的plugin目錄對應的是/root/.local/share/helm/plugins,並不是網上有的說是/root/.helm/plugins/
           並且,因為這個鏈接的存在,初始/home/wxy/helm-push目錄還不能刪除,所以我建議還是按照方式二來安裝
   
 
 
7,使用插件將chart包push 到倉庫
# helm push argo chartmuseum
Pushing argo-0.7.3.tgz to chartmuseum...
Done.
 
8,驗證push結果
1)http訪問查看
curl http://192.168.48.213:8080
curl http://192.168.48.213:8080

2)helm客戶端查看(helm的安裝見下另一個章節)
helm-push到的是"遠端"倉庫,所以,如果想在本地看的到,還需要本地刷新一些,獲取遠端倉庫的索引文件
# helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "chartmuseum" chart repository
Update Complete. ⎈ Happy Helming!⎈
# helm search repo chartmuseum
NAME             CHART VERSION APP VERSION DESCRIPTION                   
chartmuseum/argo 0.7.3         v2.6.1      A Helm chart for Argo Workflows
wxy:搞了一下午,在沒有網絡的環境下,搭建了一個倉庫,簡直要喜極而泣了!!!!
 

【方式二】
https://www.cnblogs.com/Dev0ps/p/11258539.html
盡管我最開始實驗沒成功,我估計是因為plugin目錄不對,換成/root/.local/share/helm/plugins,應該是對的
坑:
# helm push xxx
helm不認識push這個動作...
 
 
 
 
 
 
 
 
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM