k8s单机部署mysql

news2024/11/24 17:38:36

前面我们学习了k8s入门系列文章,了解了k8s的一些基础概念以及怎么使用。本篇文章将进行一个小小的实战,使用k8s来部署单机版的mysql数据库,基本涵盖到前面讲到的Namespace、Pod、Deployment、Service、PV、PVC、Secret等资源对象。

我们先画一张结构图来表示整个部署的逻辑流程,如图所示:

图片

一、一步一步来规划

1.创建namespace,把mysql部署在单独的名称空间中

名称空间的用法可以参考文章:k8s入门之namespace(三)

kubectl create namespace dev
  • 1

2.创建持久卷PV,用来存储mysql数据文件

PV的用法可以参考文章:k8s入门之PV&PVC(八)

(1)定义一个容量大小为1GB的PV,挂载到/nfs/data/01目录,需手动创建该目录

mkdir -p /nfs/data/01
  • 1

(2)编写mysql-pv.yaml文件内容,要创建的pv对象名称:pv-1gi

如果要挂载在本地:

nfs:

        path: /nfs/data/01

改成

hostPath:

        path: /nfs/data/01

# 定义持久卷信息
apiVersion: v1
kind: PersistentVolume
metadata:
  # pv是没有namespace属性的,它是一种跨namespace的共享资源
  name: pv-1gi
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteMany
  # 存储类,具有相同存储类名称的pv和pvc才能进行绑定
  storageClassName: nfs
  nfs:
    path: /nfs/data/01
    server: 192.168.59.110

(3)创建该PV对象

kubectl create -f mysql-pv.yaml
  • 1

(4)查看创建结果

图片

3.创建持久卷声明PVC

PVC的用法可以参考文章:k8s入门之PV&PVC(八)

声明存储大小为1Gb的PVC资源,k8s会根据storageClassName存储类名称找到匹配的PV对象进行绑定。

(1)编写mysql-pvc.yaml文件内容,要创建的pvc对象名称是:mysql-pvc

# 定义mysql的持久卷声明信息
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pvc
  namespace: dev
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Gi
  # 存储类,具有相同存储类名称的pv和pvc才能进行绑定
  storageClassName: nfs

(2)创建该PVC对象

kubectl create -f mysql-pvc.yaml
  • 1

(3)查看创建结果

可以看到mysql-pvc对象已经和pv-1gi对象绑定上了。

图片

4.创建Secret对象用来保存mysql的root用户密码

Secret的用法可以参考文章:k8s入门之Secret(十)

(1)设置密码为123456,执行创建命令

kubectl create secret generic mysql-root-password --from-literal=password=123456 -n dev
  • 1

(2)查看创建结果

图片

5.创建Deployment和Service

Deployment的用法可以参考文章:k8s入门之Deployment(五)

Service的用法可以参考文章:k8s入门之Service(六)

(1)编辑mysql-svc.yaml文件内容

service使用NodePort类型,指定暴露的nodePort端口为31234,我们会在宿主机使用navicat客户端对mysql进行访问

# 定义mysql的Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: mysql
  name: mysql
  namespace: dev
spec:
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - image: mysql:8.0
        name: mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-root-password
              key: password
          # 如果你不想使用secret对象保存mysql登录密码,可以直接使用下面的方式指定,简单粗暴未尝不可    
          #value: "123456"
        ports:
        - containerPort: 3306
        volumeMounts:
        - name: mysqlvolume
          mountPath: /var/lib/mysql
      volumes:
      - name: mysqlvolume
        # 使用pvc
        persistentVolumeClaim:
          claimName: mysql-pvc
---
#定义mysql的Service
apiVersion: v1
kind: Service
metadata:
  labels:
    app: svc-mysql
  name: svc-mysql
  namespace: dev
spec:
  selector:
    app: mysql
  type: NodePort
  ports:
  - port: 3306
    protocol: TCP
    targetPort: 3306
    nodePort: 31234

