目录
一、helm
二、部署helm
三、封装chart包
四、上传chart到OCI仓库
五、部署wordpress博客系统
六、helm部署storageclass
七、helm部署ingress-nginx
八、helm部署metrics-server
九、kubeapps
一、helm
- Helm是Kubernetes 应用的包管理工具,主要用来管理 Charts,类似Linux系统的yum。
- Helm Chart 是用来封装 Kubernetes 原生应用程序的一系列 YAML 文件。可以在你部署应用的时候自定义应用程序的一些 Metadata,以便于应用程序的分发。
- 对于应用发布者而言,可以通过 Helm 打包应用、管理应用依赖关系、管理应用版本并发布应用到软件仓库。
- 对于使用者而言,使用 Helm 后不用需要编写复杂的应用部署文件,可以以简单的方式在 Kubernetes 上查找、安装、升级、回滚、卸载应用程序。
Helm V3 与 V2 最大的区别在于去掉了tiller:
二、部署helm
官网:https://helm.sh/zh/docs/intro/quickstart/
https://github.com/helm/helm/releases
安装:
tar zxf helm-v3.11.0-linux-amd64.tar.gz
cd linux-amd64/
mv helm /usr/local/bin/
配置helm命令补齐
echo "source <(helm completion bash)" >> ~/.bashrc
source ~/.bashrc
helm version
查询官方应用中心
helm search hub nginx
添加第三方repo源
helm repo add my-repo https://charts.bitnami.com/bitnami
helm repo list
helm search repo nginx
helm pull my-repo/nginx
tar zxf nginx-15.4.0.tgz
cd nginx/
vim values.yaml
上传镜像
docker pull bitnami/nginx:1.25.3-debian-11-r0
docker tag docker.io/bitnami/nginx:1.25.3-debian-11-r0 reg.westos.org/bitnami/nginx:1.25.3-debian-11-r0
docker push reg.westos.org/bitnami/nginx:1.25.3-debian-11-r0
部署应用
helm install myapp .
测试:
再次修改配置
vim values.yaml
helm upgrade myapp .
查看应用
helm list
helm history myapp
回滚应用
helm rollback myapp 1
helm uninstall myapp
三、封装chart包
helm create mychart
vim Chart.yaml
vim values.yaml
检测语法 打包 部署应用 回收
helm lint mychart/
helm package mychart/
helm install myapp mychart-0.1.0.tgz
helm list
测试:更新:
测试:
回收:
kubectl get all
四、上传chart到OCI仓库
创建harbor仓库:
未登录认证时 :
需要拷贝证书以及登录
cp /etc/docker/certs.d/reg.westos.org/ca.crt /etc/pki/tls/certs/
helm registry login reg.westos.org -u admin -p 123456
helm env
上传chart
helm push mychart-0.2.0.tgz oci://reg.westos.org/charts
下载chart,默认下载最新版本
helm pull oci://reg.westos.org/charts/mychart --version 0.2.0
安装chart
helm install myapp oci://reg.westos.org/charts/mychart --version 0.1.0
测试:
helm upgrade myapp oci://reg.westos.org/charts/mychart --version 0.2.0
也可以使用
helm rollback myapp 1 回滚版本
测试:
五、部署wordpress博客系统
上传镜像:
下载chart包部署 mysql数据库集群 使用yml文件安装应用
vim mysql-values.yaml
global:
imageRegistry: reg.westos.org
architecture: replication
auth:
rootPassword: westos
database: wordpress
username: wordpress
password: wordpress
replicationUser: replicator
replicationPassword: westos
helm install --wait mydbcluster -f mysql-values.yaml mysql-9.14.2.tgz
查看部署信息
helm get manifest mydbcluster |kubectl get -f -
MYSQL_ROOT_PASSWORD=$(kubectl get secret --namespace default mydbcluster-mysql -o jsonpath="{.data.mysql-root-password}" | base64 -d)
kubectl run mydbcluster-mysql-client --rm --tty -i --restart='Never' --image reg.westos.org/bitnami/mysql:8.0.35-debian-11-r0 --namespace default --env MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD --command -- bash
mysql -h mydbcluster-mysql-primary.default.svc.cluster.local -uroot -p"$MYSQL_ROOT_PASSWORD"
mysql -h mydbcluster-mysql-secondary.default.svc.cluster.local -uwordpress -pwordpress
部署wordpress
vim wordpress-values.yaml
global:
imageRegistry: reg.westos.org
wordpressUsername: james
wordpressPassword: james
mariadb:
enabled: false
externalDatabase:
host: mydbcluster-mysql-primary
user: wordpress
password: wordpress
database: wordpress
helm install myblog -f wordpress-values.yaml wordpress-18.1.6.tgz
等待myblog初始化完毕
kubectl logs myblog-wordpress-c6d4c4647-qdts6 -f
获取myblog 外部IP
helm get manifest myblog |kubectl get -f -



