Kubernetes(K8S) helm chart

kubernetes,k8s,helm,chart · 浏览次数 : 184

小编点评

**内容生成指南** **1. 内容格式** * 内容以 YAML 文件格式生成。 * yaml 文件中定义变量和值。 * 支持使用变量方便统一定义。 **2. 内容结构** * 每個 YAML 文件对应一个 Kubernetes 资源。 * 资源包含以下元素: * metadata:资源创建的创建时间和标签。 * spec:资源定义的详细信息。 * status:资源状态信息。 **3. 内容生成步骤** * 首先定义一个 yaml 文件,包含所需的资源定义。 * 使用 `helm generate` 命令生成 Kubernetes 集发布。 * 生成 YAML 文件时,需要带简单的排版,例如: * `image:` * `tag:` * `label:` * `port:` * `replicas:` **4. 示例内容** **deployment.yaml** ```yaml metadata: name: web2-deployspec labels: app: nginx spec: containers: - image: nginx name: nginx resources: limits: image: 16 tag: 1.16 spec: containers: - image: nginx name: nginx resources: limits: image: 16 labels: app: nginx ``` **release.yaml** ```yaml metadata: name: web2-release labels: app: nginx spec: resources: limits: image: 16 tag: 1.16 spec: containers: - image: nginx name: nginx resources: limits: image: 16 labels: app: nginx ``` **5. 排版提示** * 使用变量方便统一定义。 * 在 YAML 文件中定义标签,以便在生成资源时使用。 * 带简单的排版,例如: * `image:` * `tag:` * `label:` * `port:` * `replicas:`

正文

感觉和放到一个 yaml 文件中,用 ---- 分隔,操作繁琐程度上,没有太大区别

创建自定义 Chart

# 创建自定义的 chart 名为 mychart
[root@k8smaster ~]# helm create mychart
Creating mychart
[root@k8smaster ~]# cd mychart/
[root@k8smaster mychart]# ls
charts  
Chart.yaml  # 当前chart 属性配置信息
templates   # 编写 yaml 文件放到这个目录,是 yaml 的集合
values.yaml # yaml文件可以使用的全局变量
[root@k8smaster mychart]# 

创建 yaml 文件

在 templates 文件夹中创建两个 yaml 文件

  • deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: web1
  name: web1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: web1
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: web1
    spec:
      containers:
      - image: nginx
        name: nginx
        resources: {}
status: {}
  • service.yaml
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    app: web1
  name: web1
spec:
  ports:   
  - port: 80
    protocol: TCP
    targetPort: 80
    nodePort: 30390  # 可以指定暴露出去的端口,防止重启 Pod 后发生变化 
  selector:
    app: web1
  type: NodePort
status:
  loadBalancer: {}
# 切换到 templates 目录下
[root@k8smaster mychart]# cd templates/
# 创建一个web1应用--内容见上文
[root@k8smaster templates]# vi deployment.yaml
# 暴露端口--内容见上文
[root@k8smaster templates]# vi service.yaml
[root@k8smaster templates]# 

安装

[root@k8smaster ~]# helm install web1 mychart/
NAME: web1
LAST DEPLOYED: Mon Nov 28 14:26:34 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:
  export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=mychart,app.kubernetes.io/instance=web1" -o jsonpath="{.items[0].metadata.name}")
  echo "Visit http://127.0.0.1:8080 to use your application"
  kubectl --namespace default port-forward $POD_NAME 8080:80
[root@k8smaster ~]# helm list
NAME    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                   APP VERSION
ui      default         1               2022-11-28 13:15:05.404335352 +0800 CST deployed        weave-scope-1.1.12      1.12.0     
web1    default         1               2022-11-28 14:26:34.854631893 +0800 CST deployed        mychart-0.1.0           1.16.0     
[root@k8smaster ~]# kubectl get pod,svc
NAME                                                READY   STATUS    RESTARTS   AGE
pod/nginx-f89759699-652r4                           1/1     Running   0          5d
pod/nginx-nfs-788564fbc8-g58xd                      1/1     Running   0          5d
pod/weave-scope-agent-ui-7qqd4                      1/1     Running   0          73m
pod/weave-scope-agent-ui-knqwk                      1/1     Running   0          73m
pod/weave-scope-agent-ui-r74cm                      1/1     Running   0          73m
pod/weave-scope-agent-ui-xnrht                      1/1     Running   0          73m
pod/weave-scope-cluster-agent-ui-7498b8d4f4-pmkzh   1/1     Running   0          73m
pod/weave-scope-frontend-ui-649c7dcd5d-jfg72        1/1     Running   0          73m
pod/web1-7f87dfbd56-w7p4d                           1/1     Running   0          91s

