1、概述

我们一般是在k8s里面部署一些简单的应用,比如用deployment,daemonset,statefuleset的方式来部署应用,但是如果要部署一些复杂的应用,那么整个配置的编写、部署的过程就会变的更加的复杂,那么helm这个工具就可以来帮助解决这个复杂应用的部署问题。

helm可以类比与linux环境下yum部署应用的方式,只需要执行几条命令,就可以将应用需要的配置、依赖都部署到环境中。同样,helm也是通过几条简单的命令,将某个应用需要的配置、依赖都部署到了k8s集群上。

本文档就通过helm的安装和使用的角度来介绍下helm这个k8s的应用包管理工具。

2、helm中基本概念

在helm这个工具的使用中,主要有3个基本的概念需要了解:

Chart: chart就是helm中的包。类似yum安装中使用的rpm包。chart安装到k8s之后就是一个应用,那么chart中就包含了所有需要的资源的定义。

Repository: chart存放的位置。类似yum源的概念。

Release: chart在k8s集群中运行起来之后形成的实例。就类似与部署一个deployment要给一个名字一样。一个chart可以在同一个集群中被安装很多次,每一次的安装,都会创建一个新的release。就和拿一个redis的安装包可以安装很多次一样的。每次安装都有一个实例对应有自己的端口号,配置一样的。

那么针对以上的概念的说明,针对helm可以有如下的表述:

helm在chart仓库中获得chart,然后将chart安装到k8s集群中,每次安装都创建一个release.

3、helm的安装

可以通过预编译的二进制文件来安装helm的客户端命令,具体的版本可以到helm的github上去下载:

https://github.com/helm/helm/releases

本文档使用的版本:

https://get.helm.sh/helm-v3.7.2-linux-amd64.tar.gz

注意:安装在包含kubeconfig的主机上,这样helm就可以操作k8s集群来部署对应的应用,helm默认去"~/.kube/config"目录下获取kubeconfig来连接k8s集群。

安装过程

(1)先上传helm的压缩包到服务器

(2)解压并且复制helm命令

tar -zxf helm-v3.7.2-linux-amd64.tar.gz \
&& cd linux-amd64 \
cp helm /usr/local/bin/

(3)验证helm命令

输入helm命令,如果输出如下,则表示helm安装成功

