4.9、Helm

4.9.1、简单使用

概念

文档:https://github.com/helm/helm/blob/master/docs/charts.md

阿里云apphub:https://developer.aliyun.com/hub/

在没使用 helm 之前,向 kubernetes 部署应用,我们要依次部署 deployment、svc 等,步骤较繁琐。况且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂,helm 通过打包的方式,支持发布的版本管理和控制,很大程度上简化了 Kubernetes 应用的部署和管理

Helm 本质就是让 K8s 的应用管理(Deployment,Service 等 ) 可配置,能动态生成。通过动态生成 K8s 资源清单文件(deployment.yaml,service.yaml)。然后调用 Kubectl 自动执行 K8s 资源部署

Helm 是官方提供的类似于 YUM 的包管理器,是部署环境的流程封装。Helm 有两个重要的概念:chart 和release

  • chart 是创建一个应用的信息集合,包括各种 Kubernetes 对象的配置模板、参数定义、依赖关系、文档说明等。chart 是应用部署的自包含逻辑单元。可以将 chart 想象成 apt、yum 中的软件安装包
  • release 是 chart 的运行实例,代表了一个正在运行的应用。当 chart 被安装到 Kubernetes 集群,就生成一个 release。chart 能够多次安装到同一个集群,每次安装都是一个 release

Helm 包含两个组件:Helm 客户端和 Tiller 服务器,如下图所示:

Helm 客户端负责 chart 和 release 的创建和管理以及和 Tiller 的交互。Tiller 服务器运行在 Kubernetes 集群中,它会处理 Helm 客户端的请求,与 Kubernetes API Server 交互

安装

  1. wget https://storage.googleapis.com/kubernetes-helm/helm-v2.13.1-linux-amd64.tar.gz
  2. tar -zxvf helm-v2.13.1-linux-amd64.tar.gz
  3. cd linux-amd64/
  4. cp helm /usr/local/bin/
  5. # 安装 helm-tiller的docker镜像(k8s节点上都pull)
  6. docker pull gcr.io/kubernetes-helm/tiller:v2.13.1
  7. # 如果安装不下来的可以从阿里云的镜像仓库中下载
  8. https://cr.console.aliyun.com/cn-hangzhou/instances/repositories
  9. # 搜索:kubernetes-helm/tiller 然后 pull 下来在后修改tag
  10. docker pull registry.cn-hangzhou.aliyuncs.com/marico/gcr.io_kubernetes-helm_tiller
  11. docker tag registry.cn-hangzhou.aliyuncs.com/marico/gcr.io_kubernetes-helm_tiller:v2.13.1 gcr.io/kubernetes-helm/tiller:v2.13.1

因为 Kubernetes APIServer 开启了 RBAC 访问控制,所以需要创建 tiller 使用的 service account: tiller 并分配合适的角色给它。详细内容可以查看helm文档中的Role-based Access Control。这里简单起见直接分配cluster- admin 这个集群内置的 ClusterRole 给它。创建 rbac-config.yaml 文件

  1. mkdir -p /usr/local/docker/kubernetes/plugins/test/helm
  2. cd /usr/local/docker/kubernetes/plugins/test/helm
  3. vim rbac-config.yaml
  1. apiVersion: v1
  2. kind: ServiceAccount
  3. metadata:
  4. name: tiller
  5. namespace: kube-system
  6. ---
  7. apiVersion: rbac.authorization.k8s.io/v1beta1
  8. kind: ClusterRoleBinding
  9. metadata:
  10. name: tiller
  11. roleRef:
  12. apiGroup: rbac.authorization.k8s.io
  13. kind: ClusterRole
  14. name: cluster-admin
  15. subjects:
  16. - kind: ServiceAccount
  17. name: tiller
  18. namespace: kube-system
  1. kubectl create -f rbac-config.yaml
  2. helm init --service-account tiller --skip-refresh
  3. # 查看版本
  4. [root@k8s-master helm]# helm version
  5. Client: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}
  6. Server: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}

tiller 默认被部署在 k8s 集群中的 kube-system 这个namespace 下:

  1. kubectl get pod -n kube-system -l app=helm
  2. NAME READY STATUS RESTARTS AGE
  3. tiller-deploy-58565b5464-rdq68 1/1 Running 0 42s

