第154天学习打卡(Kubernetes 使用Helm快速部署应用, 如何自己创建Chart)

Posted doudoutj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第154天学习打卡(Kubernetes 使用Helm快速部署应用, 如何自己创建Chart)相关的知识,希望对你有一定的参考价值。

使用helm快速部署应用

第一步 使用命令搜索应用

helm search repo 名称 (weave)

第二步 根据搜索内容选择安装

helm install 安装之后的名称 搜索应用的名称

查看安装之后状态
helm list
helm status 安装之后名称

[root@master linux-amd64]# helm search repo weave
NAME              	CHART VERSION	APP VERSION	DESCRIPTION                                       
stable/weave-cloud	0.3.9        	1.4.0      	DEPRECATED - Weave Cloud is a add-on to Kuberne...
stable/weave-scope	1.1.12       	1.12.0     	DEPRECATED - A Helm chart for the Weave Scope c...
[root@master linux-amd64]# helm install ui3 stable/weave-scope
WARNING: This chart is deprecated
W0611 16:13:45.383789   15586 warnings.go:70] rbac.authorization.k8s.io/v1beta1 ClusterRole is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 ClusterRole
W0611 16:13:45.385260   15586 warnings.go:70] rbac.authorization.k8s.io/v1beta1 ClusterRoleBinding is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 ClusterRoleBinding
W0611 16:13:45.409268   15586 warnings.go:70] rbac.authorization.k8s.io/v1beta1 ClusterRole is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 ClusterRole
W0611 16:13:45.413066   15586 warnings.go:70] rbac.authorization.k8s.io/v1beta1 ClusterRoleBinding is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 ClusterRoleBinding
NAME: ui3
LAST DEPLOYED: Fri Jun 11 16:13:45 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
You should now be able to access the Scope frontend in your web browser, by
using kubectl port-forward:

kubectl -n default port-forward $(kubectl -n default get endpoints \\
ui3-weave-scope -o jsonpath='{.subsets[0].addresses[0].targetRef.name}') 8080:4040

then browsing to http://localhost:8080/.
For more details on using Weave Scope, see the Weave Scope documentation:

https://www.weave.works/docs/scope/latest/introducing/

[root@master linux-amd64]# helm repo list
NAME  	URL                                      
stable	http://mirror.azure.cn/kubernetes/charts/
[root@master linux-amd64]# helm list
NAME	NAMESPACE	REVISION	UPDATED                                	STATUS  	CHART             	APP VERSION
ui3  	default  	1       	2021-06-11 15:47:29.338897612 +0800 CST	deployed	weave-scope-1.1.12	1.12.0 
[root@master linux-amd64]# helm status ui3 #查看状态信息
NAME: ui3
LAST DEPLOYED: Fri Jun 11 16:13:45 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
You should now be able to access the Scope frontend in your web browser, by
using kubectl port-forward:

kubectl -n default port-forward $(kubectl -n default get endpoints \\
ui3-weave-scope -o jsonpath='{.subsets[0].addresses[0].targetRef.name}') 8080:4040

then browsing to http://localhost:8080/.
For more details on using Weave Scope, see the Weave Scope documentation:

https://www.weave.works/docs/scope/latest/introducing/
[root@master linux-amd64]# kubectl get svc
NAME              TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes        ClusterIP   10.96.0.1        <none>        443/TCP        5d19h
ui3-weave-scope   ClusterIP   10.103.97.141    <none>        80/TCP         7m31s
web               NodePort    10.111.111.127   <none>        80:32079/TCP   19h


修改service的yaml文件,type改为NodePort,使其对外暴露端口

[root@master linux-amd64]# kubectl edit svc ui3-weave-scope 
service/ui3-weave-scope edited
[root@master linux-amd64]# kubectl get svc
NAME              TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes        ClusterIP   10.96.0.1        <none>        443/TCP        5d19h
ui3-weave-scope   NodePort    10.103.97.141    <none>        80:31674/TCP   15m
web               NodePort    10.111.111.127   <none>        80:32079/TCP   19h
[root@master linux-amd64]# 

image-20210611162755019

image-20210611163519276

如何自己创建Chart

1.使用命令创建chart

