k8s之Helm基础与Rancher的安装

k8s之Helm基础

Helm简介

《k8s之Helm基础与Rancher的安装》

产生背景

使用K8s部署一个应用,涉及到很种K8s资源的协作,如Deployment、Service、Secret、pv、 pvc 等。这么多资源,且过于分散,使用kubectl来进行维护和创建,极其不方便。

Helm将应用的一系列资源当做一个软件包来管理,统一管理、配置和更新这些分散的 k8s 的应用资源文件,分发和复用一套应用模板。可以将Hlem类比为yum,apt。

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

  • 查找要安装和使用的预打包软件
  • 轻松创建和托管自己的软件包
  • 将软件包安装到任何 K8S 集群中
  • 查询集群以查看已安装和正在运行的程序包
  • 更新、删除、回滚或查看已安装软件包的历史记录

Helm的一些概念

  1. helm :一个命令行工具,Helm的客户端,用于本地开发及管理chart,chart仓库管理等
  2. Tiller :Helm 的服务端。Tiller 负责接收 Helm 的请求,与 k8s 的 apiserver 交互,根据chart 来生成一个 release 并管理 release.Helm3移除Tiller。
  3. chart:Helm的打包格式叫做chart,chart就是一系列k8s文件, 它描述了一组相关的 k8s 集群资源
  4. release :chart的运行实例,当 chart 被发布后,Helm 库会创建一个 release 来跟踪这个发布的对象。你可以用不同的release name多次安装同一个chart:有点像镜像和容器的关系。
  5. Repoistory:Helm chart 的仓库,用来存chart包,和 yum repository类似。

Helm命令

1、应用管理操作

#列出charts仓库中所有可用的应用
helm search

#查询指定应用
helm search memcached

#查询指定应用的具体信息
helm inspect stable/memcached

#用helm安装软件包,--name:指定release名字
helm install --name memcached1 stable/memcached

#查看安装的软件包
helm list

#删除指定引用
helm delete memcached1

2、Helm repository仓库管理命令

#添加chart仓库
helm repo add <仓库名称> <仓库URI地址>   

#查看chart仓库列表
helm repo list

#更新chart仓库中的chart软件包列表
helm repo update

#删除chart仓库
helm repo remove  <仓库名称>

#查看仓库中可用的chart包列表
helm search repo <仓库名称>

#查看仓库中指定的chart包的所有历史版本列表
helm search repo <仓库名称/软件包> -l

#查看chart包的基本信息
helm show chart <仓库名称/软件包>   

#查看chart包的所有信息
helm show all <仓库名称/软件包>


2.2 Helm chart包管理命令
#从仓库拉取chart包
helm pull <仓库名称/软件包> 

#创建一个chart目录
helm create <软件包>  

#检查chart配置语法是否正确
helm lint <chart目录> 

#将chart目录打包成chart包(tar包格式)
helm package <chart目录>

3、Helm release(实例) 管理命令

#通过chart包安装实例
1、helm install <实例名称> <仓库名称/软件包> -n 命名空间 [--version=<chart版本>] 