自定义模板

  1. mkdir -p /usr/local/docker/kubernetes/plugins/test/helm/hello-word
  2. cd /usr/local/docker/kubernetes/plugins/test/helm/hello-word
  3. # 创建自描述文件 Chart.yaml , 这个文件必须有 name 和 version 定义
  4. cat > Chart.yaml <<EOF
  5. name: hello-world
  6. version: 1.0.0
  7. EOF

创建模板文件,用于生成 Kubernetes 资源清单(manifests)

  1. # 必须是 templates文件夹名字
  2. mkdir ./templates

vim ./templates/deployment.yaml

  1. apiVersion: extensions/v1beta1
  2. kind: Deployment
  3. metadata:
  4. name: hello-world
  5. spec:
  6. replicas: 1
  7. template:
  8. metadata:
  9. labels:
  10. app: hello-world
  11. spec:
  12. containers:
  13. - name: hello-world
  14. image: habor-repo.com/library/nginx:v1
  15. ports:
  16. - containerPort: 80
  17. protocol: TCP

vim ./templates/service.yaml

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: hello-world
  5. spec:
  6. type: NodePort
  7. selector:
  8. app: hello-world
  9. ports:
  10. - name: http
  11. port: 8000
  12. targetPort: 80
  13. protocol: TCP
  1. # 使用命令 helm install RELATIVE_PATH_TO_CHART 创建一次Release
  2. # 注意,必须在当前文件夹下面使用
  3. # 文件夹结构
  4. [root@k8s-master hello-word]# tree ./
  5. ./
  6. ├── Chart.yaml
  7. └── templates
  8. ├── deployment.yaml
  9. └── service.yaml
  10. # 运行chart
  11. # --name 可指定一个固定的名字,如果没有指定,helm会生成一个随机的名字
  12. # helm install --name <名字> .
  13. [root@k8s-master hello-word]# helm install .
  14. NAME: bold-termite
  15. LAST DEPLOYED: Tue Mar 10 11:29:02 2020
  16. NAMESPACE: default
  17. STATUS: DEPLOYED
  18. RESOURCES:
  19. ==> v1/Pod(related)
  20. NAME READY STATUS RESTARTS AGE
  21. hello-world-6fd86c7d6d-xzcdn 0/1 ContainerCreating 0 0s
  22. ==> v1/Service
  23. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  24. hello-world NodePort 10.101.112.26 <none> 8000:32503/TCP 1s
  25. ==> v1beta1/Deployment
  26. NAME READY UP-TO-DATE AVAILABLE AGE
  27. hello-world 0/1 1 0 0s

常用命令:

  1. # 列出已经部署的 Release
  2. helm ls
  3. # 查询一个特定的 Release 的状态
  4. helm status <RELEASE_NAME>
  5. # 移除所有与这个 Release 相关的 Kubernetes 资源
  6. helm delete <RELEASE_NAME>
  7. # 查看历史
  8. helm history <RELEASE_NAME>
  9. # 回滚版本(回滚后版本会加1)
  10. helm rollback <RELEASE_NAME> <REVISION_NUMBER>
  11. # (完全删除!!!)
  12. # 使用 helm delete --purge RELEASE_NAME 移除所有与指定 Release 相关的 Kubernetes 资源和所有这个Release 的记录
  13. helm delete --purge <RELEASE_NAME>
  14. helm ls --deleted # 发现没有了

版本升级:

对于已经创建好的release资源我们想要升级其中容器镜像的版本:

Chart.yaml同级中创建values.yaml

  1. cat >values.yaml <<EOF
  2. image:
  3. repository: habor-repo.com/library/nginx
  4. tag: v1
  5. EOF

