当前位置: 首页 > news >正文

K8S之核心技术Helm

一、Helm的介绍

         Helm 是 Kubernetes 应用的包管理工具 ,类似于 Linux 系统中的 yum 或 apt。它主要用来管理 Kubernetes 应用的包(称为 Charts),帮助用户更高效地部署、管理和维护 Kubernetes 应用。通过 Helm,用户可以轻松地打包、发布、安装和升级复杂的 Kubernetes 应用。

         Helm Chart 是用来封装 Kubernetes 原生应用程序的一系列 YAML 文件。它包含了一组预定义的 Kubernetes 资源模板,这些模板可以通过参数化的方式进行配置,从而实现灵活的部署。Chart 的设计使得用户可以在部署应用时自定义应用程序的元数据(Metadata),便于应用程序的分发和管理。

二、Helm客户端安装

官网地址:Helm | 快速入门指南

1、下载安装包并解压,以 helm-v3.17.3-linux-amd64.tar.gz 为例

[root@k8s-master ~]# tar -xf helm-v3.17.3-linux-amd64.tar.gz -C /opt

2、将 helm 可执行文件复制到 /usr/local/bin/ 目录,使其可以在系统中全局使用

[root@k8s-master ~]# cp /opt/linux-amd64/helm /usr/local/bin/

3、为了方便使用Helm命令,配置命令自动补全功能

[root@k8s-master ~]# helm completion bash > ~/.helmrc
[root@k8s-master ~]# source ~/.helmrc   #重新加载

4、验证Helm是否安装成功

[root@k8s-master ~]# helm version
version.BuildInfo{Version:"v3.17.3", GitCommit:"e4da49785aa6e6ee2b86efd5dd9e43400318262b", GitTreeState:"clean", GoVersion:"go1.23.7"}

三、Helm常用命令

create :创建一个 chart 并指定名字
dependency :管理 chart 依赖
get :下载一个 release 。可用子命令: all hooks manifest notes values
history :获取 release 历史
install :安装一个 chart
list :列出 release
package :将 chart 目录打包到 chart 存档文件中
pull :从远程仓库中下载 chart 并解压到本地 # helm pull stable/mysql -- untar
repo :添加,列出,移除,更新和索引 chart 仓库。可用子命令: add index list、 remove、 update。
rollback :从之前版本回滚
search :根据关键字搜索 chart 。可用子命令: hub repo
show :查看 chart 详细信息。可用子命令: all chart readme values
status :显示已命名版本的状态
template :本地呈现模板
uninstall :卸载一个 release
upgrade :更新一个 release
version :查看 helm 客户端版本

四、配置国内chart仓库

1、常用国内仓库

