其實前面安裝部分我們已經分享一些網際網路上其它網友分享的一些坑,本篇介紹helm的基本使用以及在使用過程中碰到的一些坑.
客戶端版本和服務端版本不一致問題
有些朋友可能在使用helm init
的時候直接複製頁面上的命令,這樣由於客戶端和服務端版本不一致造成helm無法使用,解決辦法在複製helm init 阿里雲網址
時把網址裡面的版本更新為和客戶端保持一致的版本.
阿里雲映象過舊
你可能按照上一節的操作最終成功安裝了helm,但是在實際工作中你可能會發現,阿里雲的helm映象倉庫過舊(這裡僅僅是說helm倉庫過舊,而不是其它倉庫),很多包都沒有,這就導致通過helm安裝很多第三方工具時由於查詢不到對應版本的chart而無法安裝成功.下面給出幾種解決辦法
1) 刪除阿里雲的helm倉庫
使用helm repo list
檢視是否有阿里雲的映象源,如果有則執行
helm repo remove stable
helm repo remove incubator
來刪除阿里映象源,則預設映象源他恢復到https://kubernetes-charts.storage.googleapis.com/
,目前來看,這個地址是能訪問的,但是不確定是否能一直穩定訪問
2) 使用網友自制源
參考地址,你也可以按照說明自己搭建一個同步源.
如果使用作者的源,則只需要新增helm repo add stable https://burdenbear.github.io/kube-charts-mirror/
即可
直到目前這個倉庫還一直穩定更新
3) 使用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日誌系統
1) 準備 charts
helm fetch stable/fluentd-elasticsearch
helm fetch stable/elasticsearch
helm fetch stable/kibana # kibana 要和 elasticsearch 版本一致
下載下來的內容是一個壓縮包,下載的位置是當前位置,因此你想要把它儲存到指定目錄需要先進入指定目錄,或者在當前位置下載後解壓,然後移動到指定位置
2) 解壓修改各 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,進行埠對映
3) 安裝各元件
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
4) 訪問 Kibana
檢視埠:kubectl get svc -n efk -l app=kibana
訪問:http://IP:Port,無賬號密碼
以上elk示例部分及命令部分大都是參考了此篇部落格,並未進行詳細驗證