#还可以通过其他方式安装
2、本地 chart 压缩包(helm install foo foo-0.1.1.tgz)
3、解压后的 chart 目录(helm install foo path/to/foo)
4、完整的 URL(helm install foo https://example.com/charts/foo-1.2.3.tgz)


#查看helm安装的实例
helm ls|list -n 命名空间

#查看实例的状态
helm status <实例名称> -n 命名空间

#卸载实例
helm uninstall <实例名称> -n 命名空间、
helm uninstall 的时候提供 --keep-history 选项, Helm将会保存版本历史。可以用helm status 查看,进而用helm rollback 回滚版本。


#升级实例
helm upgrade -n 命名空间 <实例名称> <chart包>
指定配置文件升级
helm upgrade -f panda.yaml happy-panda bitnami/wordpress
helm get values 命令来看看配置值是否真的生效了

#查看实例的历史版本列表
helm history -n 命名空间 <实例名称>

#回滚实例到指定的chart历史版本
helm rollback -n 命名空间 <实例名称> <chart版本序号>    

4、Helm私有仓库管理命令

私有仓库地址格式: http://<私有仓库URL地址>/chartrepo/<项目名>

helm repo add <私有仓库名称> <私有仓库地址> --username=<仓库用户> --password=<用户密码>

helm push <chart包> <私有仓库名称>

安装Helm

Helm中文文档

helm和k8s版本对应关系
《k8s之Helm基础与Rancher的安装》

下载 Helm 二进制文件安装

 wget https://get.helm.sh/helm-v3.14.4-linux-amd64.tar.gz
 解压缩
 tar -zxvf helm-v3.14.4-linux-amd64.tar.gz
 复制 helm 二进制 到bin目录下
 cp linux-amd64/helm /usr/local/bin/
 chmod a+x /usr/local/bin/helm
source ~/.bashrc

#运行以下命令使用命令自动补全

cat >>  ~/.bashrc <<EOF
source <(helm completion bash)
EOF
source ~/.bashrc

Helm基本使用

仓库使用

添加常用仓库

#添加 Bitnami 官方仓库
helm repo add bitnami https://charts.bitnami.com/bitnami

#添加 Azure 中国提供的稳定版 Helm Charts 仓库,该仓库中包含了丰富的 Kubernetes 应用的 Helm Charts
helm repo add stable http://mirror.azure.cn/kubernetes/charts

#阿里云提供的 Helm Charts 仓仓库
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

#添加官方稳定仓库
helm repo add stable https://charts.helm.sh/stable

#添加官方测试仓库(可能添加不上)
helm repo add incubator https://charts.helm.sh/incubator

更新仓库获取数据
helm repo update

查看仓库
helm repo list

《k8s之Helm基础与Rancher的安装》

helm search 两种来源中进行搜索:
– helm search hub 从 Artifact Hub 中查找并列出 helm charts。 Artifact Hub中存放了大量不同的仓库。
– helm search repo 从你添加(使用 helm repo add)到本地 helm 客户端中的仓库中进行查找。该命令基于本地数据进行搜索,无需连接互联网。

查看stable仓库可用的charts列表
helm search repo stable
《k8s之Helm基础与Rancher的安装》

查看指定chart的信息,是show all的头部信息
helm show chart stable/mysql

查看指定chart的所有信息,非常详细
helm show all stable/mysql

《k8s之Helm基础与Rancher的安装》

chart的结构

[root@k8s-master01 helm]# helm create nginx
Creating nginx
[root@k8s-master01 helm]# tree nginx/
nginx/
├── charts
├── Chart.yaml
├── templates
│   ├── deployment.yaml
│   ├── _helpers.tpl
│   ├── hpa.yaml
│   ├── ingress.yaml
│   ├── NOTES.txt
│   ├── serviceaccount.yaml
│   ├── service.yaml
│   └── tests
│   └── test-connection.yaml
└── values.yaml

  • charts 目录 可以 包含其他的chart(称之为 子chart)。
  • Chart.yaml 文件包含了该chart的描述。可以从模板中访问它。
  • templates 目录包括了模板文件。当Helm评估chart时,会通过模板渲染引擎将所有文件发送到templates/目录中。 然后收集模板的结果并发送给
  • values.yaml 这个文件包含了chart的 默认值 。这些值会在用户执行helm install 或 helm upgrade时被覆盖。

NOTES.txt chart的”帮助文本”。这会在你的用户执行helm install时展示给他们。
_helpers.tpl: 放置可以通过chart复用的模板辅助对象

部署redis

#指定 release 的名字为my-redis,-n 指定应用到k8s 的 namespace
helm install my-redis bitnami/redis [-n default]

注意reis部署需要pv,不然报错
《k8s之Helm基础与Rancher的安装》

删除redis
helm uninstall my-redis

修改chart默认配置

以上是使用默认的配置,但是可能不可能完全符合需求
使用 helm show values 可以查看 chart 中的可配置选项

[root@k8s-master01 helm]# helm show values stable/redis | egrep -v '^( *#|$)'
global:
  redis: {}
image:
  registry: docker.io
  repository: bitnami/redis
  tag: 5.0.7-debian-10-r32
  pullPolicy: IfNotPresent
.......省略........
  resources: {}
podSecurityPolicy:
  create: false

然后可以使用 YAML 格式的文件覆盖上述任意配置项,并在安装过程中使用该文件。

echo '{mariadb.auth.database: user0db, mariadb.auth.username: user0}' > values.yaml
helm install -f values.yaml bitnami/wordpress --generate-name
 --generate-name 自动生成名字

安装过程中有两种方式传递配置数据:

--values (或 -f):使用 YAML 文件覆盖配置。可以指定多次,优先使用最右边的文件。
--set:通过命令行的方式对指定项进行覆盖。


--set a=b,c=d   set多个值用逗号隔开
--set name={a, b, c} set列表使用花括号
--set servers[0].port=80 2.5开始使用数组下标来访问列表

使用Helm安装Rancher

Rancher官网
Rancher和k8s的版本对应关系
《k8s之Helm基础与Rancher的安装》
cert-manager官网

自动添加证书配置

helm repo add rancher-latest https://releases.rancher.com/server-charts/latest
kubectl create namespace cattle-system
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.14.5/cert-manager.crds.yaml
helm repo add jetstack https://charts.jetstack.io
helm repo update

kubectl create namespace  cert-manager
helm install my-release --namespace cert-manager --version v1.14.5 jetstack/cert-manager
helm install rancher rancher-latest/rancher \
  --namespace cattle-system \
  --set hostname=myrancher.com \
  --set replicas=1 \
  --set bootstrapPassword=admin \
  --set ingress.extraAnnotations.'kubernetes\.io/ingress\.class'=nginx

《k8s之Helm基础与Rancher的安装》
如果不加

--set ingress.extraAnnotations.'kubernetes\.io/ingress\.class'=nginx

会无法在外部访问rancher,需要给ingress添加注解或者修改ingressClasssNmae,两者二选一

kubernetes.io/ingress.class: nginx
《k8s之Helm基础与Rancher的安装》

ingressClassName: nginx
《k8s之Helm基础与Rancher的安装》

输入域名进行访问,我的ingressController设置是30080和30043端口访问,看个人设置,一般大家可以直接80访问

https://myrancher.com:30043/
《k8s之Helm基础与Rancher的安装》
最后的server URL好像不做解析也可以

修改语言为中文
《k8s之Helm基础与Rancher的安装》

点击local即可查看本机k8s集群了
《k8s之Helm基础与Rancher的安装》

问题及解决

pod has unbound immediate PersistentVolumeClaims

0/3 nodes are available: pod has unbound immediate PersistentVolumeClaims. preemption: 0/3 nodes are available: 3 Preemption is not helpful for scheduling..

没有pv导致错误,安装nfs,创建pv即可,例如nfs在192.168.126.23,pv挂载在/data/k8svolumes/v2

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv02
  labels:
    name: pv02
spec:
  nfs:
    server: 192.168.126.23
    path: /data/k8svolumes/v2
  accessModes: ["ReadWriteOnce"]
  capacity:
   storage: 5Gi

FATAL CONFIG FILE ERROR (Redis 7.2.5)

Reading the configuration file, at line 1
>>> 'dir /data'
Permission denied

也是pv的问题,删除pvc、pv重新生成即可

参考

Rancher官网
【云原生-Kurbernetes篇】 玩转K8S不得不会的HELM

点赞

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注