helm2 版本

1. 文件配置

需要预先配置好 imagePullSecrets 如果不配置的话, 不 work

1.1 deplyment.yml

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: {{ .Chart.Name }}
  5. namespace: {{ .Values.namespace | default "default" }}
  6. spec:
  7. replicas: 1
  8. # minReadySeconds: 5
  9. selector:
  10. matchLabels:
  11. app: {{ .Chart.Name }}
  12. template:
  13. metadata:
  14. labels:
  15. app: {{ .Chart.Name }}
  16. spec:
  17. imagePullSecrets:
  18. - name: yunxiao-aliyun-docker-registry
  19. containers:
  20. - name: {{ .Chart.Name }}
  21. image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
  22. env:
  23. - name: MYSQL_ROOT_PASSWORD
  24. value: "mysql123"
  25. - name: default-authentication-plugin
  26. value: "mysql_native_password"
  27. - name: character-set-server
  28. value: "utf8mb4"
  29. - name: collation-server
  30. value: "utf8mb4_unicode_ci"
  31. imagePullPolicy: {{ .Values.image.pullPolicy }}
  32. ports:
  33. - name: http
  34. containerPort: 3306
  35. protocol: TCP
  36. resources:
  37. {{- toYaml .Values.resources | nindent 12 }}

1.2 service.yml

apiVersion: v1
kind: Service
metadata:
  name: {{ .Chart.Name }}
  namespace: {{ .Values.namespace | default "default" }}
  labels:
    app: {{ .Chart.Name }}
spec:
  type: {{ .Values.service.type }}
  ports:
    - port: {{ .Values.service.port }}
      targetPort: 3306
      nodePort: 30336
      protocol: TCP
      name: http

  selector:
    app: {{ .Chart.Name }}

1.3 values

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

replicaCount: 1

image:
  repository: registry.cn-shanghai.aliyuncs.com/yunxiao-paas/mysql
  tag: 5.7
  pullPolicy: Always

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


service:
#  type: ClusterIP
  type: NodePort
  port: 33306

resources:
  requests:
    cpu: 100m
    memory: 128Mi

2. 调试

文档

2.1 准备 k8s 连接

这两个命令就能看到对应的配置了

cat ~/.kube/config

kubectl get ns

2.2 检查语法

helm lint myapp # 检测语法
helm package myapp/ # 打包

本地repo默认在 127.0.0.1:8879 查看是否开启端口,如果没有开那么手动开启
helm serve #开启本地8879,nginx等等web也可以作为repo,注意这里的仓库是只读的跟docker hub不同的是无法通过https或者https提交

查看生成的配置

helm install . --dry-run --debug

helm install . --dry-run --debug --set image.tag=latest # 如果需要更新某个配置的话

2.3 打包

helm package mysql57/

部署 (部署并不需要打包)

ali-186590cbfa9f:mysql57 xinsheng$ helm install .
Error: release existing-greyhound failed: namespaces "shentong" not found

3. 访问

3.1 本地访问

service 声明的是 nodePort 所以可以通过本机访问, ip 是 master 所在的地址, port 就是 nodePort 的声明.

3.2 Pod 通过 service 连数据库

link

NodePort service 有三个端口

  1. port 指被代理的 pod 端口, 比如数据库就是 3306
  2. targetPort 服务地址, 一般和 pod 相同, 就是 3306
  3. nodePort 这个是对外的端口, 可以在 k8s 集群之外访问 service 资源, 端口范围是 30000 -> 36000

所以, 外部访问 mysq 资源, (通过 navicat), 可以使用 30336 端口 (主机是 master ip), pod 访问其他 service 使用 targetPort.