然后修改templates/deployment.yaml

  1. apiVersion: extensions/v1beta1
  2. kind: Deployment
  3. metadata:
  4. name: hello-world
  5. spec:
  6. replicas: 1
  7. template:
  8. metadata:
  9. labels:
  10. app: hello-world
  11. spec:
  12. containers:
  13. - name: hello-world
  14. image: {{.Values.image.repository}}:{{.Values.image.tag}}
  15. ports:
  16. - containerPort: 80
  17. protocol: TCP
  1. # install
  2. helm install --name hello-world .
  3. # 查看版本
  4. helm ls
  5. # 查看镜像版本
  6. [root@k8s-master hello-word]# kubectl get deploy hello-world -o wide
  7. NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
  8. hello-world 1/1 1 1 2m hello-world habor-repo.com/library/nginx:v1 app=hello-world
  9. # 把 values.yaml 中的tag修改为v2
  10. # 升级版本
  11. helm upgrade hello-world .
  12. # 查看版本发现成了2
  13. helm ls
  14. # 再次查看镜像版本
  15. [root@k8s-master hello-word]# kubectl get deploy hello-world -o wide
  16. NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
  17. hello-world 1/1 1 1 2m22s hello-world habor-repo.com/library/nginx:v2 app=hello-world
  18. # 注意!!!还有个命令行修改版本的方式
  19. # 在 values.yaml 中的值可以被部署 release 时用到的参数 --values YAML_FILE_PATH 或 --setkey1=value1, key2=value2 覆盖掉
  20. helm upgrade hello-world . --set image.tag='v3'

debug

  1. # 使用模板动态生成K8s资源清单,非常需要能提前预览生成的结果。
  2. # 使用--dry-run --debug 选项来打印出生成的清单文件
  3. helm install --name hello-world . --dry-run --debug --set image.tag=latest

使用国内镜像

  1. helm repo remove stable
  2. helm repo add apphub https://apphub.aliyuncs.com/
  3. helm repo add incubator http://mirror.azure.cn/kubernetes/charts-incubator/
  4. helm repo add elastic https://helm.elastic.co
  5. helm repo add stable http://mirror.azure.cn/kubernetes/charts/
  6. helm repo list

4.9.2、dashboard安装

helm方式安装

  1. # 更新 helm 仓库
  2. helm repo update
  3. # 查看helm仓库
  4. helm repo list
  5. # 下载镜像(如果下载不下来上阿里云下载后修改tag即可)
  6. docker pull k8s.gcr.io/kubernetes-dashboard-amd64
  7. mkdir -p /usr/local/docker/kubernetes/plugins/test/helm/dashboard
  8. cd /usr/local/docker/kubernetes/plugins/test/helm/dashboard
  9. # 导入资源
  10. helm fetch stable/kubernetes-dashboard

vim kubernetes-dashboard.yaml

  1. image:
  2. repository: k8s.gcr.io/kubernetes-dashboard-amd64
  3. tag: v1.10.1
  4. ingress:
  5. enabled: true
  6. hosts:
  7. - k8s.frognew.com
  8. annotations:
  9. nginx.ingress.kubernetes.io/ssl-redirect: "true"
  10. nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
  11. tls:
  12. - secretName: frognew-com-tls-secret
  13. hosts:
  14. - k8s.frognew.com
  15. rbac:
  16. clusterAdminRole: true
  1. helm install . \
  2. -n kubernetes-dashboard \
  3. --namespace kube-system \
  4. -f kubernetes-dashboard.yaml
  5. # 修改 ClusterIp 为 NodePort
  6. kubectl edit svc kubernetes-dashboard -n kube-system
  7. # 查看token
  8. kubectl -n kube-system get secret | grep kubernetes-dashboard-token
  9. # 访问浏览器使用token登录
  10. kubectl get secret -n kube-system | grep dashboard
  11. kubectl describe -n kube-system
  12. # 复制上面的token (端口为你修改我NodePort之后的为准)
  13. https://192.168.0.120:30443

直接安装

  1. # 下载镜像
  2. docker pull k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1
  3. https://github.com/kubernetes/dashboard/blob/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
  4. # 下载 kubernetes-dashboard.yaml
  5. kubectl apply -f kubernetes-dashboard.yaml
  6. # 查看服务
  7. kubectl get svc -n kube-system | grep dashboard
  8. kubectl get deploy -n kube-system | grep dashboard
  9. kubectl get pod -n kube-system | grep dashboard
  10. # 删除(如果出现异常情况删除重来)
  11. kubectl delete svc kubernetes-dashboard -n kube-system
  12. kubectl delete deploy kubernetes-dashboard -n kube-system

重新创建一个可以供外网访问的Service

