K8s访问MySQL服务实战指南

k8s如何访问mysql服务

时间:2025-07-07 13:48


K8s如何高效访问MySQL服务 在容器化应用日益普及的今天,Kubernetes(K8s)作为领先的容器编排平台,其强大的服务发现和负载均衡能力为应用的部署和管理带来了极大的便利

    当我们在K8s中部署了一套应用,比如一个博客系统或电子商务平台,如何高效地访问MySQL服务便成为了一个核心问题

    本文将详细介绍在K8s中如何访问MySQL服务的步骤和技巧,以确保你的应用能够稳定、可靠地连接到数据库

     一、K8s网络模型基础 在深入探讨如何访问MySQL服务之前,了解Kubernetes的网络模型是基础

    Kubernetes假定所有的Pod都在一个直接连通的、扁平的网络空间中,每个Pod都拥有一个独立的IP地址

    然而,直接通过Pod的IP地址访问服务是不可靠的,因为Pod重启后,其IP地址会重新分配

    为了解决这个问题,Kubernetes引入了Service的概念

     Service为具有相同功能的Pod集合提供了一个统一的入口地址,这个地址是系统分配的全局唯一IP(ClusterIP),不会因为Pod的重启而发生改变

    通过访问Service的ClusterIP和端口号,可以实现对后端Pod的负载均衡和访问

     二、创建MySQL Deployment 要在K8s中访问MySQL服务,首先需要创建一个MySQL Deployment来部署MySQL数据库实例

    Deployment是Kubernetes中用于定义和管理无状态应用的一种资源对象

     以下是一个简单的MySQL Deployment YAML配置文件示例: yaml apiVersion: apps/v1 kind: Deployment metadata: name: mysql-deployment spec: replicas: 1 selector: matchLabels: app: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:5.7 使用MySQL 5.7镜像 ports: - containerPort: 3306 env: - name: MYSQL_ROOT_PASSWORD value: password 设置root用户密码 在这个配置文件中,我们定义了一个名为`mysql-deployment`的Deployment,使用MySQL 5.7的镜像,暴露3306端口,并设置了`MYSQL_ROOT_PASSWORD`环境变量为`password`

     三、创建MySQL Service 创建了MySQL Deployment之后,我们需要创建一个MySQL Service来暴露MySQL数据库服务

    Service是Kubernetes中用于定义和管理服务和它们访问者的抽象层

     以下是一个简单的MySQL Service YAML配置文件示例: yaml apiVersion: v1 kind: Service metadata: name: mysql-service spec: selector: app: mysql ports: - protocol: TCP port: 3306 targetPort: 3306 在这个配置文件中,我们定义了一个名为`mysql-service`的Service,将流量导向标签为`app: mysql`的Deployment,并将端口3306映射到MySQL的容器端口3306

    这样,其他Pod就可以通过访问`mysql-service`的ClusterIP和3306端口来连接到MySQL数据库了

     四、在应用程序中访问MySQL Service 创建了MySQL Deployment和Service之后,我们就可以在应用程序中使用这些资源来访问MySQL数据库了

    在K8s中,应用程序通常也是以Pod的形式部署的

     以下是一个简单的客户端Deployment YAML配置文件示例,用于部署一个访问MySQL数据库的客户端应用: yaml apiVersion: apps/v1 kind: Deployment metadata: name: client-deployment spec: replicas: 1 selector: matchLabels: app: client template: metadata: labels: app: client spec: containers: - name: client image: my-client-image:latest 使用自定义的客户端镜像 在客户端Pod中,我们可以使用各种编程语言和数据库连接库来连接到MySQL服务

    以下是一个使用Python和`mysql.connector`库连接到MySQL服务的示例代码: python import mysql.connector mysql_service_host = mysql-service mysql_service_port = 3306 mysql_user = root mysql_password = password connection = mysql.connector.connect( host=mysql_service_host, port=mysql_service_port, user=mysql_user, password=mysql_password ) cursor = connection.cursor() cursor.execute(SHOW DATABASES) databases = cursor.fetchall() for db in databases: print(db) connection.close() 在这个示例代码中,我们使用`mysql.connector`库连接到MySQL服务,通过