kubernetes 的helm 部署

kubernetes 的helm 部署

标签(空格分隔):kubernetes系列


  • 一:什么是 Helm
  • 二:Helm部署

一:什么是 Helm

在没使用 helm 之前,向 kubernetes 部署应用,我们要依次部署 deployment、svc 等,步骤较繁琐。况且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂,helm 通过打包的方式,支持发布的版本管理和控制,很大程度上简化了 Kubernetes 应用的部署和管理

Helm 本质就是让 K8s 的应用管理(Deployment,Service 等 ) 可配置,能动态生成。通过动态生成 K8s 资源清
单文件(deployment.yaml,service.yaml)。然后调用 Kubectl 自动执行 K8s 资源部署

Helm 是官方提供的类似于 YUM 的包管理器,是部署环境的流程封装。Helm 有两个重要的概念:chart 和release

chart 是创建一个应用的信息集合,包括各种 Kubernetes 对象的配置模板、参数定义、依赖关系、文档说
明等。chart 是应用部署的自包含逻辑单元。可以将 chart 想象成 apt、yum 中的软件安装包

release 是 chart 的运行实例,代表了一个正在运行的应用。当 chart 被安装到 Kubernetes 集群,就生成
一个 release。chart 能够多次安装到同一个集群,每次安装都是一个 release

Helm 包含两个组件:Helm 客户端和 Tiller 服务器,如下图所示

Helm 客户端负责 chart 和 release 的创建和管理以及和 Tiller 的交互。Tiller 服务器运行在 Kubernetes 集群
中,它会处理 Helm 客户端的请求,与 Kubernetes API Server 交互

二:Helm部署

越来越多的公司和团队开始使用 Helm 这个 Kubernetes 的包管理器,我们也将使用 Helm 安装 Kubernetes 的常用
组件。 Helm 由客户端命 helm 令行工具和服务端 tiller 组成,Helm 的安装十分简单。 下载 helm 命令行工具到
master 节点 node1 的 /usr/local/bin 下,这里下载的 2.13. 1版本:

wget https://storage.googleapis.com/kubernetes-helm/helm-v2.13.1-linux-amd64.tar.gz
tar -zxvf helm-v2.13.1-linux-amd64.tar.gz
cd linux-amd64/
cp -p helm /usr/local/bin/
chmod a+x /usr/local/bin/helm


为了安装服务端 tiller,还需要在这台机器上配置好 kubectl 工具和 kubeconfig 文件,确保 kubectl 工具可以
在这台机器上访问 apiserver 且正常使用。 这里的 node1 节点以及配置好了 kubectl
因为 Kubernetes APIServer 开启了 RBAC 访问控制,所以需要创建 tiller 使用的 service account: tiller 并分
配合适的角色给它。 详细内容可以查看helm文档中的 Role-based Access Control。 这里简单起见直接分配
cluster- admin 这个集群内置的 ClusterRole 给它。创建 rbac-config.yaml 文件:

vim rbac-tiller.yaml
-----
apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: tiller
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: tiller
    namespace: kube-system
----

上传helm-tiller的镜像到所有 节点

docker load -i helm-tiller.tar

kubectl apply -f rbac-tiller.yaml

helm init --service-account tiller --skip-refresh

kubectl get pod -n kube-system

helm version 


helm 的自定义模板

创建自描述文件 Chart.yaml , 这个文件必须有 name 和 version 定义

cat <<‘EOF‘ > ./Chart.yaml
name: hello-world
version: 1.0.0
EOF


创建模板文件, 用于生成 Kubernetes 资源清单(manifests)

cat <<‘EOF‘ > ./templates/deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: hello-world
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: hello-world
    spec:
      containers:
        - name: hello-world
          image: wangyanglinux/myapp:v1
          ports:
           - containerPort: 80
             protocol: TCP
EOF

cat <<‘EOF‘ > ./templates/service.yaml
apiVersion: v1
kind: Service
metadata:
  name: hello-world
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
  selector:
    app: hello-world
EOF

cd /root/hello-world

helm install .


 列出已经部署的 Release
$ helm ls
# 查询一个特定的 Release 的状态
$ helm status RELEASE_NAME
# 移除所有与这个 Release 相关的 Kubernetes 资源
$ helm delete cautious-shrimp
# helm rollback RELEASE_NAME REVISION_NUMBER
$ helm rollback cautious-shrimp 1
# 使用 helm delete --purge RELEASE_NAME 移除所有与指定 Release 相关的 Kubernetes 资源和所有这个
Release 的记录
$ helm delete --purge cautious-shrimp
$ helm ls --deleted


配置体现在配置文件 values.yaml
vim values.yaml
---
image:
  repository: wangyanglinux/myapp
  tag: ‘v2‘
---

cd templates

vim deployment.yaml
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: hello-world
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: hello-world
    spec:
      containers:
        - name: hello-world
          image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
          ports:
           - containerPort: 80
             protocol: TCP
----

cd /root/test

helm ls
helm upgrade knobby-terrier .


 在 values.yaml 中的值可以被部署 release 时用到的参数 --values YAML_FILE_PATH 或 --set key1=value1, key2=value2 覆盖掉

helm install --set image.tag=‘v3‘

helm upgrade factual-swan --set image.tag=‘v2‘ .