vim kubernetes-dashboard-service.yaml

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. labels:
  5. k8s-app: kubernetes-dashboard
  6. name: kubernetes-dashboard-service
  7. namespace: kube-system
  8. spec:
  9. clusterIP: 10.97.242.98 # 这的IP不能上面svc的ip相同
  10. externalTrafficPolicy: Cluster
  11. ports:
  12. - nodePort: 30443 # 暴露的外网IP
  13. port: 443
  14. protocol: TCP
  15. targetPort: 8443 # dashboard的默认端口
  16. selector:
  17. k8s-app: kubernetes-dashboard
  18. sessionAffinity: None
  19. type: NodePort
  20. status:
  21. loadBalancer: {}
  1. kubectl create -f kubernetes-dashboard-service.yaml
  2. [root@k8s-master dashboard]# kubectl get svc -n kube-system | grep dashboard
  3. kubernetes-dashboard ClusterIP 10.97.242.97 <none> 443/TCP 3m32s
  4. kubernetes-dashboard-service NodePort 10.97.242.98 <none> 443:30443/TCP 14s

创建一个ServiceAccount:

vim service-account.yaml

  1. apiVersion: v1
  2. kind: ServiceAccount
  3. metadata:
  4. name: dashboard
  5. namespace: kube-system
  6. ---
  7. kind: ClusterRoleBinding
  8. apiVersion: rbac.authorization.k8s.io/v1beta1
  9. metadata:
  10. name: dashboard
  11. subjects:
  12. - kind: ServiceAccount
  13. name: dashboard
  14. namespace: kube-system
  15. roleRef:
  16. kind: ClusterRole
  17. name: cluster-admin
  18. apiGroup: rbac.authorization.k8s.io
  1. kubectl create -f service-account.yaml
  2. [root@k8s-master dashboard]# kubectl get secret -n kube-system | grep dashboard
  3. dashboard-token-tsxsg kubernetes.io/service-account-token 3 32s
  4. kubernetes-dashboard-certs Opaque 0 33m
  5. kubernetes-dashboard-key-holder Opaque 2 6m45s
  6. kubernetes-dashboard-token-mrxz2 kubernetes.io/service-account-token 3 33m
  7. # dashboard-token-tsxsg 这个理以你自己的为准
  8. kubectl describe secret dashboard-token-tsxsg -n kube-system
  9. # 复制token登录 (因为是NodePort,所以k8s任意节点IP都可以登录)
  10. https://192.168.0.120:30443

4.9.3、Prometheus

github 地址:https://github.com/coreos/kube-prometheus

  1. MetricServer:是kubernetes集群资源使用情况的聚合器,收集数据给kubernetes集群内使用,如kubectl,hpa,scheduler等。

  2. PrometheusOperator:是一个系统监测和警报工具箱,用来存储监控数据。

  3. NodeExporter:用于各node的关键度量指标状态数据。

  4. KubeStateMetrics:收集kubernetes集群内资源对象数据,制定告警规则。

  5. Prometheus:采用pull方式收集apiserver,scheduler,controller-manager,kubelet组件数据,通过http协议传输。

  6. Grafana:是可视化数据统计和监控平台

  1. # 拉镜像
  2. quay.io/prometheus/prometheus:v2.11.0
  3. quay.io/prometheus/alertmanager:v0.18.0
  4. quay.io/coreos/prometheus-config-reloader:v0.31.1
  5. quay.io/coreos/prometheus-operator:v0.31.1
  6. quay.io/prometheus/node-exporter:v0.18.1
  7. quay.io/coreos/k8s-prometheus-adapter-amd64:v0.4.1
  8. k8s.gcr.io/addon-resizer:1.8.4
  9. quay.io/coreos/configmap-reload:v0.0.1
  10. grafana/grafana:6.2.2
  11. quay.io/coreos/kube-rbac-proxy:v0.4.1
  12. quay.io/coreos/kube-state-metrics:v1.7.1
  13. # 修改yaml文件
  14. git clone https://github.com/coreos/kube-prometheus.git
  15. cd kube-prometheus/manifests

vim grafana-service.yaml

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. labels:
  5. app: grafana
  6. name: grafana
  7. namespace: monitoring
  8. spec:
  9. type: NodePort # 修改
  10. ports:
  11. - name: http
  12. port: 3000
  13. targetPort: http
  14. nodePort: 30100 # 修改
  15. selector:
  16. app: grafana

