Timón en K8S

Prefacio

En nuestra herramienta de administración yum , resuelve principalmente el problema de dependencia entre paquetes, mientras que nuestra herramienta helm se trata de instalar servicios. La herramienta de administración de paquetes helm en nuestros k8 puede descargar algunas de las cosas que queremos a través de algunos almacenes. archivos yalm, podemos modificar las propiedades correspondientes de estos archivos yalm para instalar la información del sistema que queremos.

1. Descripción general del timón

1. Introducción a Helm

Helm es una herramienta de administración de paquetes de software en el ecosistema de Kubernetes. Similar a apt de ubuntu, yum de centos o pip de python, es específicamente responsable de administrar los recursos de las aplicaciones de kubernetes. Con helm, puede empaquetar, distribuir, instalar, actualizar y actualizar kubernetes de manera uniforme aplicaciones Reversión y otras operaciones.

Helm es una herramienta cliente que simplifica la instalación y la implementación de aplicaciones de contenedores en la nube en Kubernetes. Helm puede ayudar a los desarrolladores a definir, instalar y actualizar aplicaciones de nube de contenedores en Kubernetes, y también puede compartir aplicaciones de nube de contenedores a través de helm. Kubeapps Hub proporciona aplicaciones comunes, incluidas Redis, MySQL y Jenkins, que se pueden implementar e instalar en su propio clúster de Kubernetes con un solo comando a través de helm.

Helm es una herramienta para administrar paquetes de Kubernetes. Helm puede proporcionar las siguientes capacidades:

  1. Crear nuevos gráficos (gráficos)
  2. Empaquetar gráficos en archivos tgz
  3. Interactuar con el repositorio de gráficos
  4. Instalar y desinstalar aplicaciones de Kubernetes
  5. Administrar el ciclo de vida de los gráficos instalados usando Helm

2. Arquitectura del timón

La arquitectura Helm consta del cliente Helm, el servidor Tiller y  el  almacén de Chart; Tiller se implementa en Kubernetes y el cliente Helm obtiene el paquete de instalación de Chart del almacén de Chart y lo instala e implementa en el clúster de Kubernetes.

Proceso de instalación del gráfico:

  • Helm analiza la información de la estructura del gráfico desde el directorio especificado o el archivo tgz
  • Helm pasa la estructura del gráfico especificada y la información de valores a Tiller a través de gRPC
  • Tiller genera una versión basada en gráficos y valores
  • Tiller envía la versión a Kubernetes para que se ejecute.

Proceso de actualización de gráficos:

  • Helm analiza la información de la estructura del gráfico desde el directorio especificado o el archivo tgz
  • Helm pasará el nombre y la estructura del gráfico de la versión que se actualizará, así como la información de valores a Tiller.
  • Tiller genera una versión y actualiza el historial de la versión con el nombre especificado
  • Tiller envía Release a Kubernetes para que se ejecute

Proceso de reversión del gráfico:

  • Helm pasa el nombre de la versión que se revertirá a Tiller
  • Tiller encuentra el historial según el nombre de la versión
  • Tiller obtiene la versión anterior de la historia
  • Tiller envía la versión anterior a Kubernetes para reemplazar la versión actual

3. Componente del timón

在 Helm 中有两个主要的组件,即 Helm 客户端和 Tiller 服务器

3.1 dobladillo

Helm es una herramienta cliente de línea de comandos. Se utiliza principalmente para la creación, empaquetado y publicación de gráficos de aplicaciones de Kubernetes, así como para la creación y gestión de repositorios de gráficos locales y remotos.

El cliente es responsable de las siguientes tareas:

  • Desarrollo de gráficos locales
  • Administrar almacén
  • Interactuar con el servidor de Tiller (enviar gráficos para instalar, solicitar información sobre lanzamientos, solicitar actualizaciones o desinstalar lanzamientos instalados)

3.2 cultivador

Tiller es el servidor de Helm y está implementado en un clúster de Kubernetes. Tiller se utiliza para recibir la solicitud de Helm y generar el archivo de implementación de Kubernetes (Helm lo llama Lanzamiento) según el gráfico, y luego enviarlo a Kubernetes para crear la aplicación. Tiller también proporciona una serie de funciones como actualización de versión, eliminación, reversión, etc.