[root@nccztsjb-node-11 linux-amd64]# helm
The Kubernetes package manager Common actions for Helm: - helm search: search for charts
- helm pull: download a chart to your local directory to view
- helm install: upload the chart to Kubernetes
- helm list: list releases of charts Environment variables: | Name | Description |
|------------------------------------|-----------------------------------------------------------------------------------|
| $HELM_CACHE_HOME | set an alternative location for storing cached files. |
| $HELM_CONFIG_HOME | set an alternative location for storing Helm configuration. |
| $HELM_DATA_HOME | set an alternative location for storing Helm data. |
| $HELM_DEBUG | indicate whether or not Helm is running in Debug mode |
| $HELM_DRIVER | set the backend storage driver. Values are: configmap, secret, memory, sql. |
| $HELM_DRIVER_SQL_CONNECTION_STRING | set the connection string the SQL storage driver should use. |
| $HELM_MAX_HISTORY | set the maximum number of helm release history. |
| $HELM_NAMESPACE | set the namespace used for the helm operations. |
| $HELM_NO_PLUGINS | disable plugins. Set HELM_NO_PLUGINS=1 to disable plugins. |
| $HELM_PLUGINS | set the path to the plugins directory |
| $HELM_REGISTRY_CONFIG | set the path to the registry config file. |
| $HELM_REPOSITORY_CACHE | set the path to the repository cache directory |
| $HELM_REPOSITORY_CONFIG | set the path to the repositories file. |
| $KUBECONFIG | set an alternative Kubernetes configuration file (default "~/.kube/config") |
| $HELM_KUBEAPISERVER | set the Kubernetes API Server Endpoint for authentication |
| $HELM_KUBECAFILE | set the Kubernetes certificate authority file. |
| $HELM_KUBEASGROUPS | set the Groups to use for impersonation using a comma-separated list. |
| $HELM_KUBEASUSER | set the Username to impersonate for the operation. |
| $HELM_KUBECONTEXT | set the name of the kubeconfig context. |
| $HELM_KUBETOKEN | set the Bearer KubeToken used for authentication. | Helm stores cache, configuration, and data based on the following configuration order: - If a HELM_*_HOME environment variable is set, it will be used
- Otherwise, on systems supporting the XDG base directory specification, the XDG variables will be used
- When no other location is set a default location will be used based on the operating system By default, the default directories depend on the Operating System. The defaults are listed below: | Operating System | Cache Path | Configuration Path | Data Path |
|------------------|---------------------------|--------------------------------|-------------------------|
| Linux | $HOME/.cache/helm | $HOME/.config/helm | $HOME/.local/share/helm |
| macOS | $HOME/Library/Caches/helm | $HOME/Library/Preferences/helm | $HOME/Library/helm |
| Windows | %TEMP%\helm | %APPDATA%\helm | %APPDATA%\helm | Usage:
helm [command] Available Commands:
completion generate autocompletion scripts for the specified shell
create create a new chart with the given name
dependency manage a chart's dependencies
env helm client environment information
get download extended information of a named release
help Help about any command
history fetch release history
install install a chart
lint examine a chart for possible issues
list list releases
package package a chart directory into a chart archive
plugin install, list, or uninstall Helm plugins
pull download a chart from a repository and (optionally) unpack it in local directory
repo add, list, remove, update, and index chart repositories
rollback roll back a release to a previous revision
search search for a keyword in charts
show show information of a chart
status display the status of the named release
template locally render templates
test run tests for a release
uninstall uninstall a release
upgrade upgrade a release
verify verify that a chart at the given path has been signed and is valid
version print the client version information Flags:
--debug enable verbose output
-h, --help help for helm
--kube-apiserver string the address and the port for the Kubernetes API server
--kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups.
--kube-as-user string username to impersonate for the operation
--kube-ca-file string the certificate authority file for the Kubernetes API server connection
--kube-context string name of the kubeconfig context to use
--kube-token string bearer token used for authentication
--kubeconfig string path to the kubeconfig file
-n, --namespace string namespace scope for this request
--registry-config string path to the registry config file (default "/root/.config/helm/registry.json")
--repository-cache string path to the file containing cached repository indexes (default "/root/.cache/helm/repository")
--repository-config string path to the file containing repository names and URLs (default "/root/.config/helm/repositories.yaml") Use "helm [command] --help" for more information about a command.

4、helm的使用

那么这里就要介绍在如何使用helm来安装和管理应用包了。

4.1、获取应用的repository

比如我们要安装一个nginx应用,那么我们首先要知道哪些库,类似于哪些yum源中有这个包,那么方法就是登录如下的地址:

https://artifacthub.io/

这个中包含了所有的有这个应用包的一个汇总

在其中搜索“nginx”

就会有各种组织发布的不同的功能的包含nginx的包。

点开第一个,就会有相关的使用的说明

那么这个https://charts.bitnami.com/bitnami URL就是包含这个chart的仓库。

4.2、helm添加仓库和删除

4.2.1、添加

OK,基于4.1中找到了包含需要的nginx的仓库,那么就要把他加入到helm的repo中,也可以按照上面的查找的nginx的repo页面的描述来添加和安装。

https://artifacthub.io/packages/helm/bitnami/nginx这个页面就有关于这个chart如何安装和使用的具体的说明。

helm repo add bitnami https://charts.bitnami.com/bitnami

其中bitnami是定义的仓库的名字,由于是要加入到本地的,可自行的定义。

执行过程

[root@nccztsjb-node-11 ~]# helm repo add bitnami https://charts.bitnami.com/bitnami
"bitnami" has been added to your repositories

查看仓库列表

[root@nccztsjb-node-11 ~]# helm repo list
NAME URL
bitnami https://charts.bitnami.com/bitnami
[root@nccztsjb-node-11 ~]#

可以看到仓库和对应的URL信息。

4.2.1、删除

可以通过如下的命令进行仓库的删除

helm repo remove bitnami

执行过程

