用helm部署第一个服务
1.安装服务,若不指定名称空间,则默认安装default名称空间。默认用的是nginx deployment
[root@master23105-helm]# helm create zhiyong18-web && cd zhiyong18-web
# 可以发现模板中用到的默认变量值是 nginx,所以默认部署一个nginx
[root@master231zhiyong18-web]# grep -A 2 '^image:' values.yaml
image:
repository: nginx
pullPolicy: IfNotPresent
2.使用 helm install 自定义的应用名称 Chart目录
方式创建一个we服务。
[root@master23105-helm]# helm install luckyboy-web zhiyong18-web
[root@master23105-helm]# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
luckyboy-web default 1 2024-11-23 13:30:36.34266663 +0000 UTC deployed zhiyong18-web-0.1.0 1.16.0
[root@master23105-helm]# kubectl get pods
NAME READY STATUS RESTARTS AGE
luckyboy-web-zhiyong18-web-6bcc8788cd-9ch85 0/1 ContainerCreating 0 15s
2.服务卸载;会自动删除该Chart下的所有资源清单文件
[root@master23105-helm]# helm uninstall luckyboy-web
修改value为自己的镜像
1.我们只需要对 values.yaml的repository、tag字段修改为自己仓库的镜像就可以实现。这里使用sed替换比较方便,就不用vim打开了
sed -i '/repository:/s#nginx#registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps#' zhiyong18-web/values.yaml
sed -i '/tag:/s#""#v1#' zhiyong18-web/values.yaml
2.查看一下,这样就等于传统yaml中的:image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
[root@master23105-helm]# grep -A 4 '^image:' zhiyong18-web/values.yaml
image:
repository: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps
pullPolicy: IfNotPresent
# Overrides the image tag whose default is the chart appVersion.
tag: v1
3.把自定义镜像的chart给部署起来
[root@master23105-helm]# helm install myweb zhiyong18-web
[root@master23105-helm]# kubectl get pods myweb-zhiyong18-web-6b4b5b59d9-27kfx
NAME READY STATUS RESTARTS AGE
myweb-zhiyong18-web-6b4b5b59d9-27kfx 1/1 Running 0 46s
4.增加-n 名称空间名字
指定名称空间进行部署;先卸载之前的web服务,否则冲突
[root@master23105-helm]# helm uninstall myweb
release "myweb" uninstalled
[root@master23105-helm]# kubectl create ns zhiyong18-helm
namespace/zhiyong18-helm created
[root@master23105-helm]# helm install myweb zhiyong18-web -n zhiyong18-helm
[root@master23105-helm]# kubectl -n zhiyong18-helm get pods
NAME READY STATUS RESTARTS AGE
myweb-zhiyong18-web-6b4b5b59d9-4x4s4 1/1 Running 0 29s
看到这,是不是绝对helm非常容易上手了呢。没错。循序渐进
不使用value模版部署服务
values.yaml 是模板文件提供引用值。如果不使用模板的话,那写起来和普通的yaml没有太大区别
1.补充一下kubeadm部署的K8S,自定义svc端口范围。vim /etc/kubernetes/manifests/kube-apiserver.yaml,
增加 - --service-node-port-range=3000-50000
...
12 spec:
13 containers:
14 - command:
15 - kube-apiserver
16 - --advertise-address=10.0.0.231
17 - --service-node-port-range=3000-50000
...
2.创建chart后,清空模板文件
[root@master23105-helm]# helm create 01-zhiyong18-no-value
Creating 01-zhiyong18-no-value
[root@master23105-helm]# > 01-zhiyong18-no-value/values.yaml
[root@master23105-helm]# rm -rf 01-zhiyong18-no-value/templates/*
3.准备自定义资源清单
svc的yaml:
cat 01-zhiyong18-no-value/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
name: xiuxian-svc-nodeport
spec:
type: NodePort
selector:
apps: xiuxian
ports:
- port: 80
targetPort: 80
nodePort: 3080
工作负载(也就是控制器)的yaml:
cat 01-zhiyong18-no-value/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy-xiuxian
spec:
replicas: 3
selector:
matchLabels:
apps: xiuxian
template:
metadata:
labels:
apps: xiuxian
version: v1
spec:
containers:
- name: c1
image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v3
4.部署测试
[root@master23105-helm]# helm install xiuxian 01-zhiyong18-no-value -n zhiyong18-helm
NAME: xiuxian
LAST DEPLOYED: Sat Nov 23 14:24:03 2024
NAMESPACE: zhiyong18-helm
STATUS: deployed
REVISION: 1
TEST SUITE: None
[root@master23105-helm]# helm list -n zhiyong18-helm
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
xiuxian zhiyong18-helm 1 2024-11-23 14:24:03.72083673 +0000 UTC deployed 01-zhiyong18-no-value-0.1.0 1.16.0
使用原生kubectl查看名称空间下的所有资源
[root@master23105-helm]# kubectl -n zhiyong18-helm get all
NAME READY STATUS RESTARTS AGE
pod/deploy-xiuxian-5b85959cd-27lkx 1/1 Running 0 2m31s
pod/deploy-xiuxian-5b85959cd-hmfs7 1/1 Running 0 2m31s
pod/deploy-xiuxian-5b85959cd-xhm9p 1/1 Running 0 2m31s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/xiuxian-svc-nodeport NodePort 10.200.135.162 <none> 80:3080/TCP 2m31s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/deploy-xiuxian 3/3 3 3 2m31s
NAME DESIRED CURRENT READY AGE
replicaset.apps/deploy-xiuxian-5b85959cd 3 3 3 2m31s
Chart.yaml元数据文件
之前提到过chart.yaml是Chart 的元数据。参考链接:https://semver.org/lang/zh-CN/
- type
- application表示当前Chart是一个应用程序,可以直接部署;
- ibrary表示当前Chart是一个库,当前库不提供任何模板文件,因此无法进行部署;但是library库可以定义函数以供application类型的Chart进行调用
- version:表示 Helm Chart 的版本,是 Chart 的核心属性,直接影响到 Chart 的发布与升级
- 主版本号:当你做了不兼容的 API 修改
- 次版本号:当你做了向下兼容的功能性新增
- 修订号:当你做了向下兼容的问题修正
- appVersion:是应用程序的版本,用于描述 Chart 部署的实际应用版本。举例容器镜像是
nginx:1.16.0
[root@master23105-helm]# cat 01-zhiyong18-no-value/Chart.yaml
apiVersion: v2
# 这个 chart 名字可以任意取,不过还是根据应用名称或业务命名比较合理
name: 01-zhiyong18-no-value
description: A Helm chart for Kubernetes
# 定义Chart的类型,有效值为: application 、library
type: application
# 版本号,类似于下载的软件,V几点几。这也可以自定义
version: 0.1.0
appVersion: "1.16.0"
2.ceph的命名和这个很相似可借鉴一下。我的命名规则就参考了ceph
-
x.0.y: 代表的是内部测试alpha版本
-
x.1.y:代表的是beta版本,外部人员勇敢者可以尝试
-
x.2.y:代表的是Stable版本,外部人员可以在生产环境中使用
修改Chart的元数据为自定义;
[root@master23105-helm]# yy 01-zhiyong18-no-value/Chart.yaml
apiVersion: v2
name: 01-zhiyong18-no-value
description: A Helm chart for Kubernetes
type: application
version: "0.2.2"
appVersion: "1.16.0"
3.验证版本确实指定是 应用程序的版本
[root@master23105-helm]# helm list | awk '{print $NF}'
VERSION
1.16.0
自定义release帮助信息
1.删除之前的helm,增加文件,内容如下
[root@master23105-helm]# cat 01-zhiyong18-no-value/templates/NOTES.txt
欢迎使用wzy自定义Chart程序,当前的Chart版本号是: {{.Chart.Name}}:{{.Chart.Version}}
正在使用的 应用 版本号为: {{.Chart.Name}}:{{.Chart.AppVersion}}
当前的release名称: {{.Release.Name}}
名称空间: {{.Release.Namespace}}
修订版本: {{.Release.Revision}}
当前操作是否升级: {{.Release.IsUpgrade}}
我的博客地址:https://blog.youkuaiyun.com/qq_73797346
2.安装部署helm应用时,可以看到提示
[root@master23105-helm]# helm install xiuxian 01-zhiyong18-no-value/
NAME: xiuxian
LAST DEPLOYED: Sat Nov 23 15:05:27 2024
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
欢迎使用wzy自定义Chart程序,当前的Chart版本号是: 01-zhiyong18-no-value:0.2.2
正在使用的 应用 版本号为: 01-zhiyong18-no-value:1.16.0
当前的release名称: xiuxian
名称空间: default
修订版本: 1
当前操作是否升级: false
我的博客地址:https://blog.youkuaiyun.com/qq_73797346
创建Chart基于自定义values
都是使用默认的value,很明显不能满足自己的需求,可以手写一份
1.拷贝之前用过的模板
[root@master23105-helm]# cp -r 01-zhiyong18-no-value 02-zhiyong18-use-value
[root@master23105-helm]# cat 02-zhiyong18-use-value/Chart.yaml
apiVersion: v2
name: 01-zhiyong18-no-value
description: A Helm chart for Kubernetes
type: application
version: "0.2.2"
appVersion: "1.16.0"
2.修改values.yaml实现自定义。主要是一些标签信息,探针,svc类型和端口
cat 02-zhiyong18-use-value/values.yaml
# 定义的是通用的字段
common:
xiuxian:
name: xiuxian
labels:
apps: xiuxian
# 定义deployment资源的相关字段
deploy:
xiuxian:
image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps
tag: v1
replicas: 3
livenessProbe:
httpGet:
port: 80
path: /index.html
failureThreshold: 3
initialDelaySeconds: 3
periodSeconds: 1
successThreshold: 1
timeoutSeconds: 1
readinessProbe:
httpGet:
port: 80
path: /index.html
failureThreshold: 3
initialDelaySeconds: 0
periodSeconds: 1
successThreshold: 1
timeoutSeconds: 1
# 定义service资源相关字段
service:
xiuxian:
type: NodePort
ports:
port: 80
targetPort: 80
nodePort: 3080
3.创建控制器模版文件,里面全是在引用 values 里边的内容
cat 02-zhiyong18-use-value/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{.Values.common.xiuxian.name}}
spec:
replicas: {{.Values.deploy.xiuxian.replicas}}
selector:
matchLabels:
apps: xiuxian
template:
metadata:
labels:
apps: xiuxian
version: v1
spec:
containers:
- name: c1
image: "{{.Values.deploy.xiuxian.image}}:{{.Values.deploy.xiuxian.tag}}"
4.创建svc模版
cat 02-zhiyong18-use-value/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
name: {{.Values.common.xiuxian.name}}
spec:
type: {{.Values.service.xiuxian.type}}
selector:
apps: xiuxian
ports:
- port: {{.Values.service.xiuxian.ports.port}}
targetPort: {{.Values.service.xiuxian.ports.targetPort}}
nodePort: {{.Values.service.xiuxian.ports.nodePort}}
5.自定义帮助信息
[root@master23105-helm]# cat 02-zhiyong18-use-value/templates/NOTES.txt
欢迎使用wzy自定义Chart程序,当前的Chart版本号是: {{.Chart.Name}}:{{.Chart.Version}}
正在使用的 应用 版本号为: {{.Chart.Name}}:{{.Chart.AppVersion}}
当前的release名称: {{.Release.Name}}
名称空间: {{.Release.Namespace}}
修订版本: {{.Release.Revision}}
当前操作是否升级: {{.Release.IsUpgrade}}
当前部署的镜像为: {{.Values.deploy.xiuxian.image}}:{{.Values.deploy.xiuxian.tag}}
访问测试: http://10.0.0.231:{{.Values.service.xiuxian.ports.nodePort}}
我的博客地址:https://blog.youkuaiyun.com/qq_73797346
6.部署
[root@master23105-helm]# helm install 02-values 02-zhiyong18-use-value/
NAME: 02-values
LAST DEPLOYED: Sat Nov 23 15:44:59 2024
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
欢迎使用wzy自定义Chart程序,当前的Chart版本号是: 01-zhiyong18-no-value:0.2.2
正在使用的 应用 版本号为: 01-zhiyong18-no-value:1.16.0
当前的release名称: 02-values
名称空间: default
修订版本: 1
当前操作是否升级: false
当前部署的镜像为: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
访问测试: http://10.0.0.231:3080
我的博客地址:https://blog.youkuaiyun.com/qq_73797346
[root@master23105-helm]# kubectl get all
NAME READY STATUS RESTARTS AGE
pod/xiuxian-568cf47956-4j9d8 1/1 Running 0 37s
pod/xiuxian-568cf47956-5b42g 1/1 Running 0 37s
pod/xiuxian-568cf47956-hr4sd 1/1 Running 0 37s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.200.0.1 <none> 443/TCP 20d
service/xiuxian NodePort 10.200.216.115 <none> 80:3080/TCP 37s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/xiuxian 3/3 3 3 37s
NAME DESIRED CURRENT READY AGE
replicaset.apps/xiuxian-568cf47956 3 3 3 37s
[root@worker232~]# curl -s http://10.0.0.231:3080 | grep color
<h1 style="color: green">凡人修仙传 v1 </h1>
注释的书写
{{- /* 此行是注释,安装时不会弹出 */}}