✨✨ 欢迎大家来到景天科技苑✨✨
🎈🎈 养成好习惯,先赞后看哦~🎈🎈
🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,云原生k8s,linux,shell脚本等实操经验,网站搭建,数据库等分享。
所属的专栏: 云原生K8S,零基础到进阶实战
景天的主页: 景天科技苑
文章目录
- Helm
-
- 引言
- 环境准备
-
- [1. 主机初始化配置](#1. 主机初始化配置)
- [2. 部署Docker环境](#2. 部署Docker环境)
- [3. 部署Kubernetes集群](#3. 部署Kubernetes集群)
- 安装Helm
-
- [1. 下载并安装Helm](#1. 下载并安装Helm)
- [2. 初始化Helm](#2. 初始化Helm)
- [3. 配置Helm仓库](#3. 配置Helm仓库)
- 使用Helm部署应用
-
- [1. 查找Chart](#1. 查找Chart)
- [2. 安装Chart](#2. 安装Chart)
- [3. 查看部署状态](#3. 查看部署状态)
- [4. 自定义Chart](#4. 自定义Chart)
- [5. 升级Chart](#5. 升级Chart)
- [6. 回滚Chart](#6. 回滚Chart)
- [7. 删除Chart](#7. 删除Chart)
- [8. 创建自己的Chart](#8. 创建自己的Chart)
- [9. Helm Chart的高级功能](#9. Helm Chart的高级功能)
-
- [9.1 依赖管理](#9.1 依赖管理)
- [9.2 模板功能](#9.2 模板功能)
- [9.3 钩子(Hooks)](#9.3 钩子(Hooks))
- [9.4 Chart版本管理](#9.4 Chart版本管理)
- [9.5 Chart测试](#9.5 Chart测试)
- [10. Helm与CI/CD集成](#10. Helm与CI/CD集成)
- 结论
Helm
引言
随着容器化和微服务架构的普及,Kubernetes(简称K8s)已成为云原生应用部署和管理的首选平台。然而,对于复杂的Kubernetes应用,直接通过kubectl管理大量的YAML配置文件变得非常繁琐和容易出错。Helm,作为Kubernetes的包管理工具,通过引入Chart概念,极大地简化了Kubernetes应用的部署、升级、回滚和删除过程。本教程将结合实际案例,详细介绍如何通过Helm来管理Kubernetes集群。
环境准备
1. 主机初始化配置
在部署Kubernetes集群之前,我们需要准备几台满足要求的服务器。推荐配置为CPU: 2C+,Memory: 2G+。所有主机需要禁用防火墙和SELinux,并配置好主机名和hosts文件。
bash
# 禁用SELinux
setenforce 0
sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config
# 关闭防火墙和网络管理器
systemctl stop firewalld
systemctl disable firewalld
systemctl stop NetworkManager
systemctl disable NetworkManager
# 配置主机名
hostnamectl set-hostname k8s-master
echo "192.168.147.137 k8s-master" >> /etc/hosts
# 类似地,为其他节点配置主机名和hosts
# 安装必要的工具
yum -y install vim wget net-tools lrzsz
# 禁用swap
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab
# 配置网络桥接
cat <<EOF >> /etc/sysctl.conf
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
EOF
modprobe br_netfilter
sysctl -p
2. 部署Docker环境
Kubernetes依赖Docker来管理容器,因此需要在所有节点上安装Docker。推荐使用阿里云的YUM源来安装Docker。
bash
# 添加Docker的YUM源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum clean all && yum makecache fast
# 安装Docker
yum -y install docker-ce
# 启动Docker服务
systemctl start docker
systemctl enable docker
# 配置Docker镜像加速
cat <<END > /etc/docker/daemon.json
{
"registry-mirrors": ["https://nyakyfun.mirror.aliyuncs.com"]
}
END
systemctl daemon-reload
systemctl restart docker
3. 部署Kubernetes集群
这里我们使用kubeadm来部署Kubernetes集群。详细步骤包括安装kubelet、kubeadm、kubectl,配置init-config.yaml,初始化master节点,加入node节点等。
bash
# 配置阿里云YUM源(略)
# 安装kubelet kubeadm kubectl
yum install -y kubelet kubeadm kubectl
# 初始化master节点(详细步骤省略,需要配置init-config.yaml)
kubeadm init --config=init-config.yaml
# 将kubeadm join命令保存到文件,以便后续添加node节点
kubeadm join ... > join-command.sh
# 在node节点上执行kubeadm join命令
# scp join-command.sh k8s-node01:/root
# scp join-command.sh k8s-node02:/root
# 在每个node节点上执行 bash join-command.sh
# 安装flannel网络插件(略)
安装Helm
1. 下载并安装Helm
Helm是一个命令行工具,可以从其GitHub仓库下载并安装。
bash
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
2. 初始化Helm
Helm 3版本移除了Tiller组件,简化了初始化流程。
bash
# 初始化Helm,无需指定kube-context(如果使用默认的kube-context)
helm init
# 或者,如果您有多个Kubernetes集群上下文,可以指定kube-context
# helm init --kube-context [CONTEXT_NAME]
3. 配置Helm仓库
Helm支持从多个仓库中查找和安装Chart。首先,需要添加您需要的Helm仓库。
bash
helm repo add stable https://charts.helm.sh/stable
helm repo update
使用Helm部署应用
1. 查找Chart
在部署应用之前,您可能需要查找适合您需求的Helm Chart。Helm提供了一个搜索功能,允许您按名称或描述查找Chart。
bash
helm search repo nginx
这将列出所有与nginx
相关的Chart,包括它们所属的仓库、版本以及简短描述。
2. 安装Chart
找到您需要的Chart后,就可以使用helm install
命令来安装它了。以下是一个安装Nginx Chart的示例:
bash
helm install my-nginx stable/nginx
在这个命令中,my-nginx
是您给这个Nginx部署的自定义名称,stable/nginx
是Chart的标识符(包括仓库名和Chart名)。
3. 查看部署状态
安装完成后,您可以使用kubectl
命令来查看部署的状态。
bash
kubectl get pods
您应该能看到与my-nginx
相关的Pod正在运行。
4. 自定义Chart
Helm允许您通过values文件来自定义Chart。values文件是一个YAML文件,其中包含了可以覆盖Chart默认配置的键值对。
首先,您可以使用helm show values
命令来查看Chart的默认values文件。
bash
helm show values stable/nginx
然后,您可以创建一个自定义的values文件,例如custom-values.yaml
,并在其中设置您想要的配置。
yaml
# custom-values.yaml
replicaCount: 3
service:
type: LoadBalancer
port: 80
最后,在安装Chart时指定这个values文件。
bash
helm install my-nginx-custom stable/nginx -f custom-values.yaml
5. 升级Chart
当Chart的新版本发布时,您可以使用helm upgrade
命令来升级已部署的Chart。
bash
helm upgrade my-nginx stable/nginx
如果您想同时应用一些自定义配置,可以像安装时一样指定values文件。
6. 回滚Chart
如果升级后出现问题,您可以使用helm rollback
命令将Chart回滚到之前的版本。
bash
helm rollback my-nginx [REVISION]
其中[REVISION]
是您想要回滚到的版本编号。您可以使用helm history my-nginx
命令来查看部署的历史版本。
7. 删除Chart
当您不再需要某个Chart时,可以使用helm uninstall
命令来删除它。
bash
helm uninstall my-nginx
这将删除与该Chart相关的所有Kubernetes资源,但不会删除Chart本身或values文件。
8. 创建自己的Chart
除了使用现有的Chart之外,Helm还允许您创建自己的Chart。这通常涉及以下几个步骤:
- 创建一个Chart目录结构。
- 编写Chart.yaml文件来描述Chart的基本信息。
- 编写values.yaml文件来定义可配置的参数。
- 编写Kubernetes模板文件(通常是YAML文件),这些文件将使用Go模板语言来动态生成Kubernetes资源定义。
- 使用
helm lint
命令来验证Chart的格式和语法。 - 使用
helm package
命令将Chart打包为tar.gz文件。 - (可选)将Chart添加到Helm仓库中,以便其他人可以安装它。
创建自己的Chart需要一定的Kubernetes和Helm知识,但一旦掌握了,就可以大大提高在Kubernetes上部署和管理应用的效率。
9. Helm Chart的高级功能
Helm Chart不仅仅是一个简单的应用部署工具,它还支持许多高级功能,可以帮助您更灵活地管理Kubernetes资源。
9.1 依赖管理
Helm Chart可以声明对其他Chart的依赖。这意味着您可以创建一个Chart,它依赖于其他Chart来提供某些功能或服务。当您安装这个Chart时,Helm会自动解析依赖关系,并按照正确的顺序安装所有必要的Chart。
在Chart.yaml
文件中,您可以使用dependencies
字段来声明依赖项。但是,从Helm 3开始,推荐使用helm dependency
命令来管理依赖项,而不是直接在Chart.yaml
中声明它们。
bash
# 初始化Chart的依赖目录
helm dependency init
# 更新Chart的依赖项
helm dependency update
9.2 模板功能
Helm Chart使用Go模板语言来动态生成Kubernetes资源定义。这意呀着您可以在模板中嵌入逻辑,以便根据不同的配置或环境生成不同的资源。
模板文件通常位于Chart的templates
目录中,并以.yaml
或.tpl
结尾。在模板中,您可以使用{``{ ... }}
来包含Go模板表达式,这些表达式可以访问values文件中的数据、Helm的内置对象(如Release对象)以及自定义的函数和管道。
9.3 钩子(Hooks)
Helm Chart支持钩子,这是一种在Chart生命周期的特定点运行的特殊模板。钩子允许您在安装、升级、删除Chart之前或之后执行自定义操作,例如加载配置、执行测试或清理资源。
钩子是通过在模板文件的文件名中添加特定的注释来定义的。Helm会识别这些注释,并在适当的生命周期点执行相应的模板。
例如,您可以在Chart中定义一个post-install
钩子来执行一些安装后的初始化任务:
yaml
# templates/post-install-job.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: "{{ .Release.Name }}-post-install-job"
annotations:
"helm.sh/hook": post-install
"helm.sh/hook-weight": "-5"
"helm.sh/hook-delete-policy": hook-succeeded
spec:
template:
spec:
containers:
- name: post-install-job
image: "my-image"
command: ["/bin/sh", "-c", "echo Hello from the post-install hook > /usr/share/nginx/html/index.html"]
restartPolicy: Never
9.4 Chart版本管理
Helm Chart遵循语义化版本控制(SemVer 2),这意味着Chart的版本号遵循主版本号.次版本号.修订号
的格式。当您更新Chart时,应该根据所做的更改的类型来递增相应的版本号部分。
Helm仓库中的Chart版本是独立的,但您可以在Chart的Chart.yaml
文件中指定对特定Chart版本的依赖。这有助于确保安装的Chart之间的兼容性。
9.5 Chart测试
Helm支持在Chart中定义测试,这些测试将在Chart安装后自动运行。这有助于验证Chart是否按预期工作,并捕获可能的问题。
测试是通过在Chart的templates
目录中定义测试模板来完成的。这些模板通常定义Kubernetes作业(Job)或Pod,它们包含执行测试所需的命令和脚本。
在Chart的Chart.yaml
文件中,您可以使用schema
字段来指定测试模板的路径。然后,您可以使用helm test
命令来运行这些测试。
bash
helm test my-nginx
10. Helm与CI/CD集成
Helm非常适合与持续集成/持续部署(CI/CD)管道集成,以实现自动化和可重复的Kubernetes应用部署。通过将Helm Chart存储在版本控制系统中,并在CI/CD管道中执行Helm命令,您可以确保每次部署都使用相同的配置和依赖项。
许多CI/CD工具(如Jenkins、GitLab CI/CD、GitHub Actions等)都支持Helm命令,并且可以轻松地将它们集成到您的部署流程中。
结论
Helm是一个功能强大的Kubernetes包管理工具,它通过引入Chart概念,极大地简化了Kubernetes应用的部署、升级、回滚和删除过程。通过使用Helm,您可以更高效地管理复杂的Kubernetes集群,并确保您的应用在不同的环境中以一致的方式运行。
通过本教程,您已经了解了Helm的基础知识,包括环境准备、安装、使用Chart、自定义Chart、升级、回滚和删除Chart,以及创建自己的Chart。此外,您还学习了Helm的一些高级功能,如依赖管理、模板功能、钩子、版本管理和测试。最后,您还了解了如何将Helm与CI/CD集成,以实现自动化