在k8s中创建mysql
在 Kubernetes 中,服务(Service)用于暴露应用程序的网络端点。你需要创建一个 Service 来公开 MySQL 实例的网络端口,以便其他应用程序可以连接到 MySQL。Service 配置用于访问 MySQL 数据库的 ClusterIP 服务metadata:spec:selector:app: mysqlports:port: 3306。
在k8s中创建mysql
在k8s中创建mysql基本流程如下:
1.创建 PersistentVolume 和 PersistentVolumeClaim
:在 Kubernetes 中,MySQL 数据通常需要持久存储。因此,首先你需要定义一个 PersistentVolume(PV)来表示存储资源,并为 MySQL 部署定义一个 PersistentVolumeClaim(PVC)来请求这些资源。这样可以确保 MySQL 数据不会因为 Pod 的重启或迁移而丢失。
# mysql-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: manual
hostPath:
path: "/mnt/data" # 本地路径,需要在每个节点上存在
- storage: 定义 PV 的存储容量,这里是 10Gi。
- accessModes: 定义访问模式,ReadWriteOnce 表示一次只能被一个节点挂载。
- persistentVolumeReclaimPolicy: 定义当 PVC 被删除后 PV 的行为,Retain 表示保留数据。
- hostPath: 定义本地存储路径。需要确保在每个节点上都有此路径,且具备相应的存储空间
# mysql-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: manual
- accessModes: 定义访问模式,ReadWriteOnce 表示一次只能被一个节点挂载。
- resources.requests.storage: 定义请求的存储容量,这里是 10Gi。
- storageClassName: 定义存储类,必须与 PV 的 storageClassName 匹配。
2.编写 MySQL 部署文件
:创建一个 Deployment 文件(通常是 YAML 格式),定义 MySQL 的 Pod 模板,包括容器镜像、环境变量、卷挂载等。
通常mysql-deployment、mysql-service放在一个配置文件中
Deployment 配置 MySQL 容器的镜像、环境变量、端口和卷
# mysql-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
spec:
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:latest
env:
- name: MYSQL_ROOT_PASSWORD
value: your-root-password
- name: MYSQL_DATABASE
value: your-database
- name: MYSQL_USER
value: your-username
- name: MYSQL_PASSWORD
value: your-password
ports:
- containerPort: 3306
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pvc
3.定义 MySQL 服务
:在 Kubernetes 中,服务(Service)用于暴露应用程序的网络端点。你需要创建一个 Service 来公开 MySQL 实例的网络端口,以便其他应用程序可以连接到 MySQL。
Service 配置用于访问 MySQL 数据库的 ClusterIP 服务
# mysql-service.yaml
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
selector:
app: mysql
ports:
- protocol: TCP
port: 3306
targetPort: 3306
type: ClusterIP
4.部署 MySQL 应用
:使用 kubectl apply 命令应用之前创建的 PV、PVC、Deployment 和 Service 文件,部署 MySQL 应用程序到 Kubernetes 集群中。
kubectl apply -f mysql-pv.yaml
kubectl apply -f mysql-pvc.yaml
kubectl apply -f mysql-deployment.yaml
kubectl apply -f mysql-service.yaml
5.检查MySQL服务和Pod状态
kubectl get svc
kubectl get pods
确保 MySQL 服务正在运行并且 Pod 已经启动
6.绑定 MySQL 服务到 Pod 中
在你的应用程序部署文件中,引用 MySQL 服务以连接到 MySQL 数据库。假设你的应用程序名称为:my-app
# my-app-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 1
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: my-app-image:latest
env:
- name: MYSQL_HOST
value: "mysql"
- name: MYSQL_PORT
value: "3306"
- name: MYSQL_DATABASE
value: "your-database"
- name: MYSQL_USER
value: "your-username"
- name: MYSQL_PASSWORD
value: "your-password"
ports:
- containerPort: 8080
使用 kubectl 命令创建应用程序部署:
kubectl apply -f my-app-deployment.yaml
补充:
在 Kubernetes 中,
my-app-deployment.yaml 和 mysql-deployment.yaml 是两个独立的部署配置文件。
mysql-deployment.yaml 配置文件用于部署 MySQL 数据库,
而 my-app-deployment.yaml 配置文件用于部署你的应用程序。这两个部署文件通过 Kubernetes 服务互相通信,
my-app-deployment.yaml 通过引用 MySQL 服务名称连接到 MySQL 数据库
更多推荐
所有评论(0)