搜索
简帛阁>技术文章>SpringCloudAlibaba实战(二):Kubernetes MySQL

SpringCloudAlibaba实战(二):Kubernetes MySQL

MySQL

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

基础镜像准备

  为了对mysql进行一些配置的修改及初始化sql的处理,通过Dockerfile进行镜像构建。
文件结构:

  • mysql配置文件my.cnf
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
lower_case_table_names = 1
  • Dockerfile
FROM mysql:5.7.26
ADD my.cnf /etc/mysql/conf.d/my.cnf
ADD ./sql/nacos-mysql.sql /docker-entrypoint-initdb.d/nacos-mysql.sql
EXPOSE 3306

nacos的初始化sql就不贴出来了


192.168.1.251:32477是我Nexus docker仓库的地址


  • 创建或修改/etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.cn-hangzhou.aliyuncs.com"],
"insecure-registries": ["192.168.1.60:8083","192.168.1.251:32477"]
}

将insecure-registries地址替换成你自己的docker仓库地址,再去执行构建镜像的操作,不然会报错。

  • 构建并推送镜像到私服
docker build -t 192.168.1.251:32477/mysql:5.7.26 ./
docker login -u admin -p admin 192.168.1.251:32477
docker push 192.168.1.251:32477/mysql:5.7.26

可以在仓库看到镜像上传成功

StatefulSet方式部署Mysql

这里就比较简单主要干四件事,确定镜像 ,确定挂载点 ,确定暴露的端口以便外部访问,设置root用户密码

  • 镜像
    192.168.1.251:32477/mysql:5.7.26
  • 挂载点
    /var/lib/mysql
  • 暴露端口
    3306
  • root用户密码 这里我用了ConfigMap
    123456
    image.png
    具体YAML:

---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  namespace: development
  name: db-mysql-dev
  annotations:
    k8s.kuboard.cn/workload: db-mysql-dev
    k8s.kuboard.cn/displayName: 开发环境数据库
    k8s.kuboard.cn/ingress: 'false'
    k8s.kuboard.cn/service: NodePort
  labels:
    app: mysql-dev
    env: dev
    k8s.kuboard.cn/layer: db
    k8s.kuboard.cn/name: db-mysql-dev
    name: mysql-dev
spec:
  selector:
    matchLabels:
      app: mysql-dev
      env: dev
      k8s.kuboard.cn/layer: db
      k8s.kuboard.cn/name: db-mysql-dev
      name: mysql-dev
  revisionHistoryLimit: 10
  template:
    metadata:
      labels:
        app: mysql-dev
        env: dev
        k8s.kuboard.cn/layer: db
        k8s.kuboard.cn/name: db-mysql-dev
        name: mysql-dev
    spec:
      securityContext:
        seLinuxOptions: {}
      imagePullSecrets:
        - name: local-nexus
      restartPolicy: Always
      serviceAccountName: dev
      initContainers: []
      containers:
        - image: '192.168.1.251:32477/mysql:5.7.26'
          imagePullPolicy: Always
          name: mysql-dev
          volumeMounts:
            - name: cloud-mysql-dev
              mountPath: /var/lib/mysql
              subPath: cloud-mysql-dev
          resources:
            limits:
            requests:
          env:
            - name: MYSQL_ROOT_PASSWORD
              valueFrom:
                configMapKeyRef:
                  name: mysql-dev-cm
                  key: mysql.password
          lifecycle: {}
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
      volumes:
        - name: cloud-mysql-dev
          persistentVolumeClaim:
            claimName: qy-log
      dnsPolicy: ClusterFirst
      dnsConfig: {}
      schedulerName: default-scheduler
      terminationGracePeriodSeconds: 30
  replicas: 1
  volumeClaimTemplates: []
  serviceName: db-mysql-dev

---
apiVersion: v1
kind: Service
metadata:
  namespace: development
  name: db-mysql-dev
  annotations:
    k8s.kuboard.cn/workload: db-mysql-dev
    k8s.kuboard.cn/displayName: 开发环境数据库
  labels:
    app: mysql-dev
    env: dev
    k8s.kuboard.cn/layer: db
    k8s.kuboard.cn/name: db-mysql-dev
    name: mysql-dev
