kubernetes實戰篇之helm填坑與基本命令

周國通發表於2019-07-04

系列目錄

其實前面安裝部分我們已經分享一些網際網路上其它網友分享的一些坑,本篇介紹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示例部分及命令部分大都是參考了此篇部落格,並未進行詳細驗證

相關文章