1. 安装helm package

https://github.com/helm/helm/blob/master/LICENSE

2. 将 helm 配置到环境变量

3. 使用helm的前提是安装了kubectl

4. 使用命令查看kubectl集群配置

如下所示表示与集群的通信正常(如果提示集群不可访问,可根据博文设置:https://www.cnblogs.com/miaoying/p/11193621.html

$ kubectl cluster-info
Kubernetes master is running at https://192.168.1.164:6443
KubeDNS is running at https://192.168.1.164:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
kubernetes-dashboard is running at https://192.168.1.164:6443/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:https/proxy To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

5. 查看k8s的client, server两端版本是否一致

$ kubectl version
Client Version: version.Info{Major:"", Minor:"", GitVersion:"v1.10.3", GitCommit:"2bba0127d85d5a46ab4b778548be28623b32d0b0", GitTreeState:"clean", BuildDate:"2018-05-21T09:17:39Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"windows/amd64"}
Server Version: version.Info{Major:"", Minor:"", GitVersion:"v1.15.0", GitCommit:"e8462b5b5dc2584fdcd18e6bcfe9f1e4d970a529", GitTreeState:"clean", BuildDate:"2019-06-19T16:32:14Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"linux/amd64"}

一开始我的client端版本是1.10.3的,server端的是1.15.0的,导致本地使用helm install包时一直抛异常,比如:

Error: release config failed: Deployment in version "v1beta1" cannot be handled as a Deployment: v1beta1.Deployment.Status: v1beta1.DeploymentStatus.Conditions: []v1beta1.DeploymentCondition: v1beta1.DeploymentCondition.Status: ReadString: expects " or n, but found t, error found in #10 byte of ...|"status":true,"type"|..., bigger context ...|ty","reason":"MinimumReplicasAvailable","status":true,"type":"Available"}],"observedGeneration":,"r|...

原因是client端的版本与server端的不一致,导致两个端对配置文件的理解不一样,且有些配置属性低版本的不支持。

6. 将client、server端的版本升级成一致的:1.15.0

下载该版本的client端

https://dl.k8s.io/v1.15.0/kubernetes-client-windows-amd64.tar.gz

查看kubectl位置

$ which kubectl
/c/Program Files/Docker/Docker/Resources/bin/kubectl

发现kubectl在docker里(由于我的kubectl工具是安装docker for windows 时自带的,内置在docker里面)

为了使每次使用kubectl时,能够用1.15.0版本的,需要在环境变量里面对kubectl重新进行配置,我是直接配置在系统环境变量的Path里面,且将它的位置上移到最前面

另开一个终端,再次查看kubectl的位置,如下所示:

$ which kubectl
/f/kubernetes/install-1.15./kubectl

查看kubectl的版本信息(此时的版本信息是统一的了)

$ kubectl version
Client Version: version.Info{Major:"", Minor:"", GitVersion:"v1.15.0", GitCommit:"e8462b5b5dc2584fdcd18e6bcfe9f1e4d970a529", GitTreeState:"clean", BuildDate:"2019-06-19T16:40:16Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"windows/amd64"}
Server Version: version.Info{Major:"", Minor:"", GitVersion:"v1.15.0", GitCommit:"e8462b5b5dc2584fdcd18e6bcfe9f1e4d970a529", GitTreeState:"clean", BuildDate:"2019-06-19T16:32:14Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"linux/amd64"}

7. 查看当前kubernetes上下文

$ kubectl config current-context
kubernetes-admin@kubernetes

8. 初始化helm且安装tiller

helm init

由于 Helm 默认会去 storage.googleapis.com 拉取镜像,如果你当前执行的机器不能访问该域名的话可以使用以下命令来安装

helm init --client-only --stable-repo-url https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts/
helm repo add incubator https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator/
helm repo update

创建服务端

helm init --service-account tiller --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.14.2  --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

查看tiller

$ kubectl -n kube-system get pods|grep tiller
tiller-deploy-6bb85c7cb7-jhr65 / Running 34h

9. 构建一个chart

我构建的chart的目录结构如下:

|-- dateway
|---- templates # 【可选】 部署文件模板目录,模板使用的值来自values.yaml和tiller提供的值
|-----|-- deployment.yaml
|---- Charts.yaml # yaml文件,用于描述chart的基本信息,包括名字版本等
|---- values.yaml # chart的默认配置文件

配置服务charts文件(注意yaml文件格式),可通过拉取原先已有的部署项目的配置文件:比如我是拉取curl的配置文件作为样例 kubectl get Deployment curl -o yaml > curl.yaml

(yaml格式是否合法,可通过 http://www.bejson.com/validators/yaml_editor/ 进行检验)

deployment.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: ""
creationTimestamp: --15T09::17Z
generation:
labels:
app: gateway
name: gateway
namespace: rubikt
resourceVersion: ""
selfLink: /apis/extensions/v1beta1/namespaces/rubikt/deployments/gateway
uid: a0ca862b-4a12-11e9-80d3-0050569b47c5
spec:
progressDeadlineSeconds:
replicas:
revisionHistoryLimit:
selector:
matchLabels:
app: gateway
strategy:
rollingUpdate:
maxSurge: %
maxUnavailable: %
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
app: gateway
spec:
containers:
- image: 192.168.2.50/health/gateway:1.5.-SNAPSHOT
ports:
- {containerPort: , protocol: TCP}
env:
- {name: JAVA_OPTS, value: '-Denv=dev -Ddev_meta=http://apollo.dev.zwjk.com -Dapp.id=health-gateway -server -Xmx768m'}
- {name: CONSUL_URL, value: 10.109.36.166}
- {name: CONSUL_HOST, value: 10.100.39.12}
- {name: CONSUL_PORT, value: ''}
terminationMessagePath: /dev/termination-log
name: gateway
resources:
limits:
cpu: 200m
memory: 768Mi
requests:
cpu: 50m
memory: 512Mi
dnsPolicy: ClusterFirst
restartPolicy: Always
securityContext: {}
terminationGracePeriodSeconds:
imagePullPolicy: Always
imagePullSecrets:
- {name: ccr.ccs.tencentyun.com.key} status:
availableReplicas:
conditions:
- lastTransitionTime: --15T09::17Z
lastUpdateTime: --15T09::17Z
message: ReplicaSet "gateway-6bf6db5c4f" has successfully progressed.
reason: NewReplicaSetAvailable
status: "True"
type: Progressing
- lastTransitionTime: --15T09::59Z
lastUpdateTime: --15T09::59Z
message: Deployment has minimum availability.
reason: MinimumReplicasAvailable
status: "True"
type: Available
observedGeneration:
readyReplicas:
replicas:
updatedReplicas:

service.yaml

kind: Service
apiVersion: v1
metadata:
name: gateway
namespace: rubikt
selfLink: /api/v1/namespaces/rubikt/services/gateway
uid: 43fd6588-4a14-11e9-80d3-0050569b47c5
resourceVersion: ''
labels: {app: gateway}
spec:
ports:
- {protocol: TCP, port: , targetPort: , nodePort: }
selector: {app: gateway}
type: NodePort
sessionAffinity: None
status:
loadBalancer: {}

Chart.yaml

name: gateway
version: "v1.0"
description: gateway

values.yaml

docker:
registry: 192.168.2.50/health/gateway:1.5.-SNAPSHOT
pullPolicy: Always
core:
replicas:
config:
version: "v1.0"

10. 使用命令来验证chart配置有效性

该输出中含模板的变量配置和最终渲染的yaml文件

(当使用kubernetes部署应用时,实际上是将templates渲染成最终的kubernetes能够识别的yaml格式)

$ helm install --dry-run --debug gateway
[debug] Created tunnel using local port: '' [debug] SERVER: "127.0.0.1:56560" [debug] Original chart version: ""
[debug] CHART PATH: D:\zhuojian-projects\rubik-T\k8s\gateway NAME: snug-hare
REVISION:
RELEASED: Thu Jul ::
CHART: gateway-v1.
USER-SUPPLIED VALUES:
{} COMPUTED VALUES:
config:
version: v1.
core:
replicas:
docker:
pullPolicy: Always
registry: 192.168.2.50/health/gateway:1.5.-SNAPSHOT HOOKS:
MANIFEST: ---
# Source: gateway/templates/service.yaml
kind: Service
apiVersion: v1
metadata:
name: gateway
namespace: rubikt
selfLink: /api/v1/namespaces/rubikt/services/gateway
uid: 43fd6588-4a14-11e9-80d3-0050569b47c5
resourceVersion: ''
labels: {app: gateway}
spec:
ports:
- {protocol: TCP, port: , targetPort: , nodePort: }
selector: {app: gateway}
type: NodePort
sessionAffinity: None
status:
loadBalancer: {}
---
# Source: gateway/templates/deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: ""
creationTimestamp: --15T09::17Z
generation:
labels:
app: gateway
name: gateway
namespace: rubikt
resourceVersion: ""
selfLink: /apis/extensions/v1beta1/namespaces/rubikt/deployments/gateway
uid: a0ca862b-4a12-11e9-80d3-0050569b47c5
spec:
progressDeadlineSeconds:
replicas:
revisionHistoryLimit:
selector:
matchLabels:
app: gateway
strategy:
rollingUpdate:
maxSurge: %
maxUnavailable: %
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
app: gateway
spec:
containers:
- image: 192.168.2.50/health/gateway:1.5.-SNAPSHOT
ports:
- {containerPort: , protocol: TCP}
env:
- {name: JAVA_OPTS, value: '-Denv=dev -Ddev_meta=http://apollo.dev.zwjk.com -Dapp.id=health-gateway -server -Xmx768m'}
- {name: CONSUL_URL, value: 10.109.36.166}
- {name: CONSUL_HOST, value: 10.100.39.12}
- {name: CONSUL_PORT, value: ''}
terminationMessagePath: /dev/termination-log
name: gateway
resources:
limits:
cpu: 200m
memory: 768Mi
requests:
cpu: 50m
memory: 512Mi
dnsPolicy: ClusterFirst
restartPolicy: Always
securityContext: {}
terminationGracePeriodSeconds:
imagePullPolicy: Always
imagePullSecrets:
- {name: ccr.ccs.tencentyun.com.key} status:
availableReplicas:
conditions:
- lastTransitionTime: --15T09::17Z
lastUpdateTime: --15T09::17Z
message: ReplicaSet "gateway-6bf6db5c4f" has successfully progressed.
reason: NewReplicaSetAvailable
status: "True"
type: Progressing
- lastTransitionTime: --15T09::59Z
lastUpdateTime: --15T09::59Z
message: Deployment has minimum availability.
reason: MinimumReplicasAvailable
status: "True"
type: Available
observedGeneration:
readyReplicas:
replicas:
updatedReplicas:

11. 安装Chart到kubernetes

helm install -n gateway gateway

现在gateway已经部署到集群上了,本地可执行命令查看实例

$ kubectl get pods --namespace rubikt
NAME READY STATUS RESTARTS AGE
gateway-86584799f-kvvsh / Running 31h

12. 查看部署的release

$ helm list
NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
gateway Thu Jul :: DEPLOYED gateway-v1. default

当前release包含的资源有:Service、Deployment、Secret、PersistentVolumeClaim

查看Service:

$ kubectl get service --namespace rubikt
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
gateway NodePort 10.109.149.47 <none> :/TCP 25h

查看Deployment:

$ kubectl get Deployment --namespace rubikt
NAME READY UP-TO-DATE AVAILABLE AGE
gateway / 47h

查看Secret:

$ kubectl get Secret --namespace rubikt
NAME TYPE DATA AGE
default-token-687fw kubernetes.io/service-account-token 2d5h

查看PersistentVolumeClaim:

$ kubectl get PersistentVolumeClaim --namespace rubikt
No resources found.

 13. 配置升级

更新了配置文件之后,可以使用upgrade命令进行更新(以此做到应用升级)

$ helm upgrade config config --description config升级 --version 2.0
Release "config" has been upgraded.
LAST DEPLOYED: Tue Jul ::
NAMESPACE: default
STATUS: DEPLOYED RESOURCES:
==> v1/Pod(related)
NAME READY STATUS RESTARTS AGE
config-6c7b9f6885-jkf6j / Running 3m55s
config-fcf75984-vrd2f / ContainerCreating 0s ==> v1beta1/Deployment
NAME READY UP-TO-DATE AVAILABLE AGE
config / 23m

可以看到部署的config已经升级了一个版本,revision = 2

$ helm list
NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
config Tue Jul :: DEPLOYED config-v1. default

14. 版本回退

回退应用版本,先使用helm history命令查看变更记录

$ helm history config
REVISION UPDATED STATUS CHART DESCRIPTION
Tue Jul :: SUPERSEDED config-v1. Install complete
Tue Jul :: SUPERSEDED config-v1. Upgrade complete
Tue Jul :: SUPERSEDED config-v1. Rollback to
Tue Jul :: DEPLOYED config-v1. config升级

回滚到reversion为2的版本

$ helm rollback config
Rollback was a success.

另外: 部署到k8s上之后,可能会出现的问题:(表明需要配置内存空间大小)

 

使用helm进行kubernetes包管理的更多相关文章

  1. Helm - Kubernetes包管理专家

    What is Helm? - The package manager for kubernetes, Helm is the best way to find, share, and use sof ...

  2. kubernetes包管理工具Helm安装

    helm官方建议使用tls,首先生成证书. openssl genrsa -out ca.key.pem openssl req -key ca.key.pem -new -x509 -days -s ...

  3. Kubernetes-17:Kubernets包管理工具—>Helm介绍与使用

    Kubernets包管理工具->Helm 什么是Helm? 我们都知道,Linux系统各发行版都有自己的包管理工具,比如Centos的YUM,再如Ubuntu的APT. Kubernetes也有 ...

  4. Helm包管理

    Helm Kubernetes 包管理工具 Helm 可以帮助我们管理 Kubernetes 应用程序 - Helm Charts 可以定义.安装和升级复杂的 Kubernetes 应用程序,Char ...

  5. 第十一章 Helm-kubernetes的包管理器(上)

    Helm - K8s的包管理器 11.1 Why Helm K8s能够很好的组织和编排容器,但它缺少一个更高层次的应用打包工具,Helm就是干这个的. 比如对于一个MySQL服务,K8s需要部署如下对 ...

  6. 使用 Helm 包管理工具简化 Kubernetes 应用部署

    当在 Kubernetes 中已经部署很多应用时,后续需要对每个应用的 yaml 文件进行维护操作,这个过程会变的很繁琐,我们可以使用 Helm 来简化这些工作.Helm 是 Kubernetes 的 ...

  7. Kubernetes学习之路(二十五)之Helm程序包管理器

    目录 1.Helm的概念和架构 2.部署Helm (1)下载helm (2)部署Tiller 3.helm的使用 4.chart 目录结构 5.chart模板 6.定制安装MySQL chart (1 ...

  8. Helm:kubernetes应用包管理工具

    概要 Helm:kubernetes应用包管理工具 K8s部署应用的时候,应用会通过yaml描述信息调用K8s-api:Helm即是管理这些Yaml的应用包管理工具 组成 Helm包含5个部分 Hel ...

  9. 云原生之旅 - 5)Kubernetes时代的包管理工具 Helm

    前言 上一篇文章 [基础设施即代码 使用 Terraform 创建 Kubernetes] 教会了你如何在Cloud上面建Kubernetes资源,那么本篇来讲一下如何在Kubernetes上面部署应 ...

随机推荐

  1. 下一代微服务-ServiceMesh

    1.简介 系统服务化之后,服务间通信需要关注什么? 服务发现.负载均衡.路由.流控.通信可靠性.弹性.安全.监控.日志 API网关可以集中式的管理这些功能,但是会出现单点故障,并且实现起来网关会变得越 ...

  2. 用jQuery的offset()替代javascript的offset

    在项目中遇到了一个问题,获取某个块状元素的offsetTop和offsetLeft时候会出现问题,并不是相对浏览器的位置,而是相对于某一个块状元素的位置,具体参照元素也没找到,因为页面中没有设置pos ...

  3. PostgreSql那点事(文件读取写入、命令执行的办法)

    • 2013/07/9 作者: admin PostgreSql那点事(文件读取写入.命令执行的办法) 今天无意发现了个PostgreSQL环境,线上学习了下,一般的数据注射(读写数据库)差异不大,不 ...

  4. 打造属于你的提供者(Provider = Strategy + Factory Method) 设计模式 - Provider Pattern(提供者模式)

    打造属于你的提供者(Provider = Strategy + Factory Method)   1.1.1 摘要 在日常系统设计中,我们也许听说过提供者模式,甚至几乎每天都在使用它,在.NET F ...

  5. python的异常种类

    AttributeError 访问一个对象没有的属性 比如:foo.x 但是foo没有x属性 IOError 输入/输出异常 基本是无法打开文件 ImportError 无法映入模块或包 路径或者名称 ...

  6. Zebra-打印特殊字符

    Zebra在打印一些特殊的字符时,会出异常. 在要打印的字符串前加  ^FH  然后将字符换成 ASCii编码或utf-8编码的16进制,在前面加_,如D094写成_DO_94 查看字符的编码 htt ...

  7. shell脚本条件判断if中-a到-z的意思

    [ -a FILE ]  如果 FILE 存在则为真.  [ -b FILE ]  如果 FILE 存在且是一个块特殊文件则为真.  [ -c FILE ]  如果 FILE 存在且是一个字特殊文件则 ...

  8. Hadoop-HA集群搭建-rehl7.4

    Hadoop-HA集群搭建-rehl7.4 hadoop 无说明需要登录其它机器操作,都是在集群的HD-2-101上执行的命令. 所有安装包地址:百度网盘,提取码:24oy 1. 基础环境配置 1.1 ...

  9. 浅谈JS之Error对象

    [前言] 本文主要介绍下JS的Error name相关属性.   当 JS 引擎执行 JS代码时,会发生各种错误. ①语法错误,通常是程序员造成的编码错误或错别字: ②拼写错误或语言中缺少的功能(可能 ...

  10. 云打印 对 追光的人 的Beta产品测试报告

    云打印 对追光的人的Beta产品测试报告 课程名称:软件工程1916|W(福州大学) 团队名称: 云打印 作业要求: 项目Beta冲刺(团队) 作业目标:作业集合 团队队员 队员学号 队员姓名 个人博 ...