helm create chart名称
[root@master linux-amd64]# cd ..
[root@master ~]# helm create mychart
Creating mychart
[root@master ~]# ls
10-flannel.conflist  cronjob.yaml                    ingress01.yaml           mary                   recommended.yaml  service1.yaml
10-kubeadm.conf      deploy.yaml                     ingress-controller.yaml  mychart                redis.properties  sts.yaml
admin.conf           deploy.yaml.1                   job.yaml                 myconfig.yaml          secret-var.yaml
cm.yaml              ds.yaml                         kube-flannel.yml         rbac-rolebinding.yaml  secret-vol.yaml
config-var.yaml      helm-v3.6.0-linux-amd64.tar.gz  linux-amd64              rbac-role.yaml         secret.yaml
[root@master ~]# cd mychart
[root@master mychart]# ls
charts  Chart.yaml  templates  values.yaml
[root@master mychart]# ls charts/
[root@master mychart]# cd charts/
[root@master charts]# cd ..
[root@master mychart]# cat Chart.yaml #查看信息
apiVersion: v2
name: mychart
description: A Helm chart for Kubernetes

# A chart can be either an 'application' or a 'library' chart.
#
# Application charts are a collection of templates that can be packaged into versioned archives
# to be deployed.
#
# Library charts provide useful utilities or functions for the chart developer. They're included as
# a dependency of application charts to inject those utilities and functions into the rendering
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
type: application

# This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version.
# Versions are expected to follow Semantic Versioning (https://semver.org/)
version: 0.1.0

# This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application. Versions are not expected to
# follow Semantic Versioning. They should reflect the version the application is using.
# It is recommended to use it with quotes.
appVersion: "1.16.0"
[root@master mychart]# cd templates/
[root@master templates]# ls
deployment.yaml  _helpers.tpl  hpa.yaml  ingress.yaml  NOTES.txt  serviceaccount.yaml  service.yaml  tests
[root@master templates]# rm -rf * #删除templates里面的文件,然后等下把自己写的放到这里面
[root@master templates]# ls
[root@master templates]# 

  • Chartyaml: 当前chart属性配置信心
  • templates: 编写yaml文件放到这个目录中
  • values.yaml:yaml文件可以使用全局变量

2.在templates文件夹创建两个yaml文件

  • deployment.yaml
  • service.yaml
[root@master templates]# kubectl create deployment web1 --image=nginx --dry-run -o yaml > deployment.yaml
W0611 16:53:59.635980   32639 helpers.go:553] --dry-run is deprecated and can be replaced with --dry-run=client.
[root@master templates]# ls
deployment.yaml
[root@master templates]# cat 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: {}
[root@master templates]# kubectl create deployment web1 --image=nginx  #先创建web1 ,然后再执行下面的service.yaml
deployment.apps/web1 created
[root@master templates]# kubectl get pods
[root@master templates]# kubectl expose deployment web1 --port=80 --target-port=80 --type=NodePort --dry-run -o yaml > service.yaml
W0611 16:59:07.608904    2461 helpers.go:553] --dry-run is deprecated and can be replaced with --dry-run=client.
[root@master templates]# ls
deployment.yaml  service.yaml
[root@master templates]# vi service.yaml
#然后再删除web1
[root@master templates]# kubectl delete deployment web1
deployment.apps "web1" deleted
[root@master templates]# kubectl get pods
[root@master templates]# ls
deployment.yaml  service.yaml

3.安装mychart

[root@master ~]# helm install web1 mychart/
NAME: web1
LAST DEPLOYED: Fri Jun 11 17:05:55 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
[root@master ~]# kubectl get pods
web1-6fbb48567f-ch86p                            1/1     Running            0          61s
root@master ~]# kubectl get svc
NAME              TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes        ClusterIP   10.96.0.1        <none>        443/TCP        5d20h
ui3-weave-scope   NodePort    10.103.97.141    <none>        80:31674/TCP   53m
web               NodePort    10.111.111.127   <none>        80:32079/TCP   20h
web1              NodePort    10.96.150.188    <none>        80:31544/TCP   79s

image-20210611171131539

4.应用升级

