helm2 版本
1. 文件配置
需要预先配置好 imagePullSecrets 如果不配置的话, 不 work
1.1 deplyment.yml
apiVersion: apps/v1kind: Deploymentmetadata:name: {{ .Chart.Name }}namespace: {{ .Values.namespace | default "default" }}spec:replicas: 1# minReadySeconds: 5selector:matchLabels:app: {{ .Chart.Name }}template:metadata:labels:app: {{ .Chart.Name }}spec:imagePullSecrets:- name: yunxiao-aliyun-docker-registrycontainers:- name: {{ .Chart.Name }}image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"env:- name: MYSQL_ROOT_PASSWORDvalue: "mysql123"- name: default-authentication-pluginvalue: "mysql_native_password"- name: character-set-servervalue: "utf8mb4"- name: collation-servervalue: "utf8mb4_unicode_ci"imagePullPolicy: {{ .Values.image.pullPolicy }}ports:- name: httpcontainerPort: 3306protocol: TCPresources:{{- 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 连数据库
NodePort service 有三个端口
- port 指被代理的 pod 端口, 比如数据库就是 3306
- targetPort 服务地址, 一般和 pod 相同, 就是 3306
- nodePort 这个是对外的端口, 可以在 k8s 集群之外访问 service 资源, 端口范围是 30000 -> 36000
所以, 外部访问 mysq 资源, (通过 navicat), 可以使用 30336 端口 (主机是 master ip), pod 访问其他 service 使用 targetPort.
