Kubernetes包管理工具Helm简介及使用

文章目录

    • 前言
    • 技术积累
      • 什么是Helm
      • Helm的核心概念
      • Helm可以解决哪些痛点
      • Helm中文官方文档
    • Helm安装
    • Helm安装nginx用例
    • 写在最后

前言

大家都知道K8S是云原生devops的一大利器,可以直接让我们的中间件、应用服务直接运行在云端,让我们可以只关心自身的业务功能, 不再关注其他那些非功能项以及运维部署的琐事。但是K8S对于基础服务和应用服务部署还是相当的麻烦,比如一个服务端的应用部署,我们需要配置存储pv/pvc、应用deployment、服务发现service、暴露端口管理以及secret,这些资源都是分散的需要我们使用kubectl进行分别管理。针对这个鸡肋的问题,今天我们就介绍一个K8S的包管理工具Helm,直接解放双手。
Kubernetes包管理工具Helm简介及使用_第1张图片

技术积累

什么是Helm

Helm 是 Kubernetes 的包管理器,是查找、分享和使用软件构建 Kubernetes 的最优方式。

包管理器类似于我们在 Ubuntu 中使用的apt、Centos中使用的yum一样,能快速查找、下载和安装软件包, 能够将一组K8S资源打包统一管理, 是查找、共享和使用为Kubernetes构建的软件的最佳方式。

Helm的核心概念

Helm:客户端命令行工具,用于chart的创建、打包、发布与管理;
Chart: helm管理的包,包含k8s集群内部运行的应用程序,工具或服务的资源定义;相似于centos yum所管理的rpm包,是一系列资源文件的集合;
Repository: 用于存放chart的地方,类似于yum仓库;可以使用官方的仓库,也可以自定义私有仓库;
Release: 是 k8s集群中运行的chart实列,chart可以在k8s集群中反复部署,每次部署都会创建一个新的release。

Helm可以解决哪些痛点

统一管理、配置和更新这些分散的 k8s 的应用资源文件
分发和复用一套应用模板
将应用的一系列资源当做一个软件包管理

Helm中文官方文档

https://helm.sh/zh/docs/intro/quickstart/

Helm安装

官网给定的kubernetes版本和Helm版本的支持关系如下:

那么选择对应的3.12.x版本安装,我这里采用便捷的方式进行安装helm。
在已经安装好的kubernetes集群中直接安装一下命令在master节点中安装:

#获取helm安装包
[root@master ~]# wget https://get.helm.sh/helm-v3.12.1-linux-amd64.tar.gz
#解压安装
[root@master ~]# tar -zxvf helm-v3.12.1-linux-amd64.tar.gz
[root@master ~]# mv linux-amd64/helm /usr/local/bin/helm
#添加 bitnami仓库
[root@master ~]# helm repo add bitnami https://charts.bitnami.com/bitnami
# 查看仓库列表
[root@master ~]# helm repo list
NAME            URL
bitnami         https://charts.bitnami.com/bitnami
[root@master ~]#

这样helm就安装到kubernetes集群中了。

Helm安装nginx用例

1、helm仓库查询nginx安装包

[root@master ~]# helm search repo nginx
NAME                                    CHART VERSION   APP VERSION     DESCRIPTION
bitnami/nginx                           15.3.1          1.25.2          NGINX Open Source is a web server that can be a...
bitnami/nginx-ingress-controller        9.8.5           1.9.0           NGINX Ingress Controller is an Ingress controll...
bitnami/nginx-intel                     2.1.15          0.4.9           DEPRECATED NGINX Open Source for Intel is a lig...
ingress-nginx/ingress-nginx             4.8.0           1.9.0           Ingress controller for Kubernetes using NGINX a...
stable/nginx-ingress                    1.41.3          v0.34.1         DEPRECATED! An nginx Ingress controller that us...
stable/nginx-ldapauth-proxy             0.1.6           1.13.5          DEPRECATED - nginx proxy with ldapauth
stable/nginx-lego                       0.3.1                           Chart for nginx-ingress-controller and kube-lego
stable/gcloud-endpoints                 0.1.2           1               DEPRECATED Develop, deploy, protect and monitor...
[root@master ~]#

2、helm拉取nginx安装包

[root@master ~]# cd /k8s/
[root@master k8s]# helm pull bitnami/nginx

Kubernetes包管理工具Helm简介及使用_第2张图片

3、解压nginx-15.3.1.tgz

[root@master k8s]# tar xzvf nginx-15.3.1.tgz
[root@master k8s]# cd nginx
[root@master nginx]# ll
total 104
-rw-r--r-- 1 root root   226 Sep 26 08:04 Chart.lock
drwxr-xr-x 3 root root    20 Nov  1 09:59 charts
-rw-r--r-- 1 root root  1012 Sep 26 08:04 Chart.yaml
-rw-r--r-- 1 root root 49429 Sep 26 08:04 README.md
drwxr-xr-x 2 root root   325 Nov  1 09:59 templates
-rw-r--r-- 1 root root  2225 Sep 26 08:04 values.schema.json
-rw-r--r-- 1 root root 37116 Sep 26 08:04 values.yaml

此时我们可以修改value.yaml中的一些配置,比如端口。

4、helm安装nginx

[root@master nginx]# helm install nginx .
NAME: nginx
LAST DEPLOYED: Wed Nov  1 10:04:36 2023
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: nginx
CHART VERSION: 15.3.1
APP VERSION: 1.25.2

** Please be patient while the chart is being deployed **
NGINX can be accessed through the following DNS name from within your cluster:

    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 nginx'

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

5、获取已经安装的nginx 服务及pod

[root@master nginx]# kubectl get pod,svc | grep nginx
pod/my-nginx-5746bbd756-6n98f                 1/1     Running   2 (2d22h ago)    64d
pod/nginx-7888c8874c-t4f4s                    1/1     Running   0                7m22s
service/my-nginx           ClusterIP      10.102.89.127           80/TCP           64d
service/nginx              LoadBalancer   10.98.78.251         80:30120/TCP     7m22s
[root@master nginx]#

以上可知我们pod端口为80,外网访问ip为本机ip,端口为30120。
我们直接打开外部浏览器进行访问测试:
http://10.10.22.91:30120/
Kubernetes包管理工具Helm简介及使用_第3张图片

6、获取nginx映射配置

[root@master nginx]# kubectl get pods | grep nginx
my-nginx-5746bbd756-6n98f                 1/1     Running   2 (2d23h ago)    64d
[root@master nginx]#
[root@master nginx]# kubectl exec my-nginx-5746bbd756-6n98f  -- cat /etc/nginx/nginx.conf
user  nginx;
worker_processes  auto;
error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
    #gzip  on;
    include /etc/nginx/conf.d/*.conf;
}

7、其他

#升级releas
helm upgrade nginx .
#卸载nginx
[root@master nginx]# helm uninstall nginx
release "nginx" uninstalled
[root@master nginx]#

写在最后

Kubernetes包管理工具Helm简介及使用还是比较简单,通过本博文我们可以知道Helm就是一个包管理工具如同centos中yum一样,是查找、分享和使用软件构建 Kubernetes 的最优方式。

你可能感兴趣的:(Kubernetes,kubernetes,容器,云原生,Helm)