NAME                     TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
service/javademo1        NodePort    10.106.43.46     <none>        8111:31452/TCP   40d
service/kubernetes       ClusterIP   10.96.0.1        <none>        443/TCP          45d
service/nginx            NodePort    10.103.87.81     <none>        80:30339/TCP     45d
service/nginx-nfs        NodePort    10.99.84.9       <none>        80:30205/TCP     19d
service/ui-weave-scope   NodePort    10.101.4.212     <none>        80:30690/TCP     73m
service/web1             NodePort    10.100.238.141   <none>        80:30390/TCP     91s
[root@k8smaster ~]# 

image

升级

[root@k8smaster ~]# helm upgrade web1 mychart/
Release "web1" has been upgraded. Happy Helming!
NAME: web1
LAST DEPLOYED: Mon Nov 28 14:29:39 2022
NAMESPACE: default
STATUS: deployed
REVISION: 2
NOTES:
1. Get the application URL by running these commands:
  export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=mychart,app.kubernetes.io/instance=web1" -o jsonpath="{.items[0].metadata.name}")
  echo "Visit http://127.0.0.1:8080 to use your application"
  kubectl --namespace default port-forward $POD_NAME 8080:80
[root@k8smaster ~]# 

yaml 高效复用

通过传递参数,动态渲染模板 yaml 内容,动态传入参数生成
在 chart values.yaml 文件,定义 yaml 文件全局变量
在 values.yaml 定义变量和值
在具体 yaml文件中,获取定义变量的值

  • image、tag、label、port、replicas
定义变量
[root@k8smaster ~]# cd mychart/
[root@k8smaster mychart]# vi values.yaml
image: nginx
replicas: 1
tag: 1.16
label: nginx
port: 80

image

使用变量

方便统一定义
{{ .Values.变量名称}}
{{ .Release.Name}} -> 获取版本名称

  • deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Release.Name}}-deploy
spec:
  replicas: 1
  selector:
    matchLabels:
      app: {{ .Values.label}}
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: {{ .Values.label}}
    spec:
      containers:
      - image: {{ .Values.image}}
        name: nginx
        resources: {}
status: {}
  • service.yaml
apiVersion: v1
kind: Service
metadata: 
  name: {{ .Release.Name}}-deploy
spec:
  ports:
  - port: {{ .Values.port}}
    protocol: TCP
    targetPort: 80    
  selector:
    app: {{ .Values.label}}
  type: NodePort
status:
  loadBalancer: {}
[root@k8smaster mychart]# vi templates/deployment.yaml 
[root@k8smaster mychart]# vi templates/deployment.yaml 
[root@k8smaster mychart]# cd
[root@k8smaster ~]# helm install --dry-run web2 mychart/
# Source: mychart/templates/service.yaml
apiVersion: v1
kind: Service
metadata: 
  name: web2-deploy
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: NodePort
status:
  loadBalancer: {}
---
# Source: mychart/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web2-deploy
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx
        name: nginx
        resources: {}
status: {}
[root@k8smaster ~]# helm install web2 mychart/
NAME: web2
LAST DEPLOYED: Mon Nov 28 15:13:48 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
[root@k8smaster ~]# kubectl get pod,svc 
NAME                                                READY   STATUS    RESTARTS   AGE
pod/nginx-f89759699-652r4                           1/1     Running   0          5d1h
pod/nginx-nfs-788564fbc8-g58xd                      1/1     Running   0          5d1h
pod/weave-scope-agent-ui-7qqd4                      1/1     Running   0          119m
pod/weave-scope-agent-ui-knqwk                      1/1     Running   0          119m
pod/weave-scope-agent-ui-r74cm                      1/1     Running   0          119m
pod/weave-scope-agent-ui-xnrht                      1/1     Running   0          119m
pod/weave-scope-cluster-agent-ui-7498b8d4f4-pmkzh   1/1     Running   0          119m
pod/weave-scope-frontend-ui-649c7dcd5d-jfg72        1/1     Running   0          119m
pod/web1-7f87dfbd56-w7p4d                           1/1     Running   0          47m
pod/web2-deploy-f89759699-9z5n4                     1/1     Running   0          22s