(2)执行创建命令

kubectl create -f mysql-svc.yaml
  • 1

(3)查看创建结果

可以看到mysql的pod已处于运行状态

图片

二、测试

在宿主机通过Navicat客户端来连接部署好的mysql服务,IP是三台虚拟节点的任意一台IP,端口是在创建Service时手动指定的31234。

1.连接数据库服务

图片

2.创建数据库与表数据

图片

3.查看nfs目录

图片

4.你可以删掉服务,然后重新创建,之前的mysql数据并不会丢失

图片

图片

文章知识点与官方知识档案匹配,可进一步学习相关知识

云原生入门技能树容器编排(生产环境 k8s)kubelet,kubectl,kubeadm三件套13920 人正在系统学习中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/766204.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【力扣每日一题】2023.7.17 字符串相加

题目: 示例: 分析: 题面很简单,就是要将两个字符串看作是数字然后相加,将最后结果转为字符串返回即可. 看到这题我的第一反应是直接转成数字再相加再转成字符串,像是这样: class Solution { public:string addStrings(string num1, string…

无畏契约进不去,提示图形驱动程序崩溃怎么办?

无畏契约国内开服后,不少玩家表示,外服一点毛病没有,怎么在国服一下又是挂机违规,一下子又是图形驱动程序崩溃的警告呢?再说了,人有三急,逼不得已掉个线,再次连上就再也进不去了&…

Redis进阶底层原理 - 客户端集群方案

Redis集群一般来说会存在多个主节点,用于数据分区。对于客户端来说只会连接到某一个Redis主机节点。那客户端如果使用集群?方案如下: 原图地址:

reggie优化03-MySQL主从复制

1、介绍 2、配置 1、开启CentOS7克隆2台 2、用Navicat连接2个数据库 3、进入shell,配置主库 验证: 4、进入shell,配置从库 3、测试主从复制 在主库创建一个数据库,从库也会自动生成一个数据库(表&#xff0…

接口测试和单元测试

接口测试的本质:就是通过数据驱动,测试类里面的函数。单元测试的本质:通过代码级别,测试函数。单元测试的框架:unitest接口,pytestWEB----->接口,pytestjenkinsallure。 requests 模块讲解和…

机器学习实战9-基于多模型的自闭症的筛查与预测分析

大家好,我是微学AI,今天给大家介绍一下机器学习实战9-基于多模型的自闭症的筛查与预测分析,自闭症是一种神经发育障碍,主要表现为人际交往和社交互动的困难、沟通障碍以及重复刻板行为。早期的筛查和分析对于儿童自闭症的诊断和干…

你知道Apache 软件基金会如何选择开源项目吗

Apache软件基金会(Apache Software Foundation,简称ASF)是一个致力于开源软件发展的慈善组织,因其广泛的项目和开放的治理模式而备受社区赞誉。作为全球最大的开源基金会之一,ASF如何选择开源项目成为人们关注的焦点。…

Spring方式发送邮箱

1.导入依赖 <!--邮件发送依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency> 2.导入工具类 package com.example.demo.demo;import org.springfram…

LED驱动(总线设备架构)——STM32MP157

文章目录 概述总线设备驱动总线设备驱动模型程序步骤&#xff1a;常用函数注册/ 反注册获得资源 LED 模板驱动程序的改造&#xff1a;总线设备驱动模型board_A_led.cchip_demo_gpio.cled_opr.hled_resource.hleddrv.cleddrv.hledtest.cMakefile编译测试 概述 为什么要引入总线设…

Maven 继承、聚合、属性

文章目录 一、继承1.1. 概念1.2. 语法1.3. 示例1.4. 其他常见使用 二、聚合2.1. 概念2.2. 示例 三、属性3.1. Java 系统属性3.2.系统环境变量属性3.3.Maven 内置属性 一、继承 1.1. 概念 当项目较大&#xff0c;为了便于开发和管理&#xff0c;经常需要将工程划分成多个 Maven…

【性能测试入门必看】性能测试流程简介

性能测试流程介绍&#xff1a; 一、性能测试流程&#xff08;一&#xff09;——问清性能测试需求 1、新系统能力验证 2、明确客户需求 3、找出系统性能瓶颈 4、稳定性验证&#xff08;强度测试&#xff09; 二、性能测试流程&#xff08;二&#xff09;——了解系统结构…

为什么C++支持函数重载

C语言中我们知道创建的函数是不能同名的&#xff0c;但是在C中却是可以的&#xff0c;这就是C中的函数重载&#xff0c;而函数重载有三种&#xff1a;函数参数类型不同、参数的数量不同、参数的顺序不同。所以就先浅浅的了解一下函数重载&#xff1a; 函数重载 参数类型不同 …

数据管道模型:场外流式数据市场形态探索

数据管道模型&#xff1a;场外流式数据市场形态探索 任洪润1,2, 朱扬勇1,2 1 复旦大学计算机科学技术学院&#xff0c;上海 200438 2上海市数据科学重点实验室&#xff0c;上海 200438 摘要&#xff1a;当前数据要素市场建设探索主要集中在数据交易场所&#xff08;场内&#x…

ubuntu18.04配置python虚拟环境

安装virtualenv 在机器上使用pip安装virtualenv pip install virtualenv创建虚拟环境 cd 到一个目录中创建虚拟环境 virtualenv 虚拟环境名 如 virtualenv venv 激活虚拟环境 在虚拟环境路径中执行source 加载activate source bin/activate结果如下&#xff1a;

【基于 GitLab 的 CI/CD 实践】02、gitlab-runner 实践

目录 一、gitlab-runner 简介 1.1 要求 1.2 特点 二、GitLab Runner 安装 2.1 使用 GItLab 官方仓库安装 2.2 使用 deb/rpm 软件包 2.3 在容器中运行 GitLab Runner 三、GitLab Runner 注册 3.1 GitLabRunner 类型 3.2 获取 runner token 获取 shared 类型 runner t…

Linux驱动之从点LED灯开始

目录 一、环境 二、Linux 下 LED 灯驱动原理 2.1 地址映射 2.2 I/O 内存访问函数 三、硬件原理图分析 四、实验程序编写 4.1驱动程序编写 4.2测试APP编写 五、编译驱动程序和测试 APP 5.1 编译驱动程序 5.2 编译测试 APP 六、测试 本期的内容到这就结束了&#xff…

Ubuntu下的rdate命令

介绍 用途&#xff1a;rdate命令的用途是从远程服务器上同步时间并设置到本地。 安装rdate 执行命令sudo apt install rdate进行安装&#xff1a; 查看rdate命令的帮助信息 执行命令man rdate&#xff0c;可以查看rdate的帮助信息&#xff1a; 示例 从远程服务器上同…

基于opencv对高空拍摄视频消抖处理

一、问题背景 无人机在拍摄视频时&#xff0c;由于风向等影响因素&#xff0c;不可避免会出现位移和旋转&#xff0c;导致拍摄出的画面存在平移和旋转的帧间变换&#xff0c; 即“抖动” 抖动会改变目标物体 (车辆、行人) 的坐标&#xff0c;给后续的检测、跟踪任务引入额外误差…

Html基础知识学习——圣杯布局、margin负值、等高布局(十七)

文章目录 圣杯布局margin负值等高布局 圣杯布局 两边页面固定中间页面宽度随着浏览器大小自适应 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-widt…

macOS - 安装 node、npm

文章目录 关于 node安装安装 node、npm 关于 node node.js 官网 : https://nodejs.org/engithub : https://github.com/nodejs Node.js is a free, open-sourced, cross-platform JavaScript run-time environment— that lets developers write command line tools and serv…