spec:
  selector:
    app: mysql-dev
    env: dev
    k8s.kuboard.cn/layer: db
    k8s.kuboard.cn/name: db-mysql-dev
    name: mysql-dev
  type: NodePort
  ports:
    - port: 3306
      targetPort: 3306
      protocol: TCP
      name: zdcah3
      nodePort: 32336
  sessionAffinity: None

---
metadata:
  name: mysql-dev-cm
  namespace: development
  managedFields:
    - manager: Mozilla
      operation: Update
      apiVersion: v1
      time: '2020-10-28T05:32:17Z'
      fieldsType: FieldsV1
      fieldsV1:
        'f:data':
          .: {}
          'f:mysql.host': {}
          'f:mysql.password': {}
          'f:mysql.port': {}
          'f:mysql.user': {}
data:
  mysql.host: db-mysql-dev
  mysql.password: '123456'
  mysql.port: '3306'
  mysql.user: root
kind: ConfigMap
apiVersion: v1

---
metadata:
  name: local-nexus
  namespace: development
  managedFields:
    - manager: Mozilla
      operation: Update
      apiVersion: v1
      time: '2020-09-16T05:39:12Z'
      fieldsType: FieldsV1
      fieldsV1:
        'f:data':
          .: {}
          'f:.dockerconfigjson': {}
        'f:type': {}
data:
  .dockerconfigjson: >-
    eyJhdXRocyI6eyJodHRwOi8vMTkyLjE2OC4xLjI1MTozMjQ3NyI6eyJ1c2VybmFtZSI6ImFkbWluIiwicGFzc3dvcmQiOiJhZG1pbiIsImF1dGgiOiJZV1J0YVc0NlpIbHhlVEF6TWpZPSJ9fX0=
type: kubernetes.io/dockerconfigjson
kind: Secret
apiVersion: v1

测试连接

image.png

录1编写mysqlyaml文件2执行如下命令创建3通过如下命令查看创建结果4命令行进入Pod并登录mysql5至此,数据库已经安装完成,然后即可通过ip+端口,这里是30001,进行数据库链接了1编
SpringCloudAlibaba微服务实战教程系列注意:以下实战是Dubbo以Nacos为注册中心的使用方式一、Dubbo提取api模块packagecityalbertemail;/***@au
第一章部署K8S集群https://wwwcnblogscom/zoulixiang/p/9504324html第二章1新建mysqlrcyamlvimysqlrcyamlapiVersion:v1k
1kubernetes集群分为主节点和工作节点11主节点:控制和管理整个集群,是整个集群的控制面板。包含多个组件,可以运行在单个主节点或者通过副本分别部署在多个主节点以确保高可用性。111主节点组件1
本文主要用来实现SpringCloud如何利用Dubbo(RPC框架)的高性能服务调用。Dubbo的注册中心采用的是Zookeeper,而起初微服务的注册中心并不支持Zookeeper,那么怎么才能让
一、什么是Kubernetes?Kubernetes是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署,自动扩缩容,维护等功能通过Kubernetes可以做到:快速部署应用快速扩展应用
摘要RadonDBMySQLKubernetesv220于近日发布!该版本开始支持MySQL80,备份功能优化,并全面提升高可用稳定性。社区同步发起“新版试用赢周边”活动!致谢感谢@runkeche
RadonDBMySQLKubernetes[1]于近日正式发布新版本221[2]。该版本主要在用户管理、高可用组件等进行了优化,并修复一些问题。致谢感谢@runkecheng@acekingke@z
后续继Kubernetes资源预留(一),查阅相关资料及参考阿里云ACK的资源预留配置,深思熟虑后,决定采取以下配置,分为个部分阿里云ACK配置具体配置阿里云kubelet详细配置iZj6c1ub
ApacheDubbo是一款高性能、轻量级的开源JavaRPC框架,它提供了三大核心能力:面向接口的远程方法调用;智能容错和负载均衡;以及服务自动注册和发现。Dubbo是阿里巴巴开源的一款高性能的服务