NAME                     TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
service/javademo1        NodePort    10.106.43.46     <none>        8111:31452/TCP   40d
service/kubernetes       ClusterIP   10.96.0.1        <none>        443/TCP          45d
service/nginx            NodePort    10.103.87.81     <none>        80:30339/TCP     45d
service/nginx-nfs        NodePort    10.99.84.9       <none>        80:30205/TCP     19d
service/ui-weave-scope   NodePort    10.101.4.212     <none>        80:30690/TCP     119m
service/web1             NodePort    10.100.238.141   <none>        80:30390/TCP     47m
service/web2-deploy      NodePort    10.111.219.124   <none>        80:30277/TCP     22s
[root@k8smaster ~]# helm uninstall web2
release "web2" uninstalled

与Kubernetes(K8S) helm chart相似的内容:

Kubernetes(K8S) helm chart

感觉和放到一个 yaml 文件中,用 分隔,操作繁琐程度上,没有太大区别 创建自定义 Chart # 创建自定义的 chart 名为 mychart [root@k8smaster ~]# helm create mychart Creating mychart [root@k8smaster ~]

Kubernetes(K8S) helm 安装

Helm 是一个 Kubernetes 的包管理工具, 就像 Linux 下的包管理器, 如 yum/apt 等, 可以很方便的将之前打包好的 yaml 文件部署到 kubernetes 上。 Helm 有 3 个重要概念: helm: 一个命令行客户端工具, 主要用于 Kubernetes 应用

[转帖]Kubernetes-18:Dashboard安装及使用

https://www.cnblogs.com/v-fan/p/13950268.html Helm安装Dashboard 简介 Dashboard 是 kubernetes 的图形化管理工具,可直观的看到k8s中各个类型控制器的当前运行情况,以及Pod的日志,另外也可直接在 dashboard 中

使用 Helm 管理应用的一些 Tips

背景 Helm 是一个 Kubernetes 的包管理工具,有点类似于 Mac 上的 brew,Python 中的 PIP;可以很方便的帮我们直接在 kubernetes 中安装某个应用。 比如我们可以直接使用以下命令方便的在 k8s 集群安装和卸载 MySQL: helm install my-s

二进制安装Kubernetes(k8s)v1.30.1

二进制安装Kubernetes(k8s)v1.30.1 https://github.com/cby-chen/Kubernetes 开源不易,帮忙点个star,谢谢了 介绍 kubernetes(k8s)二进制高可用安装部署,支持IPv4+IPv6双栈。 我使用IPV6的目的是在公网进行访问,所以

DevSecOps 需要知道的十大 K8s 安全风险及建议

Kubernetes (K8s)是现代云原生世界中的容器管理平台。它实现了灵活、可扩展地开发、部署和管理微服务。K8s 能够与各种云提供商、容器运行时接口、身份验证提供商和可扩展集成点一起工作。然而 K8s 的集成方法可以在任何基础设施上运行任何容器化应用程序,这使得围绕 K8s 和其上的应用程序堆

Kubernetes(K8S) Deployment 拉取阿里云镜像部署

Docker Image 推到阿里云仓库,可以看 SpringBoot Docker 发布到 阿里仓库 1. 阿里镜像仓库加了授权,所以 K8S 拉之前要做下授权处理 [root@k8smaster ~]# kubectl create secret docker-registry registry

Kubernetes(K8S) 拉取镜像 ImagePullBackOff pull access denied

K8S 拉取阿里云镜像 第一次用时,没注意 授权,所以在 kubectl apply 后一直出现 ImagePullBackOff [root@k8smaster ~]# kubectl apply -f javademo1.yaml deployment.apps/javademo1 create

Kubernetes(K8S) Deployment 升级和回滚

创建部署详见 Kubernetes(K8S) Deployment 部署 Pod 传统应用升级,一般是V1.0的jar包,有一个应对 1.0 的 shell 启动脚本。升级时,传 2.0 的 jar包,配置 2.0 的 shell 脚本。 执行顺序为,停1.0的服务,启2.0的服务,有问题时,把2.

Kubernetes(K8S) 镜像拉取策略 imagePullPolicy

镜像仓库,镜像已更新,版本没更新, K8S 拉取后,还是早的服务,原因:imagePullPolicy 镜像拉取策略 默认为本地有了就不拉取,需要修改 [root@k8smaster ~]# kubectl edit deployment/javademo1 ..... spec: containe