K8S集群部署MySql

挂载MySQL数据卷

在k8s集群中挂载MySQL数据卷 需要安装一个NFS。

在主节点安装NFS

  yum install -y nfs-utils rpcbind

在主节点创建目录

  mkdir -p /nfs

  chmod 777 /nfs

更改归属组与用户

  chown -R nfsnobody:nfsnobody /nfs

配置共享目录

  echo "/nfs *(insecure,rw,sync,no_root_squash)" > /etc/exports

创建mysql共享目录

  mkdir -p /nfs/mysql

启动服务

  systemctl start rpcbind

  systemctl start nfs

设置开启启动

  systemctl enable rpcbind

  systemctl enable nfs

0

检查配置是否生效

  exportfs

  showmount -e 192.168.91.129

0

创建MySQL Deployment

编写一个 mysql.yaml 配置文件:

apiVersion: apps/v1                             # apiserver的版本
kind: Deployment                                # 副本控制器deployment,管理pod和RS
metadata:
  name: mysql                                   # deployment的名称,全局唯一
  namespace: default                            # deployment所在的命名空间
  labels:
    app: mysql
spec:
  replicas: 1                                   # Pod副本期待数量
  selector:
    matchLabels:                                # 定义RS的标签
      app: mysql                                # 符合目标的Pod拥有此标签
  strategy:                                     # 定义升级的策略
    type: RollingUpdate                         # 滚动升级,逐步替换的策略
  template:                                     # 根据此模板创建Pod的副本(实例)
    metadata:
      labels:
        app: mysql                              # Pod副本的标签,对应RS的Selector
    spec:
      nodeName: k8s-worker01                    # 指定pod运行在的node
      containers:                               # Pod里容器的定义部分
        - name: mysql                           # 容器的名称
          image: mysql:5.7                      # 容器对应的docker镜像
          volumeMounts:                         # 容器内挂载点的定义部分
            - name: time-zone                   # 容器内挂载点名称
              mountPath: /etc/localtime         # 容器内挂载点路径,可以是文件或目录
            - name: mysql-data
              mountPath: /var/lib/mysql         # 容器内mysql的数据目录
            - name: mysql-logs
              mountPath: /var/log/mysql         # 容器内mysql的日志目录
          ports:
            - containerPort: 3306               # 容器暴露的端口号
          env:                                  # 写入到容器内的环境容量
            - name: MYSQL_ROOT_PASSWORD         # 定义了一个mysql的root密码的变量
              value: "root"
      volumes:                                  # 本地需要挂载到容器里的数据卷定义部分
        - name: time-zone                       # 数据卷名称,需要与容器内挂载点名称一致
          hostPath:
            path: /etc/localtime                # 挂载到容器里的路径,将localtime文件挂载到容器里,可让容器使用本地的时区
        - name: mysql-data
          hostPath:
            path: /data/mysql/data              # 本地存放mysql数据的目录
        - name: mysql-logs
          hostPath:
            path: /data/mysql/logs              # 本地存入mysql日志的目录

将 mysql.yaml 配置文件上传至虚拟机的 /root 目录下,在 /root 目录下执行命令:

  kubectl create -f mysql.yaml

0

执行添加服务的命令(这行不执行应该也不影响结果):

  kubectl apply -f mysql.yaml

0

编写一个提供对外访问的service mysql-svc.yaml:

apiVersion: v1
kind: Service
metadata:
  name: mysql
  labels:
    name: mysql
spec:
  type: NodePort
  ports:
    - port: 3306
      targetPort: 3306
      nodePort: 30001
  selector:
    app: mysql

将 mysql-svc.yaml 配置文件上传至虚拟机的 /root 目录下,在 /root 目录下执行命令:

  kubectl create -f mysql-svc.yaml

0

访问数据库并验证其运行正常

  kubectl get pod

0

kubectl exec -it mysql-999dcb98f-srxff -- mysql -u root -p

(密码也是root)

0

mysql开放远程连接:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;

flush privileges;        #刷新权限表,使配置生效

开启防火墙端口

systemctl start firewalld.service

