helm2
版本
1. 文件配置
需要预先配置好 imagePullSecrets
如果不配置的话, 不 work
1.1 deplyment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Chart.Name }}
namespace: {{ .Values.namespace | default "default" }}
spec:
replicas: 1
# minReadySeconds: 5
selector:
matchLabels:
app: {{ .Chart.Name }}
template:
metadata:
labels:
app: {{ .Chart.Name }}
spec:
imagePullSecrets:
- name: yunxiao-aliyun-docker-registry
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
env:
- name: MYSQL_ROOT_PASSWORD
value: "mysql123"
- name: default-authentication-plugin
value: "mysql_native_password"
- name: character-set-server
value: "utf8mb4"
- name: collation-server
value: "utf8mb4_unicode_ci"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- name: http
containerPort: 3306
protocol: TCP
resources:
{{- 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.