El servidor de Tiller es responsable de las siguientes tareas:

  • Escuche las solicitudes de los clientes de Helm
  • Combine gráficos y configuraciones para crear una publicación
  • Instalar en Kubernetes y realizar un seguimiento de las versiones posteriores
  • 通过与 Kubernetes 交互,更新或者 chart

3.3 Chart

Helm 的软件包,采用 TAR 格式。类似于 APT 的 DEB 包或者 YUM 的 RPM 包,其包含了一组定义 Kubernetes 资源相关的 YAML 文件。

3.4 Repository

Helm 的软件仓库,Repository 本质上是一个 Web 服务器,该服务器保存了一系列的 Chart 软件包以供用户下载,并且提供了一个该 Repository 的 Chart 包的清单文件以供查询。Helm 可以同时管理多个不同的 Repository。 

3.5 Release

使用 helm install 命令在 Kubernetes 集群中部署的 Chart 称为 Release。

注意:需要注意的是:Helm 中提到的 Release 和我们通常概念中的版本有所不同,这里的 Release 可以理解为 Helm 使用 Chart 包部署的一个应用实例。

二、Helm 部署

Helm 的安装方式很多,这里采用二进制的方式安装。更多安装方法可以参考 Helm 的官方帮助文档。

1、安装Helm 客户端

#wget https://get.helm.sh/helm-v2.14.3-linux-amd64.tar.gz
[root@master ~]# wget http://101.34.22.188/k8s/helm-v2.14.3-linux-amd64.tar.gz
[root@master ~]# tar zxvf helm-v2.14.3-linux-amd64.tar.gz    
[root@master ~]# mv linux-amd64/helm /usr/local/bin/
[root@master ~]# chmod +x /usr/local/bin/helm 
[root@master ~]# echo 'source <(helm completion bash)' >> /etc/profile
[root@master ~]# . /etc/profile

2、安装 Tiller server(需要创建授权用户)

#创建授权用户
[root@master ~]# vim tiller-rbac.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
[root@master ~]# kubectl apply -f tiller-rbac.yaml
[root@master ~]# helm init --service-account=tiller
[root@master ~]# kubectl get pod -n kube-system | grep tiller
[root@master ~]# kubectl edit pod tiller-deploy-8557598fbc-tvfsj -n kube-system
//编辑 pod 的 yaml 文件,将其使用的镜像改为国内阿里云的,默认是 Google 的镜像,下载不下来
//修改 spec 字段的 image 指定的镜像如下:
    image: gcr.io/kubernetes-helm/tiller:v2.14.3
//修改如下:
    image: registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.14.3
//修改后,保存退出即可,它会去自动下载新镜像(如果没有自动下载,就想办法吧,比如说在 tiller 容器所在的节点手动下载下来镜像,然后重启该节点的 kubelet,或重启该容器)
[root@master ~]# kubectl get pod -n kube-system | grep tiller
//只要保证 tiller 的 pod 正常运行即可
tiller-deploy-8557598fbc-m986t   1/1     Running   0          7m54s

3、配置 helm 仓库