firewall-cmd --zone=public --add-port=6443/tcp --permanent

firewall-cmd --zone=public --add-port=30001/tcp --permanent

firewall-cmd --reload

firewall-cmd --zone=public --list-ports

systemctl stop firewalld.service

systemctl disable firewalld.service

要开放6443端口(k8s集群连接地址)和30001端口(k8s集群mysql端口)

查看已安装的mysql

kubectl get pod

0

kubectl get svc

0

mysql服务安装在default命名空间中,查看其所在节点:

kubectl get pod -n default -o wide

0

此次部署的mysql服务被我们指定运行在了 k8s-worker01 节点上。

在本地用SQLyog连接到k8s集群的mysql:

0

0

创建一个名为 test 的数据库:

0

将本地数据导入搭建好的mysql服务器-test数据库:

0

0

可以看到,数据已成功导入。

在k8s集群中查看mysql数据库:

0

可看到中文数据出现乱码问题。

查看数据库的字符编码类型:

show variables like '%char%';

0

将查询结果集设置为utf8后再查看数据:

set character_set_results=utf8;

0

已经可以正常显示中文了。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

半导体设备系列:半导体制造产能扩张,设备零部件需求旺盛

近年来国内半导体制造产能不断扩张,半导体设备厂商加速成长。我们认为下游发展将拉动上游本地化配套需求,半导体设备零部件迎来高增长阶段。 摘要 半导体设备零部件包含密封圈、EFEM、射频电源、静电吸盘、硅电极、真空泵、气体流量计、喷淋头等产品&a…

如何做好档案数字化前的鉴定工作

要做好档案数字化前的鉴定工作,可以按照以下步骤进行: 1. 确定鉴定目标:明确要鉴定的档案的内容、数量和性质,确定鉴定的范围和目标。 2. 进行档案清点:对档案进行全面清点和登记,包括数量、种类、状况等信…

【稳定检索|投稿优惠】2024年创新设计与经济发展国际学术会议(IACLDED 2024)

2024年创新设计与经济发展国际学术会议(IACLDED 2024) 2024 International Academic Conference on Innovative Design and Economic Development(IACLDED) 一、【会议简介】 2024年创新设计与经济发展国际学术会议(IACLDED 2024),将于繁华的成都盛大召开。本次会议…

Vue3 使用路由 Router

Vue3 使用路由 Router 之前几篇博文说了一下 vue 的基本语法和 vue 的传参,今天这篇博文稍微说一下 vue3 里面使用路由。 介绍 众所周知,vue 是用来构建单页面应用的前端框架,大于大多数此类型应用来讲,都推荐使用官方支持的 vue…

阿赵UE学习笔记——6、免费资源获取

阿赵UE学习笔记目录 大家好,我是阿赵。   接下来准备要往UE引擎里面放美术资源了。美术资源可以自己做,不过也有一些免费的资源可以供我们使用的,这里介绍一些获得免费美术资源的方法。 一、Quixel 1、Quixel网站下载 Quixel资源库&#…

小H靶场笔记:DC-3

DC-3 January 3, 2024 4:11 PM Tags:Joomla owner:只惠摸鱼 信息收集 探测靶机ip: 192.168.199.133 nmap 扫描端口、 系统版本 漏洞 发现只有80端口开发, 且有cve-2017-8917漏洞存在是Joomla的SQL注入漏洞 Joomla版本为3.7.0…

【Java】接口和抽象类有什么共同点和区别?

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 【Java】接口和抽象类有什么共同点和区别&…

李沐机器学习系列3---深度学习计算

1 层和块 1.1 定义块 用class表示层,并只需要实现构造函数和前向传播函数 class MLP(nn.Module):# 用模型参数声明层。这里,我们声明两个全连接的层def __init__(self):# 调用MLP的父类Module的构造函数来执行必要的初始化。# 这样,在类实…

流媒体学习之路(WebRTC)——GCC分析(4)

流媒体学习之路(WebRTC)——GCC分析(4) —— 我正在的github给大家开发一个用于做实验的项目 —— github.com/qw225967/Bifrost目标:可以让大家熟悉各类Qos能力、带宽估计能力,提供每个环节关键参数调节接口并实现一个json全配置…

