k8s之helm入門


1.概述

  helm是k8s的另外一個項目,相當於linux的yum,在yum倉庫中,yum不光要解決包之間的依賴關系,還要提供具體的程序包,helm倉庫里面只有配置清單文件,而沒有鏡像,鏡像還是由鏡像倉庫來提供,比如hub.docker.com、私有倉庫.

  helm提供了一個應用所需要的所有清單文件.比如對於一個nginx,我們需要一個deployment的清單文件、一個service的清單文件、一個hpa的清單文件,把這三個文件打包到一起,就是一個應用程序的程序包,稱之為Chart.

  Chart是一個helm程序包,其實質只是一個模板,我們可以對這個模板進行賦值(value),形成我們自定義的清單文件,也就實現我們生產個性化的需求,這樣的倉庫叫Chart倉庫,一個https/http服務器.

  Helm把Kubernetes資源打包到一個chart中,而chart被保存到chart倉庫,通過chart倉庫可用來存儲和分享chart.helm工作在k8s集群之外,helm不直接操作apiserver,而是和Tiller交互,Tlller再和apiserver交互,最后由Apiserver把chart使用config賦值,最后部署成為release.helm是tiller的客戶端,管理本地的chart倉庫,作用:發送chart、實例安裝、查詢、卸載等.

  helm先去檢查chart是否存在,如果存在就把chart下載到helm本機當前用戶的家目錄下,然后helm把Chart和Config交給tiller,tiller和api server交互,api server把chart部署在k8s集群上,就不再叫chart了,而叫release;一個chart賦值不同,完全可以部署出多個release出來,所以可以把chart看做是一個安裝包的模板,如果發現chart更新了,helm會自動滾動更新,還支持一鍵回滾的操作.

訪問:https://github.com/helm/helm/releases下載安裝包

wget https://storage.googleapis.com/kubernetes-helm/helm-v2.12.2-linux-amd64.tar.gz
tar xf helm-v2.12.2-linux-amd64.tar.gz
mv linux-amd64/helm /usr/bin/
rbac配置文件樣例:https://github.com/helm/helm/blob/master/docs/rbac.md 
cat tiller-rbac.yaml 
apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: tiller
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: tiller
    namespace: kube-system

kubectl apply -f tiller-rbac.yaml
cat /usr/lib/systemd/system/docker.service
Environment="NO_PROXY=127.0.0.1/8,127.0.0.1/16"
kubectl get pods --all-namespaces=true
# 下面這兩步沒用,還得下國內的鏡像,直接執行第三步
export NO_PROXY="127.0.0.1/8,127.0.0.1/16"
helm init --service-account tiller
helm init --upgrade --tiller-image registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.12.2 \
--stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster
Happy Helming!
helm version 
Client: &version.Version{SemVer:"v2.12.2",...)
Server: &version.Version{SemVer:"v2.12.2",...)

2.使用helm

官方charts列表 https://hub.kubeapps.com/

helm默認使用的charts源地址是https://kubernetes-charts.storage.googleapis.com,需要替換為阿里的helm源:

helm repo list
NAME  	URL                                                   
stable	https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
local 	http://127.0.0.1:8879/charts
# helm源已經變成國內的了,下面這兩步是移除默認源的,不需要執行
helm repo remove stable
helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo update
# 添加incubator源,這個源是開發版的安裝包,用起來可能不穩定
helm repo add incubator https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator/
#列出charts倉庫中所有可用的應用
helm search
helm search mysql
helm inspect stable/mysql
# 用helm安裝軟件包,-name:指定release名字 
helm install --name mysql1 stable/mysql
helm list # 查看安裝的軟件包
helm delete mysql1

helm常用命令

release管理:
    install
    delete
    upgrade/rollback
    list
    history:查看release歷史版本
    status:獲取release狀態信息
chart管理:
    create:創建一個chart,生成基礎chart示例性文件,供我們修改用
    fetch:下載倉庫中的一個char到本地
    get
    inspect
    package
    verify

# helm把安裝包下載到當前用戶的家目錄下
ll /root/.helm/cache/archive/
# 修改chart里面的values.yaml實現定制,values.yaml文件中##是注釋,#是可開啟的參數
helm install --name mysql1 -f /root/values.yaml stable/mysql
metrics想要能被prometheus收集數據需要在metadata中將prometheus.io/scrape:設置為true
metadata:
  annotations:
    prometheus.io/scrape: 'true'
# 部署完應用包后,查看release提示信息
helm status mysql1
helm fetch stable/redis
查看chart官方手冊,了解每個參數的含義https://docs.helm.sh/developing_charts/#charts 
# 用helm生成基礎chart示例性文件,myapp是chart的名字
helm create myapp
# 做語法檢查
helm lint myapp
==> Linting myapp
[INFO] Chart.yaml: icon is recommended
1 chart(s) linted, no failures
# 打包
helm package myapp/
Successfully packaged chart and saved it to: /root/myapp-0.1.0.tgz
# 啟動8879倉庫的服務 
helm serve
# 查看local倉庫里面是否有我們創建的chart包
helm search myapp
# 部署我們自定義的chart
helm install --name myapp1 local/myapp
# 刪除我們部署的chart 
helm delete --purge myapp1

 

參考博客:http://blog.itpub.net/28916011/viewspace-2216650/

 


免責聲明!

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



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