vim prometheus-service.yaml

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. labels:
  5. prometheus: k8s
  6. name: prometheus-k8s
  7. namespace: monitoring
  8. spec:
  9. type: NodePort # 修改
  10. ports:
  11. - name: web
  12. port: 9090
  13. targetPort: web
  14. nodePort: 30200 # 修改
  15. selector:
  16. app: prometheus
  17. prometheus: k8s
  18. sessionAffinity: ClientIP

vim alertmanager-service.yaml

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. labels:
  5. alertmanager: main
  6. name: alertmanager-main
  7. namespace: monitoring
  8. spec:
  9. type: NodePort
  10. ports:
  11. - name: web
  12. port: 9093
  13. targetPort: web
  14. nodePort: 30300 # 修改
  15. selector:
  16. alertmanager: main
  17. app: alertmanager
  18. sessionAffinity: ClientIP
  1. cd kube-prometheus/manifests
  2. kubectl apply -f ./
  3. # 查看所有的pod都为running状态(启动的pod比较多,需等待一会儿)
  4. kubectl get pod -n monitoring
  5. [root@k8s-master ~]# kubectl get svc -n monitoring | grep NodePort
  6. alertmanager-main NodePort 10.96.149.134 <none> 9093:30300/TCP 81m
  7. grafana NodePort 10.101.118.123 <none> 3000:30100/TCP 90m
  8. prometheus-k8s NodePort 10.100.22.169 <none> 9090:30200/TCP 90m
  9. #浏览器访 prometheus
  10. http://192.168.0.110:30200
  11. #prometheus 的 WEB 界面上提供了基本的查询 K8S 集群中每个 POD 的 CPU 使用情况,查询条件如下:
  12. sum by (pod_name)( rate(container_cpu_usage_seconds_total{image!="", pod_name!=""}[1m] ) )
  13. # 访问 grafana 默认用户名密码都是admin,登录成功后会提示修改密码
  14. http://192.168.0.110:30100

4.9.4、EFK日志收集

1)部署elasticsearch

  1. #添加 Google incubator 仓库
  2. helm repo remove stable # 删除 stable
  3. helm repo add incubator http://mirror.azure.cn/kubernetes/charts-incubator/
  4. helm repo add elastic https://helm.elastic.co
  5. helm repo add stable http://mirror.azure.cn/kubernetes/charts/
  6. helm repo list
  7. # 创建文件夹
  8. mkdir -p /usr/local/docker/kubernetes/plugins/test/efk/es
  9. cd /usr/local/docker/kubernetes/plugins/test/efk/es
  10. # k8s日志文件位置(每个节点都一样的,此处在安装的时候可以配置为nfs共享文件)
  11. /var/log/containers/
  12. #部署 Elasticsearch
  13. # 创建名称空间
  14. kubectl create namespace efk
  15. helm fetch incubator/elasticsearch
  16. # googl的拉不下来就用 elastic 的repo
  17. helm fetch elastic/elasticsearch --version 6.4.2
  18. # 解压缩
  19. tar -zxvf elasticsearch-6.4.2.tgz
  20. cd elasticsearch
  21. # 修改一些参数(如果你的机器性能足够就不需要修改)
  22. vim values.yaml
  23. minimumMasterNodes: 1
  24. replicas: 1
  25. volumeClaimTemplate:
  26. accessModes: [ "ReadWriteOnce" ]
  27. storageClassName: "standard"
  28. resources:
  29. requests:
  30. storage 10Gi # 修改为10Gi
  31. # 然后保存并退出
  32. # 添加一个PV大小为10Gi
  33. # 查看配置说明:kubectl explain PersistentVolume.spec.hostPath
  34. # 在所有的node节点创建 /data/es 并赋权限
  35. mkdir -p /data/es
  36. chmod 777 /data/es
  37. # pv 定义
  38. cat >es-pv.yml << EOF
  39. apiVersion: v1
  40. kind: PersistentVolume
  41. metadata:
  42. name: es-pv-10gi
  43. spec:
  44. capacity:
  45. storage: 10Gi
  46. accessModes:
  47. - ReadWriteOnce # 这里和 values.yaml 中的保持一致
  48. persistentVolumeReclaimPolicy: Recycle # 回收策略,这里是基础擦除 rm-rf /thevolume/*
  49. storageClassName: standard # 这里和 values.yaml 中的保持一致
  50. hostPath:
  51. path: /data/es # 在所有的node节点创建 /data/es
  52. EOF
  53. # 创建
  54. kubectl create -f es-pv.yml
  55. # 查看
  56. kubectl get pv
  57. # 先拉取一下镜像
  58. cat values.yaml | grep image # 插看image和版本
  59. # 拉不下来去阿里云搜索参考 https://mp.weixin.qq.com/s/kf0SrktAze3bT7LcIveDYw
  60. docker pull docker.elastic.co/elasticsearch/elasticsearch:6.4.2
  61. # 安装
  62. helm install --name els1 --namespace=efk -f values.yaml .
  63. # 查看
  64. kubectl get svc -n efk
  65. kubectl get deploy -n efk
  66. kubectl get pod -n efk -o wide
  67. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  68. elasticsearch-master-0 1/1 Running 0 82s 10.244.2.224 k8s-node2 <none> <none>
  69. # 检测
  70. curl http://10.244.2.224:9200/_cat/nodes # 查看节点
  71. # 10.244.2.224 11 96 2 0.00 0.10 0.14 mdi * elasticsearch-master-0
  72. curl http://10.244.2.224:9200/_cat/indices # 插看索引

