其實前面安裝部分我們已經分享一些互聯網上其它網友分享的一些坑,本篇介紹helm的基本使用以及在使用過程中碰到的一些坑.
客戶端版本和服務端版本不一致問題
有些朋友可能在使用helm init的時候直接復制頁面上的命令,這樣由於客戶端和服務端版本不一致造成helm無法使用,解決辦法在復制helm init 阿里雲網址時把網址里面的版本更新為和客戶端保持一致的版本.
阿里雲鏡像過舊
你可能按照上一節的操作最終成功安裝了helm,但是在實際工作中你可能會發現,阿里雲的helm鏡像倉庫過舊(這里僅僅是說helm倉庫過舊,而不是其它倉庫),很多包都沒有,這就導致通過helm安裝很多第三方工具時由於查找不到對應版本的chart而無法安裝成功.下面給出幾種解決辦法
- 刪除阿里雲的helm倉庫
使用helm repo list查看是否有阿里雲的鏡像源,如果有則執行
helm repo remove stable
helm repo remove incubator
來刪除阿里鏡像源,則默認鏡像源他恢復到https://kubernetes-charts.storage.googleapis.com/,目前來看,這個地址是能訪問的,但是不確定是否能一直穩定訪問
- 使用網友自制源
參考地址,你也可以按照說明自己搭建一個同步源.
如果使用作者的源,則只需要添加helm repo add stable https://burdenbear.github.io/kube-charts-mirror/即可
直到目前這個倉庫還一直穩定更新
- 使用azure源
上面的git倉庫里,作者提到了可以傅azure鏡像源
執行命令
helm repo add stable http://mirror.azure.cn/kubernetes/charts/
helm repo add incubator http://mirror.azure.cn/kubernetes/charts-incubator/
heml命令報錯
helm在執行的時候偶爾會有命令報錯,大概是no available pod,不知道其它朋友是否遇到過這個問題,反正我是遇到過不少,實際發現這個錯誤不影響,過一會就會恢復正常
[centos@k8s-master ~]$ kubectl get deploy -n=kube-system
NAME READY UP-TO-DATE AVAILABLE AGE
coredns 2/2 2 2 42d
kubernetes-dashboard 0/1 1 0 41d
tiller-deploy 0/1 1 0 15d
如果觀賽它的deploy,時爾ready狀態會變為0
基礎命令
- 查找 helm search CHARTNAME
- 檢查 helm inspect CHARTNAME
- 安裝 helm install --name mem1 stable/memcached
- 獲取狀態信息 helm status mem1
- 列出 helm list [-a]
- 刪除 helm delete [--purge] mem1
- 下載 helm fetch stable/redis
- 創建 helm create CHARTNAME
- 語法檢測 helm lint CHARTNAME
- 打包 helm package CHARTNAME
- 顯示狀態 helm status NAME
示例操作1
查找jenkins chart
[root@k8s-master k8syml]# helm search jenkins
NAME CHART VERSION APP VERSION DESCRIPTION
incubator/jenkins-operator 0.1.12 0.1.12 A Helm chart for Kubernetes Jenkins Operator
stable/jenkins 1.1.3 lts Open source continuous integration server. It supports mu...
helm search如果不指定參數則默認列倉庫的所有charts,目前還不是很多,日后會越來越多,強烈不建議執行此操作
示例操作2
列舉出所有本機通過helm安裝的charts
[root@k8s-master k8syml]# helm list
NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
invisible-turkey 1 Mon Apr 22 17:39:14 2019 FAILED nginx-ingress-0.21.1 0.14.0 jx
kubernetes-dashboard 1 Thu Mar 14 09:06:25 2019 DEPLOYED kubernetes-dashboard-1.2.0 1.10.1 kube-system
示例操作3
查看一個已經安裝的chart的的狀態
[root@k8s-master k8syml]# helm status invisible-turkey
LAST DEPLOYED: Mon Apr 22 17:39:14 2019
NAMESPACE: jx
STATUS: FAILED
NOTES:
The nginx-ingress controller has been installed.
It may take a few minutes for the LoadBalancer IP to be available.
You can watch the status by running 'kubectl --namespace get services -o wide -w invisible-turkey-nginx-ingress-controller'
An example Ingress that makes use of the controller:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
name: example
namespace: foo
spec:
rules:
- host: www.example.com
http:
paths:
- backend:
serviceName: exampleService
servicePort: 80
path: /
# This section is only required if TLS is to be enabled for the Ingress
tls:
- hosts:
- www.example.com
secretName: example-tls
If TLS is enabled for the Ingress, a Secret containing the certificate and key must also be provided:
apiVersion: v1
kind: Secret
metadata:
name: example-tls
namespace: foo
data:
tls.crt: <base64 encoded cert>
tls.key: <base64 encoded key>
type: kubernetes.io/tls
除了狀態以外,還有簡短說明以及示例信息
示例4
刪除一個已經安裝的chart
[root@k8s-master k8syml]# helm delete invisible-turkey
release "invisible-turkey" deleted
關於打包的功能我們后面專門講解,關於下載和修改我們下面通過一個完整實例來介紹
示例5
安裝部署一個elk日志系統
- 准備 charts
-
helm fetch stable/fluentd-elasticsearch
-
helm fetch stable/elasticsearch
-
helm fetch stable/kibana # kibana 要和 elasticsearch 版本一致
下載下來的內容是一個壓縮包,下載的位置是當前位置,因此你想要把它保存到指定目錄需要先進入指定目錄,或者在當前位置下載后解壓,然后移動到指定位置
- 解壓修改各 values.yaml 配置文件
-
elasticsearch/values.yaml
- 修改 master.persistence.enabled 為 false,不啟用存儲卷
- 先安裝 elasticsearch ,保存結果中的地址,如 els1-elasticsearch-client.efk.svc.cluster.local
-
fluentd-elasticsearch/values.yaml
- 修改 image.repository 為 docker.io/mirrorgooglecontainers/fluentd-elasticsearch
- 修改 elasticsearch.host 為上一步中的地址,如 els1-elasticsearch-client.efk.svc.cluster.local
前面我們說過,很多鏡像都存儲在gcr.io上,但是在國內正常情況下是不能訪問的,我們可以把gcr.io修改為
docker.io/mirrorgooglecontainers/這是谷歌鏡像在dockerhub上的倉庫,目前dockerhub在國內還算能正常訪問,但是速度不太理想.大家也可以參照我的其它文章,把鏡像源切到阿里雲,或者提前先把需要的鏡像拉取下來.
- kibana/values.yaml
- 修改 files.kibana.yml.elasticsearch.url 為 http://els1-elasticsearch-client.efk.svc.cluster.local:9200
- 修改 service.type 為 NodePort,進行端口映射
- 安裝各組件
-
kubect create ns efk # 創建名稱空間
-
helm install --name els1 --namespace=efk -f ./elasticsearch/values.yaml stable/elasticsearch # 記錄輸出結果中地址,類似 els1-elasticsearch-client.efk.svc.cluster.local+
-
helm install --name flu1 --namespace=efk -f ./fluentd-elasticsearch/values.yaml stable/fluentd-elasticsearch
-
helm install --name kib1 --namespace=efk -f ./kibana/values.yaml stable/kibana
- 訪問 Kibana
-
查看端口:kubectl get svc -n efk -l app=kibana
-
訪問:http://IP:Port,無賬號密碼
以上elk示例部分及命令部分大都是參考了此篇博客,並未進行詳細驗證
