大家都知道K8S是云原生devops的一大利器,可以直接让我们的中间件、应用服务直接运行在云端,让我们可以只关心自身的业务功能, 不再关注其他那些非功能项以及运维部署的琐事。但是K8S对于基础服务和应用服务部署还是相当的麻烦,比如一个服务端的应用部署,我们需要配置存储pv/pvc、应用deployment、服务发现service、暴露端口管理以及secret,这些资源都是分散的需要我们使用kubectl进行分别管理。针对这个鸡肋的问题,今天我们就介绍一个K8S的包管理工具Helm,直接解放双手。
Helm 是 Kubernetes 的包管理器,是查找、分享和使用软件构建 Kubernetes 的最优方式。
包管理器类似于我们在 Ubuntu 中使用的apt、Centos中使用的yum一样,能快速查找、下载和安装软件包, 能够将一组K8S资源打包统一管理, 是查找、共享和使用为Kubernetes构建的软件的最佳方式。
Helm:客户端命令行工具,用于chart的创建、打包、发布与管理;
Chart: helm管理的包,包含k8s集群内部运行的应用程序,工具或服务的资源定义;相似于centos yum所管理的rpm包,是一系列资源文件的集合;
Repository: 用于存放chart的地方,类似于yum仓库;可以使用官方的仓库,也可以自定义私有仓库;
Release: 是 k8s集群中运行的chart实列,chart可以在k8s集群中反复部署,每次部署都会创建一个新的release。
统一管理、配置和更新这些分散的 k8s 的应用资源文件
分发和复用一套应用模板
将应用的一系列资源当做一个软件包管理
https://helm.sh/zh/docs/intro/quickstart/
官网给定的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集群中了。
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
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/
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 的最优方式。