helm ls --deleted 

helm deleted --purge falling-indri knobby-terrier messy-seastar roiling-sasquatch  

--- purge 表示彻底删除 release


关于回滚 还原 

helm rollback RELEASE_NAME REVISION_NUMBER
---

helm install --name nginx1 .

helm ls 

helm upgrade nginx1 .

helm histroy nignx1 

helm rollback nginx1 1


debug :

# 使用模板动态生成K8s资源清单,非常需要能提前预览生成的结果。
# 使用--dry-run --debug 选项来打印出生成的清单文件内容,而不执行部

helm install . --dry-run --debug --set image.tag=latest

原文地址:https://blog.51cto.com/flyfish225/2483775

时间: 2024-10-05 17:25:48

kubernetes 的helm 部署的相关文章

使用Helm部署Prometheus和Grafana监控Kubernetes

使用Helm部署Prometheus和Grafana监控Kubernetes [TOC] 1. 环境说明 可用的kubernetes集群 可用的持久化存储 可用的helm 这里我们使用kubeapps管理charts. 2. 安装chart 安装时,适当修改values.yaml里的参数以适应自身的环境.我是设置持久化存储.ingress和证书secret. 安装Prometheus 安装成功后,注意提示页面的提示.同一namespace里,引用域名可只使用前面一段. 同理,安装stable/m

Kubernetes部署(十二):helm部署harbor企业级镜像仓库

相关内容: Kubernetes部署(一):架构及功能说明Kubernetes部署(二):系统环境初始化Kubernetes部署(三):CA证书制作Kubernetes部署(四):ETCD集群部署Kubernetes部署(五):Haproxy.Keppalived部署Kubernetes部署(六):Master节点部署Kubernetes部署(七):Node节点部署Kubernetes部署(八):Flannel网络部署Kubernetes部署(九):CoreDNS.Dashboard.Ingre

kubernetes 的EFK 部署日志管理工具

kubernetes 的EFK 部署 标签(空格分隔): kubernetes系列 一: kubernetes 的EFK 部署 一: kubernetes 的EFK 部署 1.1 关于pod的日志信息 cd /var/log/containers/ ls ls -lrt * 1.2 kubernetes 的EFK 部署 添加 Google incubator 仓库 helm repo add incubator http://storage.googleapis.com/kubernetes-c

kubernetes集群部署

鉴于Docker如此火爆,Google推出kubernetes管理docker集群,不少人估计会进行尝试.kubernetes得到了很多大公司的支持,kubernetes集群部署工具也集成了gce,coreos,aws等iaas平台,部署起来也相当的方便.鉴于网上众多资料基于的是不少老版本,本篇文章针对最新的kubernetes及其依赖组件的部署简要阐述.通过本文可以比较粗暴的运行你的kubernetes集群,要优雅还需要更多的工作.部署主要分为三步: 1.准备机器并打通网络 如果要部署kube

Kubernetes集群部署DNS服务

Kubernetes集群部署DNS服务在kubernetes中每一个service都会被分配一个虚拟IP,每一个Service在正常情况下都会长时间不会改变,这个相对于pod的不定IP,对于集群中APP的使用相对是稳定的. 但是Service的信息注入到pod目前使用的是环境变量的方式,并且十分依赖于pod(rc)和service的创建顺序,这使得这个集群看起来又不那么完美,于是kubernetes以插件的方式引入了DNS系统,利用DNS对Service进行一个映射,这样我们在APP中直接使用域

kubernetes 1.11 部署

kubernetes 1.11 部署 参考文档文档编译 [https://github.com/kubernetes/kubernetes/tree/release-1.11/cluster/images/hyperkube]() 参考文档文档编译 环境安装 1. docker install 所有节点都按照docker yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-rep

CentOS7.5Kubernets(k8s)1.12.2之Helm部署Dashboard(三)

Helm部署Dashboarddashboard所需镜像(v1.10.0)地址:链接:https://pan.baidu.com/s/1vkdYNGjQD0hD_Q0_I_2t3A提取码:7i7k1.#helm install --name dashboard --namespace=kube-system stable/kubernetes-dashboard2.#kubectl edit svc dashboard-kubernetes-dashboard -n kube-system (将

Kubernetes 通过statefulset部署redis cluster集群

Kubernetes 通过statefulset部署redis cluster集群 作者: 张首富 时间: 2019-02-19 个人博客地址: https://www.zhangshoufu.com QQ群: 895291458 需要有redis基础 Redis集群架构图 每个Mater 都可以拥有多个slave.当Master掉线后,redis cluster集群会从多个Slave中选举出来一个新的Matser作为代替,而旧的Master重新上线后变成 Master 的Slave. 部署re

Kubernetes之kubeadm部署集群

目录 Kubernetes之kubeadm部署集群 1.部署前准备 2.集群初始化 Kubernetes之kubeadm部署集群 kubeadm是Kubernetes项目自带的集群构建工具,它负责执行构建一个最小化的可用集群以及将其启动等的必要基本步骤,简单来讲,kubeadm是Kubernetes集群全生命周期的管理工具,可用于实现集群的部署.升级/降级及拆除. kubeadm集成了kubeadminit和kubeadmjoin等工具程序,其中kubeadminit用于集群的快速初始化,初始化