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

系列目錄html

其實前面安裝部分咱們已經分享一些互聯網上其它網友分享的一些坑,本篇介紹helm的基本使用以及在使用過程當中碰到的一些坑.nginx

客戶端版本和服務端版本不一致問題

有些朋友可能在使用helm init的時候直接複製頁面上的命令,這樣因爲客戶端和服務端版本不一致形成helm沒法使用,解決辦法在複製helm init 阿里雲網址時把網址裏面的版本更新爲和客戶端保持一致的版本.git

阿里雲鏡像過舊

你可能按照上一節的操做最終成功安裝了helm,可是在實際工做中你可能會發現,阿里雲的helm鏡像倉庫過舊(這裏僅僅是說helm倉庫過舊,而不是其它倉庫),不少包都沒有,這就致使經過helm安裝不少第三方工具時因爲查找不到對應版本的chart而沒法安裝成功.下面給出幾種解決辦法github

1) 刪除阿里雲的helm倉庫redis

使用helm repo list查看是否有阿里雲的鏡像源,若是有則執行docker

helm repo remove stable
helm repo remove  incubator

來刪除阿里鏡像源,則默認鏡像源他恢復到https://kubernetes-charts.storage.googleapis.com/,目前來看,這個地址是能訪問的,可是不肯定是否能一直穩定訪問centos

2) 使用網友自制源api

參考地址,你也能夠按照說明本身搭建一個同步源.bash

若是使用做者的源,則只須要添加helm repo add stable https://burdenbear.github.io/kube-charts-mirror/便可app

直到目前這個倉庫還一直穩定更新

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示例部分及命令部分大都是參考了此篇博客,並未進行詳細驗證

相關文章
相關標籤/搜索