2)部署 Fluentd

  1. helm fetch stable/fluentd-elasticsearch --version 2.0.7
  2. tar -zxvf fluentd-elasticsearch-2.0.7.tgz
  3. cd fluentd-elasticsearch
  4. # 更改其中 Elasticsearch 访问地址
  5. vim values.yaml
  6. helm install --name flu1 --namespace=efk -f values.yaml .
  7. # 查看
  8. kubectl get svc -n efk
  9. kubectl get deploy -n efk
  10. kubectl get pod -n efk -o wide

3)部署kibana

  1. helm fetch elastic/kibana --version 6.4.2
  2. cd kibana
  3. # 修改es地址
  4. vim values.yaml
  5. elasticsearchURL: "http://10.101.190.94:9200"
  6. #保存并退出
  7. helm install --name kib1 --namespace=efk -f values.yaml .
  8. # 查看
  9. kubectl get svc -n efk
  10. kubectl get deploy -n efk
  11. kubectl get pod -n efk -o wide
  12. # 修改为 NodePort
  13. kubectl edit svc kib1-kibana -n efk
  14. # 查看IP地址
  15. kubectl get svc -n efk | grep kibana
  16. kib1-kibana NodePort 10.104.33.70 <none> 5601:32151/TCP 20m
  17. # 访问浏览器
  18. http://192.168.0.110:32151/app/kibana#/home?_g=()

删除

  1. # 查看所有的
  2. helm list
  3. NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
  4. els1 1 Tue Mar 10 18:50:09 2020 DEPLOYED elasticsearch-6.4.2 6.4.2 efk
  5. flu1 1 Tue Mar 10 20:27:24 2020 DEPLOYED fluentd-elasticsearch-2.0.7 2.3.2 efk
  6. hello-world 2 Tue Mar 10 11:57:06 2020 DEPLOYED hello-world-1.0.0 default
  7. kib1 1 Tue Mar 10 19:50:35 2020 DEPLOYED kibana-6.4.2 6.4.2 efk
  8. # 删除
  9. helm delete els1 flu1 hello-world kib1