[root@master ~]# helm repo list      //查看其仓库信息
NAME      URL                                             
stable    https://kubernetes-charts.storage.googleapis.com
//如上,默认是 Google,在国外,速度特别慢
local     http://127.0.0.1:8879/charts    
//执行下面命令,更改为国内阿里云的仓库
[root@master ~]# helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
[root@master ~]# helm repo list      //再次查看,可以发现更改生效了
NAME      URL                                                   
stable    https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
local     http://127.0.0.1:8879/charts        
[root@master ~]# helm repo update    //更新一下 helm 仓库
[root@master ~]# helm version        //查看 helm 版本信息,必须保证可以查看出来 client 和 server,才可正常使用 helm
Client: &version.Version{SemVer:"v2.14.3", GitCommit:"0e7f3b6637f7af8fcfddb3d2941fcc7cbebb0085", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.14.3", GitCommit:"0e7f3b6637f7af8fcfddb3d2941fcc7cbebb0085", GitTreeState:"clean"}
 

4、测试 helm 是否可以正常使用

[root@master ~]# helm search mysql      //搜索 MySQL
//查看到的是 charts 包文件,查出来的版本是 helm 的 Charts 包的版本
[root@master ~]# helm inspect stable/mysql    //查看其详细信息
[root@master ~]# helm fetch stable/mysql      //下载搜索到的包到本地
[root@master templates]# helm install stable/mysql     //在线安装这个 MySQL

三、helm仓库的基本操作

1、如何查看配置的存储库

helm repo list
 
helm search repo aliyun

删除存储库

helm repo remove aliyun

2、使用helm快速部署一个应用

第一步: 使用搜索命令搜索应用

helm search repo 应用名称

[root@master1 k8s]# helm  search repo weave
NAME                  CHART VERSION    APP VERSION    DESCRIPTION                                       
aliyun/weave-cloud    0.1.2                           Weave Cloud is a add-on to Kubernetes which pro...
aliyun/weave-scope    0.9.2            1.6.5          A Helm chart for the Weave Scope cluster visual...

第二步:根据搜索内容选择安装

helm install 安装后应用的名称 搜索之后应用的名称

第三步:查看安装之后的状态

helm list
 
helm status 安装之后应用的名称

[root@master1 k8s]# helm list   #也可以使用helm ls   
NAME       NAMESPACE    REVISION    UPDATED                                    STATUS      CHART                APP VERSION
ui-test    default      1           2023-03-13 15:00:00.561399142 +0800 CST    deployed    weave-scope-0.9.2    1.6.5      
[root@master1 k8s]# 

当然我们也可以通过kubectl命令查看相关的pod是否创建成功

四、 自定义chart

自定义选项是因为并不是所有的 chart 都能按照默认配置运行成功,可能会需要一些环境 依赖,例如 PV。 所以我们需要自定义 chart 配置选项,安装过程中有两种方法可以传递配置数据:

  • --values(或-f):指定带有覆盖的 YAML 文件。这可以多次指定,最右边的文件 优先
  • --set:在命令行上指定替代。如果两者都用,--set 优先级高

第一步:使用命令创建chart

helm create chart名称

[root@master1 k8s]# helm create mychart
Creating mychart
[root@master1 k8s]# 
[root@master1 k8s]# ls mychart/
charts  Chart.yaml  templates  values.yaml
[root@master1 k8s]# cd mychart
[root@master1 mychart]# ls -al
总用量 12
drwxr-xr-x 4 root root   93 10月 23 20:01 .
drwxr-xr-x 6 root root  233 10月 23 20:01 ..
drwxr-xr-x 2 root root    6 10月 23 20:01 charts
-rw-r--r-- 1 root root  905 10月 23 20:01 Chart.yaml
-rw-r--r-- 1 root root  342 10月 23 20:01 .helmignore
drwxr-xr-x 3 root root  146 10月 23 20:01 templates
-rw-r--r-- 1 root root 1490 10月 23 20:01 values.yaml
[root@master1 mychart]# 

分析一下相关目录的含义:

charts:普通文件夹,刚开始创建为空

Chart.yaml:用于配置当前chart的属性信息,可以作为全局变量提供给模板文件使用

templates:目标信息文件,里面有很多的yaml模板文件,我们使用helm创建应用相当于helm帮我去执行这些yaml文件了。

[root@master1 templates]# ls -al 
总用量 24
drwxr-xr-x 3 root root  146 10月 23 20:01 .
drwxr-xr-x 4 root root   93 10月 23 20:05 ..
-rw-r--r-- 1 root root 1626 10月 23 20:01 deployment.yaml
-rw-r--r-- 1 root root 1847 10月 23 20:01 _helpers.tpl
-rw-r--r-- 1 root root 1030 10月 23 20:01 ingress.yaml
-rw-r--r-- 1 root root 1581 10月 23 20:01 NOTES.txt
-rw-r--r-- 1 root root  207 10月 23 20:01 serviceaccount.yaml
-rw-r--r-- 1 root root  361 10月 23 20:01 service.yaml
drwxr-xr-x 2 root root   34 10月 23 20:01 tests
[root@master1 templates]# 

因为我们需要自己自定义chart,因此我们可以修改这些yaml文件,也可以删除这些默认生成的yaml文件,然后自己重新写。

[root@master1 templates]# rm -rf *
[root@master1 templates]# ls
[root@master1 templates]# ls -al 
总用量 0
drwxr-xr-x 2 root root  6 10月 23 20:07 .
drwxr-xr-x 4 root root 93 10月 23 20:05 ..
[root@master1 templates]# 

values.yaml:全局变量文件,提供给templates里面的yaml文件用

第二步:在templates文件夹中创建两个yaml文件 

为了方便得到service.yaml,我们事先创建了一个web1的服务,得到service.yaml文件之后,再删除这个服务。

第三步:开始安装mychart

[root@master1 k8s]# helm install web1 mychart/
NAME: web1
LAST DEPLOYED: Sat Oct 23 20:25:23 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
[root@master1 k8s]# 
[root@master1 k8s]# kubectl get svc,pod 
NAME                          TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
service/kubernetes            ClusterIP   10.1.0.1      <none>        443/TCP        108m
service/ui-test-weave-scope   ClusterIP   10.1.107.92   <none>        80/TCP         33m
service/web1                  NodePort    10.1.25.42    <none>        80:32142/TCP   25s
 
NAME                                                READY   STATUS    RESTARTS   AGE
pod/weave-scope-agent-ui-test-gb42z                 1/1     Running   0          33m
pod/weave-scope-frontend-ui-test-77f49fbcd5-j6mrs   1/1     Running   0          33m
pod/web1-74b5695598-t65gj                           1/1     Running   0          25s
[root@master1 k8s]# 

第四步:更新应用

helm upgrade chart名称

更新应用的话,一般更新我们的宏定义变量

[root@master1 k8s]# helm upgrade web1 mychart/
Release "web1" has been upgraded. Happy Helming!
NAME: web1
LAST DEPLOYED: Sat Oct 23 20:29:06 2022
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE: None
[root@master1 k8s]# 

第五步:删除应用

[root@master1 ~]# helm uninstall ui-test
release "ui-test" uninstalled
[root@master1 ~]# 

1、chart模板的使用

helm可以把我们的yaml文件统一做整体管理,另外可以让我们的yaml文件实现高效的复用。下面就试验如何实现yaml文件的高效的复用,即如何模板,我们动态的渲染模板,动态的传入参数。就是values.yaml使用。

yaml文件中大体中image,tag,label,port,replicas不同,即我们把它们当做宏定义。

第一步:在values.yaml定义变量和值

[root@master1 mychart]# cat values.yaml 
# Default values for mychart.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
replicas: 1
image: nginx
tag: 1.16
lable: nginx
port: 80
 
podSecurityContext: {}
[root@master1 mychart]# 

第二步:在具体的yaml中获取定义的变量值

Utilice variables globales en forma de expresión,

{ { . Valores.Nombre de la variable}}

{ { . Release.Name}} significa obtener el nombre de la versión actual, asegurando que el nombre sea diferente para cada implementación. Este es un atributo de objeto integrado de helm.

Objetos integrados de uso común en helm:

Lanzamiento.Nombre nombre de lanzamiento
Lanzamiento.Nombre nombre de lanzamiento
Lanzamiento.Espacio de nombres liberar espacio de nombres
Servicio.de.liberación nombre del servicio de liberación
Lanzamiento.Revisión número de revisión de lanzamiento, contando desde 1

Primero es valores.yaml

[root@master1 mychart]# cat values.yaml 
# Default values for mychart.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
replicas: 1
image: nginx
tag: 1.16
label: nginx
port: 80
 
podSecurityContext: {}
[root@master1 mychart]# 

Luego está el contenido en plantillas.

Después de editar los archivos relevantes, lo verificamos, si no se informa ningún error, significa éxito.

Implementarlo realmente

Supongo que te gusta

Origin blog.csdn.net/mcl914/article/details/129610508
Recomendado
Clasificación