代码审查那些事

代码审查(code review)是指对源代码进行系统化地审查,是软件开发中的最佳实践之一,代码合并之前必须审查通过才行,可及时发现隐藏问题,提高代码质量。 1 为什么要代码审查 代码审查环节,或者流于形式,或者…

依赖注入实现原理

依赖注入实现原理 一、Autowire 流程图: Autowire的后置处理器类是AutowiredAnnotationBeanPostProcessor,在启动时会执行这里面的方法 步骤一:寻找注入点 在创建一个Bean的过程中,Spring会利用AutowiredAnnotationBeanPostPro…

Go Lang Fiber介绍

利用GoLang Fiber进行高性能Web开发 在不断发展的Web开发世界中,选择合适的框架至关重要。速度、简洁性和强大的功能集是每个开发者都追求的品质。在使用Go构建Web应用时,“Fiber”作为一个强大且轻量级的框架在众多选择中脱颖而出。在这份全面的指南中…

Contextcapture(iTwin capture)倾斜建模教程

Contextcapture(iTwin capture)倾斜建模教程 前言步骤1.1 准备数据1.2 新建项目1.3 新建Block1.4 空三 Submit Aerotriangulation1.5 查看空三结果1.6 提交三维重建1.6.1 编辑重建(Reconstruction)的空间框架(spatial …

谷歌Gemini模型,碾压GPT-4!

谷歌Gemini 1.0革新,推出Gemini Ultra、Gemini Pro和Gemini Nano模型。Gemini Ultra强大但慢,Gemini Pro通用,Gemini Nano高效。Gemini模型在多领域与ChatGPT竞争,尤其Gemini Pro已应用于Bard。Gemini模型预计将在2024年通过Bard …

【docker】如何编写dockerfile文件,构建docker镜像

如何编写dockerfile文件,构建docker镜像 一、docker 镜像与 dockerfile1.1 什么是Docker镜像1.2 Docker 镜像的结构 二、dockerfile 中常用的构建指令三、dockerfile 内容示例四、构建 docker 镜像 一、docker 镜像与 dockerfile 1.1 什么是Docker镜像 Docker镜像…

Intel SGX -- The Life Cycle of an SGX Enclave

文章目录 前言一、The Life Cycle of an SGX Enclave1.1 Creation1.2 Loading1.3 Initialization1.4 Teardown 二、The Life Cycle of an SGX Thread2.1 Synchronous Enclave Entry2.2 Synchronous Enclave Exit2.3 Asynchronous Enclave Exit (AEX)2.4 Recovering from an Asy…

solidity案例详解(七)复杂众筹合约

自己原创智能合约,有作业需求可加下面的图片中的裙 1、在 Remix 中,以 Account1 完成“众筹项目”合约的编译和部署。(显示合约、函数、状态变量、结构体、事件的命名) 2、在 Remix 中,以 Account2 完成“参与众筹”合…

Python数据分析之pandas的SQL风格

一、select选择 SELECT username, password, secret, login_ip FROM tz_admin LIMIT 5; data[[username, password, secret, login_ip]].head(5) #在SQL中,选择是使用逗号分隔的列(或选择所有列)来完成的 #Pandas中,列的选择是通过传递列名到DataFrame:…

长见识!!!Java中除了消息队列之外,竟然还能这样实现异步任务

今年IT寒冬,大厂都裁员或者准备裁员,作为开猿节流主要目标之一,我们更应该时刻保持竞争力。为了抱团取暖,林老师开通了《知识星球》,并邀请我阿里、快手、腾讯等的朋友加入,分享八股文、项目经验、管理经验…

鸿蒙HarmonyOs学习:如何添页面和路由

1.目录结构 重点我们开发中需要用到地方我都做了简单的说明。 2.我们看看入口页面是如何配置的 在主配置文件module.json5中配置Ability路径已经应用图标和应用名称等信息。 3.配置页面路由 这个路由是由哪儿配置的呢? 想必看完这些,你应该知道一个鸿…