k8s学习-Helm的更多相关文章

  1. .NET Core on K8S学习实践系列文章索引(Draft版)

    一.关于这个系列 自从去年(2018年)底离开工作了3年的M公司加入X公司之后,开始了ASP.NET Core的实践,包括微服务架构与容器化等等.我们的实践是渐进的,当我们的微服务数量到了一定值时,发 ...

  2. kubernetes实战(十三):k8s使用helm持久化部署harbor集成openLDAP登录

    1.基本概念 上节在k8s中部署了harbor和ldap,本节将部署harbor使用openLDAP验证,部署方式与之前相同,只是改了adminserver-cm.yaml的AUTH_MODE: &q ...

  3. ASP.NET Core on K8S学习初探(1)K8S单节点环境搭建

    当近期的一个App上线后,发现目前的docker实例(应用服务BFF+中台服务+工具服务)已经很多了,而我司目前没有专业的运维人员,发现运维的成本逐渐开始上来,所以容器编排也就需要提上议程.因此我决定 ...

  4. ASP.NET Core on K8S学习初探(3)部署API到K8S

    在上一篇<基本概念快速一览>中,我们把基本的一些概念快速地简单地不求甚解地过了一下,本篇开始我们会将ASP.NET Core WebAPI部署到K8S,从而结束初探的旅程. Section ...

  5. ASP.NET Core on K8S学习初探(2)K8S基本概念快速一览

    在上一篇<单节点环境搭建>中,通过Docker for Windows在Windows开发机中搭建了一个单节点的K8S环境,接下来就是动人心弦的部署ASP.NET Core API到K8S ...

  6. k8s学习 - API

    k8s学习 - API 之前对k8s并没有很深入的了解,最近想把手头一个项目全部放到k8s上,以方便部署,需要研究.这里记录一下自己研究过程中头脑中的理解. k8s 和 docker 首先,需要先理解 ...

  7. k8s学习 - 概念 - master/node

    k8s学习 - 概念 - master/node 在k8s中,有各种各样的概念和术语.这些概念是必须要学习和掌握的.我们先罗列下所有概念,然后再一个个看具体实例. 大概说一下这些概念: Master: ...

  8. k8s学习 - 概念 - Pod

    k8s学习 - 概念 - Pod 这篇继续看概念,主要是 Pod 这个概念,这个概念非常重要,是 k8s 集群的最小单位. 怎么才算是理解好 pod 了呢,基本上把 pod 的所有 describe ...

  9. k8s学习 - 概念 - ReplicationController

    k8s学习 - 概念 - ReplicationController 我们有了 pod,那么就需要对 pod 进行控制,就是同一个服务的 podv我需要启动几个?如果需要扩容了,怎么办?这里就有个控制 ...

随机推荐

  1. CSS3面试题

    1.隐藏网页中的元素有几种方式?这些方法有什么区别? 答案:三种方法. display:none;脱离文档流,不占页面空间,会改变页面布局. visivility:hidden;不会脱离文档流,不会改 ...

  2. sql 判断 表 视图 存储过程 存在 然后 删除

    sql 判断 函数 存储过程是否存在的方法 (2010-12-03 10:08:57) 转载▼     下面为您介绍sql下用了判断各种资源是否存在的代码,需要的朋友可以参考下,希望对您学习sql的函 ...

  3. jquery 1.9版本下复选框 全选/取消实现

    http://zhangzhaoaaa.iteye.com/blog/1914497 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Tran ...

  4. 日志文件的配置----【logback-spring.xml】

    一.引入相关包 <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-c ...

  5. C# 数据操作系列 - 14 深入探索SqlSugar

    0.前言 在上一篇中,我们知道了如何使用SqlSugar,但是也只是简单的了解了如何使用,仿佛是套着镣铐行走,这明显不符合一个合格的程序员应有的素养.所以,这一篇我们将对其进行深挖,探究其背后的秘密. ...

  6. Spring MVC必须知道的执行流程

    Spring MVC的执行流程 一.名词解释 1.前端控制器(DispatcherServlet) 接收请求,响应结果,相当于转发器,中央处理器 2.处理器映射器(HandlerMapping) 根据 ...

  7. vue 使用cli脚手架手动创建项目 相关的选择配置及真正项目的开始

    转载https://www.jianshu.com/p/635bd3ab7383 根据上述连接将基本的环境和命令和装好 使用命令行  vue create 项目名称  出现选项  选择手动(没有截图展 ...

  8. NPM的由来——为什么要使用NPM

    原文:https://blog.csdn.net/qq_37696120/article/details/80507178 https://blog.csdn.net/hong10086/articl ...

  9. JSP指令 & 中文乱码问题

    1. JSP 指令: JSP指令(directive)是为JSP引擎而设计的,     它们并不直接产生任何可见输出, 而只是告诉引擎如何处理JSP页面中的其余部分. 2. 在JSP 2.0中,定义了 ...

  10. 啪啪,打脸了!领导说:try-catch必须放在循环体外!

    哈喽,亲爱的小伙伴们,技术学磊哥,进步没得说!欢迎来到新一期的性能解读系列,我是磊哥. 今天给大家带来的是关于 try-catch 应该放在循环体外,还是放在循环体内的文章,我们将从性能和业务场景分析 ...