kubernetes实战篇之helm使用技巧
使用压缩包安装chart
我们使用helm package打包的时候,默认会在当前位置生成一个tgz压缩包,然后helm把它复制到到$HOME/.helm/repository目录下,现在还没有讲解helm私服搭建,使用的是helm自带的一个本地服务器,有时候这个服务器不能正常工作,但是我们又想体验功能,这时候可以使用本地chart压缩包来安装
我在当前目录下有以下文件
[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可以看到它了
[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来安装它
安装的时候指定不同的环境
我们在安装一个chart的时候,由于环境不同,配置可能也会有差别,我们知道,chart的配置都存在values.yaml文件里,我们可以编写多个存储配置的yaml文件,在安装的时候通过-f指定 不同环境的values文件
[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指定它的位置),根据不同环境进行修改.
这种方法同样也可以解决另外一个问题,那就是很多公共仓库的chart依赖gcr.io上的镜像导致国内无法安装成功,如果镜像地址做成了参数,则我们可以修改,如果没有做成参数,我们仍然有办法,那就是先通过
helm fetch把它拉到本地,然后解压,然后修改其镜像文件重新打包,通过上面讲到过的使用本地压缩包安装的方式来安装.
让 Helm 连接到指定其它Kubernetes集群
Helm 默认使用和 kubectl 命令相同的配置访问 Kubernetes 集群,其配置默认在 ~/.kube/config 中。
部署时指定名称空间
我们前面的示例都默认是在的名称空间,实际生产环境中往往都不是按这种默认设置,而是安装在指定的名称空间中.如果想部署到指定的命令空间,执行helm install命令时 可以加上 --namespace 参数,比如:
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中定义依赖
可以在要打包的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运行起来
kubernetes实战篇之helm使用技巧的更多相关文章
- kubernetes实战篇之helm填坑与基本命令
		
系列目录 其实前面安装部分我们已经分享一些互联网上其它网友分享的一些坑,本篇介绍helm的基本使用以及在使用过程中碰到的一些坑. 客户端版本和服务端版本不一致问题 有些朋友可能在使用helm init ...
 - kubernetes实战篇之helm安装
		
系列目录 Helm是kubernetes的应用包管理工具,是CNCF孵化器下的一个项目,主要用来管理 Charts.类似于 Ubuntu 中的 APT 或 CentOS 中的 YUM.它提供了一种简单 ...
 - kubernetes实战篇之helm完整示例
		
系列目录 构建一个 Helm Chart 下面我们通过一个完整的示例来学习如何使用 Helm 创建.打包.分发.安装.升级及回退Kubernetes应用. 创建一个名为 mychart 的 Chart ...
 - kubernetes实战篇之helm示例yaml文件文件详细介绍
		
系列目录 前面完整示例里,我们主要讲解helm打包,部署,升级,回退等功能,关于这里面的文件只是简单介绍,这一节我们详细介绍一下这里面的文件,以方便我们参照创建自己的helm chart. Helm ...
 - kubernetes实战篇之部署一个.net core微服务项目
		
目录 继上一篇kubernetes理论知识完结.本篇主要讲解基于nexus搭建一个docker镜像仓库(当然大家实践过程是不必完全跟着做,也可以搭建harbor仓库或者直接把镜像推送到docker h ...
 - kubernetes实战篇之通过api-server访问dashboard
		
系列目录 前面一节我们介绍了如何使用kube-proxy搭建代理访问dashboard,这样做缺点非常明显,第一可以通过http访问,第二是这种方式要启动一个后台进程,如果进程关闭了则不能够访问了,还 ...
 - kubernetes实战篇之nexus oss服务器部署及基于nexus的docker镜像仓库搭建
		
系列目录 Nexus oss仓库管理平台搭建 Nexus是一款仓库管理工具,支持Npm,bower,maven,nuget,apt,yum甚至docker,helm等各种仓库,说的通俗以下,就是私服镜 ...
 - kubernetes实战篇之创建密钥自动拉取私服镜像
		
系列目录 前面我们讲解了如何搭建nexus服务器,以及如何使用nexus搭建docker私有镜像仓库,示例中我们都是手动docker login登陆私服,然后通过命令拉取镜像然后运行容器.然而这种做法 ...
 - kubernetes实战篇之为默认账户创建镜像拉取密钥
		
系列目录 上一节我们分别使用纯文本账户密码和docker的config文件一创建一个kubernetes secret对象,并且把它添加到containers的imagePullSecrets字段用以 ...
 
随机推荐
- ASP.NET Core 新建项目 - macOS 环境 - ASP.NET Core 基础教程 - 简单教程,简单编程
			
原文:ASP.NET Core 新建项目 - macOS 环境 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 新建项目 - macOS 环境 对于任何语言和 ...
 - IIS基本介绍
			
应用程序池-网站-应用程序 1 应用程序池 设置应用程序的各种设置,新建.修改应用程序的时候可以选择应用程序池 2 [站外图片上传中...(image-3924c8-1511163001873 ...
 - Qt 创建圆角、无边框、有阴影、可拖动的窗口 good
			
程序窗口的边框,标题栏等是系统管理的,Qt 不能对其进行定制,为了实现定制的边框.标题栏.关闭按钮等,需要把系统默认的边框.标题栏去掉,然后使用 Widget 来模拟它们.这里介绍使用 QSS + Q ...
 - Spring Boot  专题
			
Spring is a very popular Java-based framework for building web and enterprise applications. Unlike m ...
 - LeetCode - 4 - Longest Substring Without Repeating Characters
			
题目 URL:https://leetcode.com/problems/median-of-two-sorted-arrays/ 解法 二分法. 总的思想是将 2 个数组用 2 个指针“整体”二分. ...
 - C# .NET锁屏程序(顺带屏蔽任务管理器)
			
原文:C# .NET锁屏程序(顺带屏蔽任务管理器) 第一步:将窗体的FormBorderStyle设置为none,WindowState设为Maximized 占据整个屏幕. 第二步:使用钩子监控全局 ...
 - ES6中的Promise详解
			
Promise 在 JavaScript 中很早就有各种的开源实现,ES6 将其纳入了官方标准,提供了原生 api 支持,使用更加便捷. 定义 Promise 是一个对象,它用来标识 JavaScri ...
 - 深入浅出RPC——浅出篇 深入篇
			
本文转载自这里是原文 近几年的项目中,服务化和微服务化渐渐成为中大型分布式系统架构的主流方式,而 RPC 在其中扮演着关键的作用. 在平时的日常开发中我们都在隐式或显式的使用 RPC,一些刚入行的程序 ...
 - Android零基础入门第64节:揭开RecyclerView庐山真面目
			
原文:Android零基础入门第64节:揭开RecyclerView庐山真面目 大家还记得之前在第38期~第50期都在学习列表控件吗,其中用了8期讲ListView的使用,相信都已经掌握好了吧.那么本 ...
 - webform的图片防盗链
			
最近用到域的问题,不是同一主机的请求将不允许请求此页面. 这其实和图片防盗链的本质是一样的. 通过两个属性:由于当时用的aspx视图引擎,所以需要通过HttpContext.Current才能拿到ht ...