系列目录
其实前面安装部分我们已经分享一些互联网上其它网友分享的一些坑,本篇介绍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:
tls.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示例部分及命令部分大都是参考了此篇博客,并未进行详细验证