helm upgrade chart名称
[root@master ~]# helm upgrade web1 mychart/
Release "web1" has been upgraded. Happy Helming!
NAME: web1
LAST DEPLOYED: Fri Jun 11 17:12:01 2021
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE: None

实现yaml高效复用

  • 通过传递参数,动态渲染模板,yaml内容动态传入参数生成
  • 在chart中有values.yaml文件,定义yaml文件全局变量
[root@master mychart]# ls
charts  Chart.yaml  templates  values.yaml
[root@master mychart]# 

1.在values.yaml定义变量和值

2.在具体yaml文件中,获取定义变量值

yaml文件大体有几个地方不同

  • image
  • tag
  • label
  • port
  • replicas

一、在values.yaml定义变量和值

这个是原本文件里面的内容

# Default values for mychart.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.

replicaCount: 1

image:
  repository: nginx
  pullPolicy: IfNotPresent
  # Overrides the image tag whose default is the chart appVersion.
  tag: ""

imagePullSecrets: []
nameOverride: ""
fullnameOverride: ""

serviceAccount:
  # Specifies whether a service account should be created
  create: true
  # Annotations to add to the service account
  annotations: {}
  # The name of the service account to use.
  # If not set and create is true, a name is generated using the fullname template
  name: ""

podAnnotations: {}

podSecurityContext: {}
  # fsGroup: 2000

securityContext: {}
  # capabilities:
  #   drop:
  #   - ALL
  # readOnlyRootFilesystem: true
  # runAsNonRoot: true
  # runAsUser: 1000

service:
  type: ClusterIP
  port: 80

ingress:
  enabled: false
  className: ""
  annotations: {}
    # kubernetes.io/ingress.class: nginx
    # kubernetes.io/tls-acme: "true"
  hosts:
    - host: chart-example.local
      paths:
        - path: /

[root@master mychart]# vim values.yaml

image-20210611183002204

二、在templates的yaml文件中使用values.yaml定义的变量

  • 通过表达式形式使用全局变量
    • {{.Values.变量名称}}
    • {{.Release.Name}}
[root@master mychart]# cd templates/
[root@master templates]# ls
deployment.yaml  service.yaml
[root@master templates]# vim deployment.yaml

image-20210611190255063

[root@master templates]# vim service.yaml

image-20210611184537545

[root@master ~]# helm install --dry-run web2 mychart/
NAME: web2
LAST DEPLOYED: Fri Jun 11 19:01:27 2021
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
HOOKS:
MANIFEST:
---
# Source: mychart/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    app: nginx
  name: web2-svc
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:
  creationTimestamp: null
  labels:
    app: nginx
  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: {}
#因为我前面使用web2创建时出错了,使得这个web2已被使用,所以出错换个名字就行
[root@master ~]# helm install web2 mychart/
Error: cannot re-use a name that is still in use
[root@master ~]# helm install web3 mychart/
NAME: web3
LAST DEPLOYED: Fri Jun 11 19:02:33 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
[root@master ~]# kubectl get pods
NAME                                             READY   STATUS             RESTARTS   AGE
ds-test-489bb                                    1/1     Running            0          47h
ds-test-4rvcr                                    1/1     Running            0          47h
ds-test-nx6kt                                    1/1     Running            0          47h
web3-deploy-6799fc88d8-p74vt                     1/1     Running            0          114s
[root@master ~]# kubectl get svc
NAME              TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes        ClusterIP   10.96.0.1        <none>        443/TCP        5d22h
web3-svc          NodePort    10.99.114.106    <none>        80:32379/TCP   2m22s

B站学习网址:k8s教程由浅入深-尚硅谷_哔哩哔哩_bilibili

以上是关于第154天学习打卡(Kubernetes 使用Helm快速部署应用, 如何自己创建Chart)的主要内容,如果未能解决你的问题,请参考以下文章

第151天学习打卡(Kubernetes 集群YAML文件详解 Pod Controller)

第147天学习打卡(Kubernetes 部署)

第156天学习打卡(Kubernetes 搭建监控平台 高可用集群部署 )

第152天学习打卡(Kubernetes 集群安全机制)

第149天学习打卡(Kubernetes 部署nginx 部署Dashboard)

第157天学习打卡(Kubernetes k8s集群部署项目)