升级mydbcluster
vim mysql-values-update.yaml
global:
imageRegistry: reg.westos.org
architecture: replication
auth:
rootPassword: westos
database: wordpress
username: wordpress
password: wordpress
replicationUser: replicator
replicationPassword: westos
secondary:
replicaCount: 2
helm upgrade --atomic --timeout 10m mydbcluster -f mysql-values-update.yaml mysql-9.14.2.tgz
查看历史修订 回滚版本
helm history mydbcluster
helm get manifest mydbcluster --revision 1
helm rollback mydbcluster 1
helm history mydbcluster
回收:
六、helm部署storageclass
kubectl delete -f nfs-client.yaml
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
helm search repo nfs-subdir-external-provisioner
修改配置文件
将修改好的文件打包 上传chart到oci
创建namespace
kubectl create namespace nfs-provisioner
使用oci部署应用
helm -n nfs-provisioner install --wait oci://reg.westos.org/charts/nfs-subdir-external-provisioner
kubectl -n nfs-provisioner get pod
测试:
七、helm部署ingress-nginx
kubectl delete -f deploy.yaml



添加repo下载chart包
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm search repo ingress-nginx
helm pull ingress-nginx/ingress-nginx
修改配置文件
vim values.yaml
将修改好的文件打包 上传chart到oci
tar zxf ingress-nginx-4.8.3.tgz
helm package ingress-nginx
helm push ingress-nginx-4.8.3.tgz oci://reg.westos.org/charts
创建namespace 部署应用
kubectl create namespace ingress-nginx
helm -n ingress-nginx install ingress-nginx oci://reg.westos.org/charts/ingress-nginx
测试:
helm -n ingress-nginx get manifest ingress-nginx |kubectl get -f -
helm install myapp local/mychart
curl myapp.westos.org
helm uninstall myapp
八、helm部署metrics-server
kubectl delete -f components.yaml

添加repo 及下载
helm repo add metrics-server https://kubernetes-sigs.github.io/metrics-server/
helm search repo metrics-server
helm pull metrics-server/metrics-server
解压修改配置文件
tar zxf metrics-server-3.8.4.tgz
cd metrics-server
vim values.yaml



上传至oci
创建namespace
kubectl create namespace metrics-server
helm -n metrics-server install metrics-server oci://reg.westos.org/charts/metrics-server
helm -n metrics-server get manifest metrics-server kubectl get -f
测试:
九、kubeapps
下载上传镜像:
docker load -i kubeapps-2.9.0.tar
docker images |grep reg.westos.org/bitnami | awk '{system("docker push "$1":"$2"")}'
下载chart包
helm search repo kubeapps
helm pull my-repo/kubeapps
解压修改配置文件
tar zxf kubeapps-14.0.2.tgz
cd kubeapps/
vim values.yaml
使用LoadBalancer 不使用ingress ingress访问需要在Windows上添加解析
打包上传至oci
helm package kubeapps/
helm push kubeapps-14.0.2.tgz oci://reg.westos.org/charts
创建namespace 使用oci部署
kubectl create namespace kubeapps
helm -n kubeapps install kubeapps oci://reg.westos.org/charts/kubeapps
获取访问信息:
访问:
kubectl create serviceaccount kubeapps-operator -n kubeapps
kubectl create clusterrolebinding kubeapps-operator --clusterrole=cluster-admin --serviceaccount=kubeapps:kubeapps-operator
kubectl -n kubeapps create token kubeapps-operator
使用token登录web页面