系列目录html
咱们使用helm package
打包的时候,默认会在当前位置生成一个tgz压缩包,而后helm把它复制到到$HOME/.helm/repository
目录下,如今尚未讲解helm私服搭建,使用的是helm自带的一个本地服务器,有时候这个服务器不能正常工做,可是咱们又想体验功能,这时候可使用本地chart压缩包来安装node
我在当前目录下有如下文件nginx
[centos@k8s-master helm]$ ls get_helm.sh mychart mychart-0.1.0.tgz mychart-0.2.0.tgz
[centos@k8s-master helm]$ helm install --name tylertest mychart-0.1.0.tgz NAME: tylertest LAST DEPLOYED: Thu Apr 25 09:37:32 2019 NAMESPACE: default STATUS: DEPLOYED RESOURCES: ==> v1/Deployment NAME READY UP-TO-DATE AVAILABLE AGE tylertest-mychart 0/1 1 0 0s ==> v1/Pod(related) NAME READY STATUS RESTARTS AGE tylertest-mychart-545479dd4b-wbdm4 0/1 ContainerCreating 0 0s ==> v1/Service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE tylertest-mychart ClusterIP 10.107.107.190 <none> 80/TCP 0s NOTES: 1. Get the application URL by running these commands: export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=mychart,app.kubernetes.io/instance=tylertest" -o jsonpath="{.items[0].metadata.name}") echo "Visit http://127.0.0.1:8080 to use your application" kubectl port-forward $POD_NAME 8080:80
而且经过helm list能够看到它了json
[centos@k8s-master helm]$ helm list NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE kubernetes-dashboard 1 Thu Mar 14 09:06:25 2019 DEPLOYED kubernetes-dashboard-1.2.0 1.10.1 kube-system tylertest 1 Thu Apr 25 09:37:32 2019 DEPLOYED mychart-0.1.0 1.0 default
固然也能够进入到$HOME/.helm/repository
来安装它centos
咱们在安装一个chart的时候,因为环境不一样,配置可能也会有差异,咱们知道,chart的配置都存在values.yaml文件里,咱们能够编写多个存储配置的yaml文件,在安装的时候经过-f
指定 不一样环境的values文件api
[centos@k8s-master helm]$ helm install --name=tylertest -f mychart/values.yaml mychart NAME: tylertest LAST DEPLOYED: Thu Apr 25 09:44:00 2019 NAMESPACE: default STATUS: DEPLOYED RESOURCES: ==> v1/Deployment NAME READY UP-TO-DATE AVAILABLE AGE tylertest-mychart 0/1 0 0 0s ==> v1/Pod(related) NAME READY STATUS RESTARTS AGE tylertest-mychart-545479dd4b-m5wj5 0/1 Pending 0 0s ==> v1/Service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE tylertest-mychart ClusterIP 10.108.206.51 <none> 80/TCP 0s NOTES: 1. Get the application URL by running these commands: export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=mychart,app.kubernetes.io/instance=tylertest" -o jsonpath="{.items[0].metadata.name}") echo "Visit http://127.0.0.1:8080 to use your application" kubectl port-forward $POD_NAME 8080:80
注意,values.yaml是安装时缺省状况下使用的文件,咱们能够能够把它复制若干(名字能够是任意名称,只须要在install的时候经过
-f
指定它的位置),根据不一样环境进行修改.bash
这种方法一样也能够解决另一个问题,那就是不少公共仓库的chart依赖gcr.io上的镜像致使国内没法安装成功,若是镜像地址作成了参数,则咱们能够修改,若是没有作成参数,咱们仍然有办法,那就是先经过
helm fetch
把它拉到本地,而后解压,而后修改其镜像文件从新打包,经过上面讲到过的使用本地压缩包安装的方式来安装.服务器
Helm 默认使用和 kubectl 命令相同的配置访问 Kubernetes 集群,其配置默认在 ~/.kube/config
中。app
咱们前面的示例都默认是在的名称空间,实际生产环境中每每都不是按这种默认设置,而是安装在指定的名称空间中.若是想部署到指定的命令空间,执行helm install
命令时 能够加上 --namespace 参数,好比:ide
helm install local/mychart --name tylertest --namespace mynamespace
其它跟kubectl get相似,helm也有get命令,能够经过它来查看部署应用详细信息
[centos@k8s-master helm]$ helm get tylertest REVISION: 1 RELEASED: Thu Apr 25 09:44:00 2019 CHART: mychart-0.2.0 USER-SUPPLIED VALUES: affinity: {} fullnameOverride: "" image: pullPolicy: IfNotPresent repository: nginx tag: stable ingress: annotations: {} enabled: false hosts: - host: chart-example.local paths: [] tls: [] nameOverride: "" nodeSelector: {} replicaCount: 1 resources: {} service: port: 80 type: ClusterIP tolerations: [] COMPUTED VALUES: affinity: {} fullnameOverride: "" image: pullPolicy: IfNotPresent repository: nginx tag: stable ingress: annotations: {} enabled: false hosts: - host: chart-example.local paths: [] tls: [] nameOverride: "" nodeSelector: {} replicaCount: 1 resources: {} service: port: 80 type: ClusterIP tolerations: [] HOOKS: --- # tylertest-mychart-test-connection apiVersion: v1 kind: Pod metadata: name: "tylertest-mychart-test-connection" labels: app.kubernetes.io/name: mychart helm.sh/chart: mychart-0.2.0 app.kubernetes.io/instance: tylertest app.kubernetes.io/managed-by: Tiller annotations: "helm.sh/hook": test-success spec: containers: - name: wget image: busybox command: ['wget'] args: ['tylertest-mychart:80'] restartPolicy: Never MANIFEST: --- # Source: mychart/templates/service.yaml apiVersion: v1 kind: Service metadata: name: tylertest-mychart labels: app.kubernetes.io/name: mychart helm.sh/chart: mychart-0.2.0 app.kubernetes.io/instance: tylertest app.kubernetes.io/managed-by: Tiller spec: type: ClusterIP ports: - port: 80 targetPort: http protocol: TCP name: http selector: app.kubernetes.io/name: mychart app.kubernetes.io/instance: tylertest --- # Source: mychart/templates/deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: tylertest-mychart labels: app.kubernetes.io/name: mychart helm.sh/chart: mychart-0.2.0 app.kubernetes.io/instance: tylertest app.kubernetes.io/managed-by: Tiller spec: replicas: 1 selector: matchLabels: app.kubernetes.io/name: mychart app.kubernetes.io/instance: tylertest template: metadata: labels: app.kubernetes.io/name: mychart app.kubernetes.io/instance: tylertest spec: containers: - name: mychart image: "nginx:stable" imagePullPolicy: IfNotPresent ports: - name: http containerPort: 80 protocol: TCP livenessProbe: httpGet: path: / port: http readinessProbe: httpGet: path: / port: http resources: {}
默认状况下会显示最新的版本的相关信息,若是想要查看指定发布版本的信息可加上 --revision 参数。
$ helm get --revision 1 tylertest
能够在要打包的chart目录中建立一个requirements.yaml文件定义该chart的依赖
$ cat > ./mychart/requirements.yaml <<EOF dependencies: - name: mariadb version: 0.6.0 repository: https://kubernetes-charts.storage.googleapis.com EOF
经过helm命令更新和下载cahrt的依赖
helm dep update ./mychart
在次安装运行chart时会把依赖中定义的chart运行起来