微软仓库( http://mirror.azure.cn/kubernetes/charts/ )这个仓库推荐,基本上官网有的
chart 这里都有。
阿里云仓库( https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
官方仓库( https://hub.kubeapps.com/charts/incubator )官方 chart 仓库,国内有点不好使。

2、添加存储库

使用方法:

格式:helm  repo  add  [NAME]  [URL]  [flags]

[root@k8s-master ~]# helm repo add stable http://mirror.azure.cn/kubernetes/charts
"stable" has been added to your repositories

[root@k8s-master ~]# helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
"aliyun" has been added to your repositories

3、查看配置的存储库

helm repo list

4、更新存储库

helm repo update

5、删除存储库

helm  repo  remove 库名

五、Helm基本使用

主要三个命令:
1 )chart install  安装之后名称 安装应用名称
        查看应用发布状态:helm status  安装后的名称
2 chart upgrade  升级
3 chart rollback   回滚
1、安装helm的UI界面
root@k8s-master ~]# helm install db stable/mysql
2、查看状态
[root@k8s-master ~]# kubectl get pod -o wide
NAME                           READY   STATUS    RESTARTS       AGE     IP             NODE         NOMINATED NODE   READINESS GATES
db-mysql-5cd7cbc6b7-cjgkq      1/1     Running   0              7h15m   100.97.125.4   k8s-node01   <none>           <none>[root@k8s-master ~]# helm status db
NAME: db
LAST DEPLOYED: Sat May  3 16:13:31 2025
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
MySQL can be accessed via port 3306 on the following DNS name from within your cluster:
db-mysql.default.svc.cluster.localTo get your root password run:  #获取密码MYSQL_ROOT_PASSWORD=$(kubectl get secret --namespace default db-mysql -o jsonpath="{.data.mysql-root-password}" | base64 --decode; echo)To connect to your database:   #连接你的数据库1. Run an Ubuntu pod that you can use as a client:kubectl run -i --tty ubuntu --image=ubuntu:16.04 --restart=Never -- bash -il2. Install the mysql client:$ apt-get update && apt-get install mysql-client -y3. Connect using the mysql cli, then provide your password:$ mysql -h db-mysql -pTo connect to your database directly from outside the K8s cluster:MYSQL_HOST=127.0.0.1MYSQL_PORT=3306# Execute the following command to route the connection:kubectl port-forward svc/db-mysql 3306mysql -h ${MYSQL_HOST} -P${MYSQL_PORT} -u root -p${MYSQL_ROOT_PASSWORD}
3、查看pod
[root@k8s-master ~]# kubectl get pod
NAME                        READY   STATUS    RESTARTS   AGE
db-mysql-5cd7cbc6b7-cjgkq   0/1     Pending   0          115m
4、查看pvc
[root@k8s-master ~]# kubectl get pvc
[root@k8s-master ~]# kubectl get pvc db-mysql -o yaml
5、需要8G的PV,创建PV,
[root@k8s-master ~]# yum install nfs-utils -y
[root@k8s-master ~]# cat /etc/exports
/data/nfs/dbdata 172.16.90.0/24(rw,no_root_squash)
[root@k8s-master ~]# mkdir /data/nfs/dbdata -p
[root@k8s-master ~]# systemctl restart nfs-server
[root@k8s-master ~]# systemctl enable nfs-server
# cat pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
name: dbdata # 修改PV名称
spec:
capacity:
storage: 8Gi # 修改大小
accessModes:
- ReadWriteOnce
nfs:
path: /data/nfs/dbdata # 修改目录名
server: k8s-master01
[root@k8s-master ~]# kubectl apply -f pv.yml
persistentvolume/dbdata created
所有集群节点安装nfs-utils
[root@k8s-master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
db-mysql-55c9794b68-kx7h2 0/1 Running 0 9m33s[root@k8s-master01 tools]# kubectl get secret --namespace default db-mysql -o
jsonpath="{.data.mysql-root-password}" | base64 --decode; echo
xu3Oytd0ZQ
[root@k8s-master01 tools]# kubectl exec -it db-mysql-55c9794b68-kx7h2 -- bash
Defaulted container "db-mysql" out of: db-mysql, remove-lost-found (init)
root@db-mysql-55c9794b68-kx7h2:/# mysql -uroot -pxu3Oytd0ZQ
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 20
Server version: 5.7.30 MySQL Community Server (GPL)
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.01 sec)
mysql> \q
Bye
root@db-mysql-55c9794b68-kx7h2:/# exit

http://www.xdnf.cn/news/580069.html

相关文章:

  • 谷歌medgemma-27b-text-it医疗大模型论文速读:面向医学视觉问答的语义标签知识增强数据集SLAKE
  • 【Linux】进程间通信(四):System V标准(共享内存、消息队列、信息量)
  • [Git] 认识 Git 的三大区域 文件的修改和提交
  • linux杀死进程自身
  • Docker实战
  • docker network 自定义网络配置与管理指南
  • 数字孪生技术如何重塑能源产业?
  • 生成树协议(STP)配置详解:避免网络环路的最佳实践
  • java基础(api)
  • 第八天的尝试
  • 印度语言指令驱动的无人机导航!UAV-VLN:端到端视觉语言导航助力无人机自主飞行
  • AllToAll通信为什么用于EP并行?
  • Linux性能监控工具nmon
  • 【开源解析】基于深度学习的双色球预测系统:从数据获取到可视化分析
  • Axure系统原型设计首页模版方案
  • InetAddress 类详解
  • AI大模型技术全景解析:核心原理与关键技术拆解
  • 【C++ 真题】P5736 【深基7.例2】质数筛
  • HJ23 删除字符串中出现次数最少的字符【牛客网】
  • 《Effective Java(第三版)》笔记
  • ESP32-S3 (ESP IDF 5.4.1 - LVGL 9.2.0)九宫格拼音输入法
  • 工业控制解决方案三段论
  • Java 实现四种单例(都是线程安全)
  • 【Linux】了解 消息队列 system V信号量 IPC原理
  • 常见字符串相似度算法详解
  • 使用Pandoc实现Markdown和Word文档的双向转换
  • 基于LiveData和ViewModel的路线管理实现(带PopupWindow删除功能)
  • 人工智能价值:技术革命下的职业新坐标
  • 【java】Java注解
  • 通信协议详解(分层技术解析)