[root@nccztsjb-node-11 ~]# helm repo remove bitnami
"bitnami" has been removed from your repositories
[root@nccztsjb-node-11 ~]# helm repo list
Error: no repositories to show
[root@nccztsjb-node-11 ~]#

可以看到在helm中没有任何的仓库的信息了。

通过以上的库的增加和删除可以看到,就是对helm进行配置将包含chart的url地址添加为helm的仓库。后续helm命令就去这些仓库对应的url中去找需要的chart,获取chart的包,然后部署到k8s上。

4.3、chart的查找

在已经添加的本地库中查找需需要的char即应用包

[root@nccztsjb-node-11 ~]# helm search repo nginx
NAME CHART VERSION APP VERSION DESCRIPTION
bitnami/nginx 9.7.1 1.21.5 Chart for the nginx server
bitnami/nginx-ingress-controller 9.1.2 1.1.1 Chart for the nginx Ingress controller
bitnami/kong 5.0.1 2.7.0 Kong is a scalable, open source API layer (aka ...
[root@nccztsjb-node-11 ~]#

从输出中可以看到软件包的名字,其中的应用的版本信息,chart的版本信息,具体的chart的描述

4.4、chart安装和卸载

4.4.1、安装

以安装nginx的chart为例

helm install helm-nginx bitnami/nginx

install后面就是release的名字,可根据需要自行的定义。

安装过程

[root@nccztsjb-node-11 ~]# helm install helm-nginx bitnami/nginx
NAME: helm-nginx
LAST DEPLOYED: Mon Jan 17 10:33:26 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: nginx
CHART VERSION: 9.7.1
APP VERSION: 1.21.5 ** Please be patient while the chart is being deployed ** NGINX can be accessed through the following DNS name from within your cluster: helm-nginx.default.svc.cluster.local (port 80) To access NGINX from outside the cluster, follow the steps below: 1. Get the NGINX URL by running these commands: NOTE: It may take a few minutes for the LoadBalancer IP to be available.
Watch the status with: 'kubectl get svc --namespace default -w helm-nginx' export SERVICE_PORT=$(kubectl get --namespace default -o jsonpath="{.spec.ports[0].port}" services helm-nginx)
export SERVICE_IP=$(kubectl get svc --namespace default helm-nginx -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
echo "http://${SERVICE_IP}:${SERVICE_PORT}"

安装是异步的,也就是这里提示的只是成功的将chart发布到了k8s中,应用的部署还需要时间。

从其他的信息中也可以知道,如果要访问其中的服务的方法是什么。

    export SERVICE_PORT=$(kubectl get --namespace default -o jsonpath="{.spec.ports[0].port}" services helm-nginx)
export SERVICE_IP=$(kubectl get svc --namespace default helm-nginx -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
echo "http://${SERVICE_IP}:${SERVICE_PORT}"

查看部署的状态

[root@nccztsjb-node-11 ~]# helm status helm-nginx
NAME: helm-nginx
LAST DEPLOYED: Mon Jan 17 10:33:26 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: nginx
CHART VERSION: 9.7.1
APP VERSION: 1.21.5 ** Please be patient while the chart is being deployed ** NGINX can be accessed through the following DNS name from within your cluster: helm-nginx.default.svc.cluster.local (port 80) To access NGINX from outside the cluster, follow the steps below: 1. Get the NGINX URL by running these commands: NOTE: It may take a few minutes for the LoadBalancer IP to be available.
Watch the status with: 'kubectl get svc --namespace default -w helm-nginx' export SERVICE_PORT=$(kubectl get --namespace default -o jsonpath="{.spec.ports[0].port}" services helm-nginx)
export SERVICE_IP=$(kubectl get svc --namespace default helm-nginx -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
echo "http://${SERVICE_IP}:${SERVICE_PORT}"

查看具体的pod的运行状态

[root@nccztsjb-node-11 ~]# kubectl get pod | grep helm-nginx
helm-nginx-5756488bdb-vvp9g 1/1 Running 0 3m1s
[root@nccztsjb-node-11 ~]#

pod已经正常的处于Running的状态了。

4.4.2、卸载

如果要卸载应用,方法如下

[root@nccztsjb-node-11 ~]# helm uninstall helm-nginx
release "helm-nginx" uninstalled
[root@nccztsjb-node-11 ~]# helm status helm-nginx
Error: release: not found
[root@nccztsjb-node-11 ~]# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
[root@nccztsjb-node-11 ~]#

OK,这样就完成了应用的卸载。

4.5、查看chart的信息

和yum中的rpm包一样,我们也可以查看chart中的描述信息

[root@nccztsjb-node-11 ~]# helm inspect 

This command consists of multiple subcommands to display information about a chart

Usage:
helm show [command] Aliases:
show, inspect Available Commands:
all show all information of the chart
chart show the chart's definition
crds show the chart's CRDs
readme show the chart's README
values show the chart's values Flags:
-h, --help help for show Global Flags:
--debug enable verbose output
--kube-apiserver string the address and the port for the Kubernetes API server
--kube-as-group stringArray group to impersonate for the operation, this flag can be repeated to specify multiple groups.
--kube-as-user string username to impersonate for the operation
--kube-ca-file string the certificate authority file for the Kubernetes API server connection
--kube-context string name of the kubeconfig context to use
--kube-token string bearer token used for authentication
--kubeconfig string path to the kubeconfig file
-n, --namespace string namespace scope for this request
--registry-config string path to the registry config file (default "/root/.config/helm/registry.json")
--repository-cache string path to the file containing cached repository indexes (default "/root/.cache/helm/repository")
--repository-config string path to the file containing repository names and URLs (default "/root/.config/helm/repositories.yaml") Use "helm show [command] --help" for more information about a command.

其中,all是所有的信息,配置的默认值使用value命令。

查看nginx chart的安装使用的默认值

[root@nccztsjb-node-11 ~]# helm inspect values bitnami/nginx
## @section Global parameters
## Global Docker image parameters
## Please, note that this will override the image parameters, including dependencies, configured to use the global value
## Current available global Docker image parameters: imageRegistry, imagePullSecrets and storageClass ## @param global.imageRegistry Global Docker image registry
## @param global.imagePullSecrets Global Docker registry secret names as an array
##
global:
imageRegistry: ""
## E.g.
## imagePullSecrets:
## - myRegistryKeySecretName
##
imagePullSecrets: [] ## @section Common parameters ## @param nameOverride String to partially override nginx.fullname template (will maintain the release name)
##
nameOverride: ""
## @param fullnameOverride String to fully override nginx.fullname template
##
fullnameOverride: ""
## @param kubeVersion Force target Kubernetes version (using Helm capabilities if not set)
##
kubeVersion: ""
## @param clusterDomain Kubernetes Cluster Domain
##
clusterDomain: cluster.local
## @param extraDeploy Extra objects to deploy (value evaluated as a template)
##
extraDeploy: []
## @param commonLabels Add labels to all the deployed resources
##
commonLabels: {}
## @param commonAnnotations Add annotations to all the deployed resources
##
commonAnnotations: {} ## @section NGINX parameters ## Bitnami NGINX image version
## ref: https://hub.docker.com/r/bitnami/nginx/tags/
## @param image.registry NGINX image registry
## @param image.repository NGINX image repository
## @param image.tag NGINX image tag (immutable tags are recommended)
## @param image.pullPolicy NGINX image pull policy
## @param image.pullSecrets Specify docker-registry secret names as an array
## @param image.debug Set to true if you would like to see extra information on logs
##
image:
registry: docker.io
repository: bitnami/nginx
... 以下的内容省略...

这些就是一些默认的配置项,在安装的时候可以通过yaml或者--set来进行指定修改默认的配置,比如使用的镜像的信息,版本等。

4.6、chart导出为本地压缩包

chart就是部署应用时需要的配置,那么可以将这些配置都拉取到本地,和rpm一样。

使用如下的命令来获取

[root@nccztsjb-node-11 ~]# helm pull bitnami/nginx .
Error: non-absolute URLs should be in form of repo_name/path_to_chart, got: .
[root@nccztsjb-node-11 ~]# ls -l
total 24376
-rw-------. 1 root root 1396 Jun 22 2018 anaconda-ks.cfg
-rw-r--r-- 1 root root 3485 Aug 10 2013 cloud-set-guest-password
-rw-r--r-- 1 root root 13870692 Jan 14 14:02 helm-v3.7.2-linux-amd64.tar.gz
-rw-r--r-- 1 root root 9080681 Jan 14 14:55 kubectl-df-pv_v0.3.0_linux_amd64.tar.gz
-rw-r--r-- 1 root root 1870468 Jan 14 14:45 kubectl-example_1.1.0_Linux_x86_64.tar.gz
-rw-r--r-- 1 1001 docker 11343 Jul 27 22:05 LICENSE
drwxr-xr-x 2 3434 3434 4096 Dec 9 04:31 linux-amd64
-rw-r--r-- 1 root root 1021 Jan 14 09:45 ncc-sysconfig-ing.yaml
-rw-r--r-- 1 root root 38340 Jan 17 11:32 nginx-9.7.1.tgz
-rw-r--r-- 1 root root 48556 Jan 13 16:47 rabbitmq-8.26.1.tgz
-rw-r--r-- 1 1001 docker 6154 Jul 27 22:05 README.md
-rwxr-xr-x 1 root root 4220 Dec 6 15:33 update_image
[root@nccztsjb-node-11 ~]# ls -l nginx-9.7.1.tgz
-rw-r--r-- 1 root root 38340 Jan 17 11:32 nginx-9.7.1.tgz

这样就把nginx的char下载到了本地。其中9.7.1是chart的版本信息。

4.7、查看本地chart包

对于本地的chart来说就是一个目录

[root@nccztsjb-node-11 ~]# tar -zxf nginx-9.7.1.tgz
[root@nccztsjb-node-11 ~]# ls -ltr
total 60
-rw-r--r-- 1 root root 3485 Aug 10 2013 cloud-set-guest-password
-rw-------. 1 root root 1396 Jun 22 2018 anaconda-ks.cfg
-rwxr-xr-x 1 root root 4220 Dec 6 15:33 update_image
-rw-r--r-- 1 root root 38340 Jan 17 11:32 nginx-9.7.1.tgz
drwxr-xr-x 5 root root 4096 Jan 17 11:35 nginx

chart目录结构如下:

[root@nccztsjb-node-11 ~]# tree nginx
nginx
├── Chart.lock
├── charts
│   └── common
│   ├── Chart.yaml
│   ├── README.md
│   ├── templates
│   │   ├── _affinities.tpl
│   │   ├── _capabilities.tpl
│   │   ├── _errors.tpl
│   │   ├── _images.tpl
│   │   ├── _ingress.tpl
│   │   ├── _labels.tpl
│   │   ├── _names.tpl
│   │   ├── _secrets.tpl
│   │   ├── _storage.tpl
│   │   ├── _tplvalues.tpl
│   │   ├── _utils.tpl
│   │   ├── validations
│   │   │   ├── _cassandra.tpl
│   │   │   ├── _mariadb.tpl
│   │   │   ├── _mongodb.tpl
│   │   │   ├── _postgresql.tpl
│   │   │   ├── _redis.tpl
│   │   │   └── _validations.tpl
│   │   └── _warnings.tpl
│   └── values.yaml
├── Chart.yaml
├── ci
│   ├── ct-values.yaml
│   └── values-with-ingress-metrics-and-serverblock.yaml
├── README.md
├── templates
│   ├── deployment.yaml
│   ├── extra-list.yaml
│   ├── health-ingress.yaml
│   ├── _helpers.tpl
│   ├── hpa.yaml
│   ├── ingress.yaml
│   ├── ldap-daemon-secrets.yaml
│   ├── NOTES.txt
│   ├── pdb.yaml
│   ├── prometheusrules.yaml
│   ├── server-block-configmap.yaml
│   ├── serviceaccount.yaml
│   ├── servicemonitor.yaml
│   ├── svc.yaml
│   └── tls-secrets.yaml
├── values.schema.json
└── values.yaml 6 directories, 43 files
[root@nccztsjb-node-11 ~]#

主要的目录结构

[root@nccztsjb-node-11 ~]# tree -L 1 nginx
nginx
├── Chart.lock
├── charts
├── Chart.yaml
├── ci
├── README.md
├── templates
├── values.schema.json
└── values.yaml 3 directories, 5 files
[root@nccztsjb-node-11 ~]#

4.8、chart安装时使用自定义的配置

在安装chart的时候,如果不进行指定,那么就会使用默认的配置,比如,默认的镜像版本,镜像仓库,启动命令等等,这个可以根据实际的需要进行修改。

安装时使用自定义的配置的方式有2种,一种是在命令行中使用--set命令,一种是使用yaml配置文件。

4.8.1、--set的方式

--set 后面设置key1=value1,key2=value2,多个值之间用逗号隔开,再有,层级关系的用.(点)间隔

helm install helm-nginx bitnami/nginx --set resources.limits.cpu=2,resources.limits.memory=2048Mi,resources.requests.cpu=1,resources.requests.memory=1024Mi

安装后,查看具体的pod的资源情况

[root@nccztsjb-node-11 ~]# kubectl get deployment helm-nginx -o yaml | grep -A 6 resources
f:resources:
.: {}
f:limits:
.: {}
f:cpu: {}
f:memory: {}
f:requests:
--
resources:
limits:
cpu: "2"
memory: 2Gi
requests:
cpu: "1"
memory: 1Gi
[root@nccztsjb-node-11 ~]#

可以看到resources部分,cpu和memory的值都已经被修改了。

如果不加任何的参数,默认的值:

[root@nccztsjb-node-11 ~]# kubectl get deployment helm-nginx -o yaml | grep -A 6 resources
f:resources: {}
f:terminationMessagePath: {}
f:terminationMessagePolicy: {}
f:dnsPolicy: {}
f:restartPolicy: {}
f:schedulerName: {}
f:securityContext: {}
--
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
[root@nccztsjb-node-11 ~]#

默认是 resources: {}即没有资源的限制。

具体的怎么查找值,可以参考4.5中values的部分

resources:
## Example:
## limits:
## cpu: 100m
## memory: 128Mi
limits: {}
## Examples:
## requests:
## cpu: 100m
## memory: 128Mi
requests: {}
## NGINX containers' liveness probe.
## ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes
## @param livenessProbe.enabled Enable livenessProbe
## @param livenessProbe.initialDelaySeconds Initial delay seconds for livenessProbe
## @param livenessProbe.periodSeconds Period seconds for livenessProbe
## @param livenessProbe.timeoutSeconds Timeout seconds for livenessProbe
## @param livenessProbe.failureThreshold Failure threshold for livenessProbe
## @param livenessProbe.successThreshold Success threshold for livenessProbe
##

OK,以上就是通过--set在命令行中以key-value的方式进行设置。

4.8.2、-f config.yaml的方式

另外的一种方式就是通过yaml配置文件来进行设置,可以指定多个yaml文件

将配置都写入到yaml文件中去

resource.yaml(对资源配置的修改)

[root@nccztsjb-node-11 ~]# cat resource.yaml
resources:
limits:
cpu: 2
memory: 2048Mi
requests:
cpu: 1
memory: 1024Mi

健康检查配置调整

[root@nccztsjb-node-11 ~]# cat healthCheck.yaml
livenessProbe:
enabled: true
initialDelaySeconds: 20
timeoutSeconds: 5
periodSeconds: 10
failureThreshold: 6
successThreshold: 1
readinessProbe:
enabled: true
initialDelaySeconds: 15
timeoutSeconds: 3
periodSeconds: 5
failureThreshold: 3
successThreshold: 1
[root@nccztsjb-node-11 ~]#

通过以上的配置文件进行安装

helm install helm-nginx bitnami/nginx -f resource.yaml -f healthCheck.yaml

查看安装之后的配置

[root@nccztsjb-node-11 ~]# kubectl get deployment helm-nginx -o yaml | grep -A 6 resources
f:resources:
.: {}
f:limits:
.: {}
f:cpu: {}
f:memory: {}
f:requests:
--
resources:
limits:
cpu: "2"
memory: 2Gi
requests:
cpu: "1"
memory: 1Gi
[root@nccztsjb-node-11 ~]#
[root@nccztsjb-node-11 ~]# kubectl get deployment helm-nginx -o yaml | grep -A 6 livenessProbe
f:livenessProbe:
.: {}
f:failureThreshold: {}
f:periodSeconds: {}
f:successThreshold: {}
f:tcpSocket:
.: {}
--
livenessProbe:
failureThreshold: 6
periodSeconds: 10
successThreshold: 1
tcpSocket:
port: http
timeoutSeconds: 5
[root@nccztsjb-node-11 ~]# kubectl get deployment helm-nginx -o yaml | grep -A 6 readinessProbe
f:readinessProbe:
.: {}
f:failureThreshold: {}
f:initialDelaySeconds: {}
f:periodSeconds: {}
f:successThreshold: {}
f:tcpSocket:
--
readinessProbe:
failureThreshold: 3
initialDelaySeconds: 15
periodSeconds: 5
successThreshold: 1
tcpSocket:
port: http
[root@nccztsjb-node-11 ~]#

通过以上的输出可以看到,通过在安装时指定配置文件已经将pod的资源、健康检查的配置进行了调整为非默认值。

4.9、创建本地的Chart仓库

以上的chart都是通过远程仓库的URL中拉取使用的,那么对于helm来说,也可以使用类似于yum建立本地仓库源一样建立chart的自定义的本地仓库。

方法如下。

4.9.1、部署nginx或者apache服务

此处的目的就是将仓库暴露为http的服务。本例使用nginx作为映射,具体部署的过程不赘述。

4.9.2、映射目录

该目录将作为chart的本地目录

        location / {
alias /data/;
autoindex on;
autoindex_format html;
autoindex_exact_size off;
autoindex_localtime on;
}

4.9.3、上传chart包

将4.6中的chart包,或者自己修改的chart包上传到该目录中

[root@node142 repo]# pwd
/data/kubernetes/helm/repo
[root@node142 repo]# ls -l
total 44
-rw-r--r-- 1 root root 38340 Jan 17 11:32 nginx-9.7.1.tgz
-rw-r--r-- 1 root root 4011 Jan 13 16:22 tomcat-0.4.0.tgz
[root@node142 repo]#

4.9.4、创建索引文件

为了能够通过目录找到需要的chart包就需要一个索引文件,通过helm命令创建这个索引文件(注意:文件服务器中也需要安装helm命令)

创建索引文件:

helm repo index /data/kubernetes/helm/repo/ --url http://172.20.56.117/kubernetes/helm/repo

最后面的是具体http访问的url,前面是要在哪个目录中创建索引文件

[root@node142 repo]# helm repo index /data/kubernetes/helm/repo/ --url http://172.20.56.117/kubernetes/helm/repo
[root@node142 repo]# ls
index.yaml nginx-9.7.1.tgz tomcat-0.4.0.tgz
[root@node142 repo]#

OK,索引文件已经创建完成。

4.9.4、使用本地仓库部署chart

将刚建立的仓库添加到helm中

[root@nccztsjb-node-11 ~]# helm repo add local http://172.20.56.117/kubernetes/helm/repo
"local" has been added to your repositories
[root@nccztsjb-node-11 ~]# helm repo list
NAME URL
local http://172.20.56.117/kubernetes/helm/repo
[root@nccztsjb-node-11 ~]#

本地仓库中查找chart

[root@nccztsjb-node-11 ~]# helm search repo nginx
NAME CHART VERSION APP VERSION DESCRIPTION
local/nginx 9.7.1 1.21.5 Chart for the nginx server
[root@nccztsjb-node-11 ~]#

使用本地的仓库进行安装

[root@nccztsjb-node-11 ~]# helm install local-nginx local/nginx
NAME: local-nginx
LAST DEPLOYED: Mon Jan 17 14:13:29 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: nginx
CHART VERSION: 9.7.1
APP VERSION: 1.21.5 ** Please be patient while the chart is being deployed ** NGINX can be accessed through the following DNS name from within your cluster: local-nginx.default.svc.cluster.local (port 80) To access NGINX from outside the cluster, follow the steps below: 1. Get the NGINX URL by running these commands: NOTE: It may take a few minutes for the LoadBalancer IP to be available.
Watch the status with: 'kubectl get svc --namespace default -w local-nginx' export SERVICE_PORT=$(kubectl get --namespace default -o jsonpath="{.spec.ports[0].port}" services local-nginx)
export SERVICE_IP=$(kubectl get svc --namespace default local-nginx -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
echo "http://${SERVICE_IP}:${SERVICE_PORT}"
[root@nccztsjb-node-11 ~]#

OK,已经可以获取到chart包进行安装。

以上就是helm的安装和基本使用。

k8s的应用包管理工具helm的部署和使用的更多相关文章

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

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

  2. k8s包管理工具helm - 介绍和安装

    目录 1.Kubernetes 应用部署的挑战 2.Helm 是什么 3.Helm 组件及相关术语 4.Helm 工作原理 5.Helm 安装 5.1 客户端安装 5.2 安装服务端 Tiller 5 ...

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

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

  4. Kubernetes的包管理工具Helm的安装和使用

    1.源码安装 [root@master ~]# wget https://storage.googleapis.com/kubernetes-helm/helm-v2.14.0-linux-amd64 ...

  5. kubernetes包管理工具Helm安装

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

  6. Helm包管理工具(简介、安装、方法)

    认识Helm 每次我们要部署一个应用都需要写一个配置清单(维护一套yaml文件),但是每个环境又不一样.部署一套新的环境成本是真的很高.如果我们能够使用类似于yum的工具来安装我们的应用的话那就太好了 ...

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

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

  8. ASP.NET Core on K8S深入学习(10)K8S包管理器Helm

    本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章. 一.关于Helm 1.1 为何需要Helm? 虽然K8S能够很好地组织和编排容 ...

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

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

随机推荐

  1. 误入 GitHub 游戏区,意外地收获颇丰

    这天中午,我和往常一样就着美食视频吃完午饭,然后起身泡了一杯"高沫". 我闻着茶香享受着午后的阳光,慵懒地坐在工位上习惯性的打开 GitHub 游荡,酝酿着睡意. 误打误撞,我来到 ...

  2. Java面向对象之 接口: [修饰符] interface 接口名 {...};子接口:[修饰符] interface 接口名 extends 父接口,父接口2...{...}

    1.什么是接口? 类比抽象类,把功能或者特性类似的一类 抽象的更彻底,可以提炼出更加特殊的"抽象类"----接口 2.如何定义接口 语法:  [修饰符] interface 接口名 ...

  3. 初识requests

    Make a Request 一开始要导入 Requests 模块: >>> import requests 然后,尝试获取某个网页.本例子中,我们来获取 Github 的公共时间线 ...

  4. host-manager does not exist or is not a readable directory

    当tomcat启动出现这个错误时,按照如下步骤可以解决: 1.删掉F:\tomcat20111101\apache-tomcat-6.0.26\conf\Catalina目录下的localhost文件 ...

  5. MindSpore联邦学习框架解决行业级难题

    内容来源:华为开发者大会2021 HMS Core 6 AI技术论坛,主题演讲<MindSpore联邦学习框架解决隐私合规下的数据孤岛问题>. 演讲嘉宾:华为MindSpore联邦学习工程 ...

  6. JAVA字符串拼接操作规则说明

    1.常量与常量的拼接结果在常量池,原理是编译期优化 public void test1() { String s1 = "a" + "b" + "c& ...

  7. FastAPI(六十五)实战开发《在线课程学习系统》基础架构的搭建

    在之前三篇,我们分享的就是需求的分析,基本接口的整理,数据库链接的配置.这次我们分享项目的基本框架,目录结构如下: common目录 通用的目录,一些通用的处理放在这里 models目录 数据库相关的 ...

  8. 【LeetCode】 204. Count Primes 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 素数筛法 参考资料 日期 [LeetCode] 题目 ...

  9. 【剑指Offer】二进制中1的个数 解题报告(Python)

    题目地址:https://www.nowcoder.com/ta/coding-interviews 题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 解题方法 这个题如果使 ...

  10. The Balance(poj2142)

    The Balance Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 5452   Accepted: 2380 Descr ...