1.Docker安装mysql

参考

Docker 安装 MySQL
https://www.runoob.com/docker/docker-install-mysql.html

步骤1:在docker上pull mysql镜像

$ docker pull mysql:latest

步骤2:运行容器

docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

步骤3:本机可以通过 root 和密码 123456 访问 MySQL 服务。

进入docker container内部,输入以下:

mysql -h 127.0.0.1 -u root -p 

步骤4:可通过HeidiSQL来访问MySQL服务。

在这里插入图片描述

在这里插入图片描述

debug请见下方链接

解决Access denied for user ‘root’@‘localhost’ (using password: YES)
https://blog.csdn.net/qq_69321993/article/details/125122158

MySQL连接失败:10061错误,Can’t connect to MySQL server on ‘127.0.0.1’ (10061)
https://www.cnblogs.com/forforever/p/13328177.html

2.K8S安装mysql

参考

K8S安装MySQLhttps://www.jianshu.com/p/58ad9584a4a9

步骤1:mysql.yml(无PVC)

apiVersion: v1
kind: ReplicationController
metadata:
  name: mysql-rc
  labels:
    name: mysql-rc
spec:
  replicas: 1
  selector:
    name: mysql-pod
  template:
    metadata:
      labels:
        name: mysql-pod
    spec:
      containers:
      - name: mysql
        image: mysql
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 3306
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "mysql"

步骤1B:mysql.yml(有PVC)

apiVersion: v1
kind: ReplicationController
metadata:
  name: mysql-rc
  labels:
    name: mysql-rc
spec:
  replicas: 1
  selector:
    name: mysql-pod
  template:
    metadata:
      labels:
        name: mysql-pod
    spec:
      containers:
      - name: mysql
        image: mysql
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 3306
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "mysql"
        volumeMounts:
        - name: mysql-pvc
          mountPath: "/var/lib/mysql"
      volumes:
       - name: mysql-pvc
        #  persistentVolumeClaim:
         hostPath:
            # directory location on host
            path: /data/tlinux
            # this field is optional
            type: Directory

步骤2:service.yaml

apiVersion: v1
kind: Service
metadata:
  name: mysql-svc
  labels:
    name: mysql-svc
spec:
  type: NodePort
  ports:
  - port: 3306
    protocol: TCP
    targetPort: 3306
    name: http
    nodePort: 32306
  selector:
    name: mysql-pod

步骤3:进入mysql的pod来设置账号密码

mysql -h127.0.0.1 -uroot -pmysql

步骤4:可通过HeidiSQL来访问MySQL服务。

在这里插入图片描述

步骤5:配置django的数据库:

https://docs.djangoproject.com/en/3.2/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'K8Smysql',
        'USER': 'root',
        'PASSWORD': '*****',
        'HOST': '106.52.14.84',
        'PORT': '32306',
    }
}

步骤6:进入mysql的pod创造table

  • 进入mysql的pod
    在这里插入图片描述
    在这里插入图片描述

debug1: django.db.utils.OperationalError:(1046,‘没有选择数据库’)
https://qa.1r1g.com/sf/ask/2404092001/

debug2: django.db.utils.OperationalError: (1118, ‘Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs’)
https://dev.mysql.com/doc/refman/8.0/en/column-count-limit.html#:%7E:text=The%20internal%20representation%20of%20a,the%20rest%20of%20the%20row.

步骤7:python manage.py makemigrations和python manage.py migrate,在mysql中同步表

在这里插入图片描述

3.Racher安装mysql

步骤1:Racher部署

  • 基本设定:3306
    在这里插入图片描述

  • 环境变量:MARIADB_ROOT_PASSWORD=123456
    在这里插入图片描述

  • 持久卷:/var/lib/mysql (一个持久卷只能同时挂一个pod,不可以同时挂多个pod)
    在这里插入图片描述

或者mariadb的话路径可能不一样???待测试

在这里插入图片描述

步骤2:查看端口

在这里插入图片描述

步骤3:用Ping 域名来查看IP

好神奇,ping不到这个IP,姑姑超用他的IP给我10.41.241.169
在这里插入图片描述

步骤4:进入mariadb的pod里面查看或创建表(二选一)

  • 在shell中输入mysql -u root -p
    在这里插入图片描述

步骤4:用HeidiSQL查看或创建表(二选一)

在这里插入图片描述

步骤5:python manage.py makemigrations和python manage.py migrate,在mariadb中同步表

在这里插入图片描述

4.新Racher安装mariadb

步骤1:deployment的yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: '1'
    field.cattle.io/description: mariadb-for-trainingplatform
    objectset.rio.cattle.io/applied: >-
      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
    objectset.rio.cattle.io/id: b5dc0455-20c1-4f11-b345-1f6482a1e1c8
  creationTimestamp: '2023-09-25T06:44:44Z'
  generation: 1
  labels:
    objectset.rio.cattle.io/hash: 92ff62c2ace4299c685215232b689ded16a7cf56
    workload.user.cattle.io/workloadselector: apps.deployment-season-mariadb-for-trainingplatform
  managedFields:
    - apiVersion: apps/v1
      fieldsType: FieldsV1
      fieldsV1:
        f:metadata:
          f:annotations:
            .: {}
            f:field.cattle.io/description: {}
            f:objectset.rio.cattle.io/applied: {}
            f:objectset.rio.cattle.io/id: {}
          f:labels:
            .: {}
            f:objectset.rio.cattle.io/hash: {}
            f:workload.user.cattle.io/workloadselector: {}
        f:spec:
          f:progressDeadlineSeconds: {}
          f:replicas: {}
          f:revisionHistoryLimit: {}
          f:selector: {}
          f:strategy:
            f:rollingUpdate:
              .: {}
              f:maxSurge: {}
              f:maxUnavailable: {}
            f:type: {}
          f:template:
            f:metadata:
              f:annotations:
                .: {}
                f:cattle.io/timestamp: {}
                f:field.cattle.io/ports: {}
              f:labels:
                .: {}
                f:workload.user.cattle.io/workloadselector: {}
            f:spec:
              f:affinity: {}
              f:containers:
                k:{"name":"mariadb"}:
                  .: {}
                  f:env:
                    .: {}
                    k:{"name":"MARIADB_ROOT_PASSWORD"}:
                      .: {}
                      f:name: {}
                      f:value: {}
                  f:image: {}
                  f:imagePullPolicy: {}
                  f:name: {}
                  f:ports:
                    .: {}
                    k:{"containerPort":3306,"protocol":"TCP"}:
                      .: {}
                      f:containerPort: {}
                      f:name: {}
                      f:protocol: {}
                  f:resources:
                    .: {}
                    f:limits:
                      .: {}
                      f:cpu: {}
                      f:memory: {}
                    f:requests:
                      .: {}
                      f:cpu: {}
                      f:memory: {}
                  f:securityContext:
                    .: {}
                    f:allowPrivilegeEscalation: {}
                    f:capabilities: {}
                    f:privileged: {}
                    f:readOnlyRootFilesystem: {}
                    f:runAsNonRoot: {}
                  f:stdin: {}
                  f:terminationMessagePath: {}
                  f:terminationMessagePolicy: {}
                  f:tty: {}
                  f:volumeMounts:
                    .: {}
                    k:{"mountPath":"/var/lib/mysql"}:
                      .: {}
                      f:mountPath: {}
                      f:name: {}
                      f:subPath: {}
              f:dnsPolicy: {}
              f:restartPolicy: {}
              f:schedulerName: {}
              f:securityContext: {}
              f:terminationGracePeriodSeconds: {}
              f:volumes:
                .: {}
                k:{"name":"volume-for-mariadb-trainingplatform"}:
                  .: {}
                  f:name: {}
                  f:persistentVolumeClaim:
                    .: {}
                    f:claimName: {}
      manager: agent
      operation: Update
      time: '2023-09-25T06:44:44Z'
    - apiVersion: apps/v1
      fieldsType: FieldsV1
      fieldsV1:
        f:metadata:
          f:annotations:
            f:deployment.kubernetes.io/revision: {}
        f:status:
          f:availableReplicas: {}
          f:conditions:
            .: {}
            k:{"type":"Available"}:
              .: {}
              f:lastTransitionTime: {}
              f:lastUpdateTime: {}
              f:message: {}
              f:reason: {}
              f:status: {}
              f:type: {}
            k:{"type":"Progressing"}:
              .: {}
              f:lastTransitionTime: {}
              f:lastUpdateTime: {}
              f:message: {}
              f:reason: {}
              f:status: {}
              f:type: {}
          f:observedGeneration: {}
          f:readyReplicas: {}
          f:replicas: {}
          f:updatedReplicas: {}
      manager: kube-controller-manager
      operation: Update
      subresource: status
      time: '2023-09-25T06:50:23Z'
  name: mariadb-for-trainingplatform
  namespace: season
  resourceVersion: '336741557'
  uid: ed0fea95-f4bf-416d-8e0d-be25dc4fa611
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      workload.user.cattle.io/workloadselector: apps.deployment-season-mariadb-for-trainingplatform
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
    type: RollingUpdate
  template:
    metadata:
      annotations:
        cattle.io/timestamp: '2023-03-14T11:44:53Z'
        field.cattle.io/ports: >-
          [[{"containerPort":3306,"dnsName":"mariadb-nodeport","hostPort":0,"kind":"NodePort","name":"3306tcp01","protocol":"TCP","sourcePort":0}]]
      creationTimestamp: null
      labels:
        workload.user.cattle.io/workloadselector: apps.deployment-season-mariadb-for-trainingplatform
    spec:
      affinity: {}
      containers:
        - env:
            - name: MARIADB_ROOT_PASSWORD
              value: '123456'
          image: mariadb
          imagePullPolicy: IfNotPresent
          name: mariadb
          ports:
            - containerPort: 3306
              name: 3306tcp01
              protocol: TCP
          resources:
            limits:
              cpu: 300m
              memory: 300Mi
            requests:
              cpu: 300m
              memory: 300Mi
          securityContext:
            allowPrivilegeEscalation: false
            capabilities: {}
            privileged: false
            readOnlyRootFilesystem: false
            runAsNonRoot: false
          stdin: true
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
          tty: true
          volumeMounts:
            - mountPath: /var/lib/mysql
              name: volume-for-mariadb-trainingplatform
              subPath: data
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
      volumes:
        - name: volume-for-mariadb-trainingplatform
          persistentVolumeClaim:
            claimName: volume-for-mariadb-trainingplatform
status:
  availableReplicas: 1
  conditions:
    - lastTransitionTime: '2023-09-25T06:50:23Z'
      lastUpdateTime: '2023-09-25T06:50:23Z'
      message: Deployment has minimum availability.
      reason: MinimumReplicasAvailable
      status: 'True'
      type: Available
    - lastTransitionTime: '2023-09-25T06:44:44Z'
      lastUpdateTime: '2023-09-25T06:50:23Z'
      message: >-
        ReplicaSet "mariadb-for-trainingplatform-868b8bc8d4" has successfully
        progressed.
      reason: NewReplicaSetAvailable
      status: 'True'
      type: Progressing
  observedGeneration: 1
  readyReplicas: 1
  replicas: 1
  updatedReplicas: 1

在这里插入图片描述

步骤2:serice的yaml

记得label要匹配selector (workload.user.cattle.io/workloadselector: apps.deployment-season-mariadb-for-trainingplatform)
在这里插入图片描述

apiVersion: v1
kind: Service
metadata:
  annotations:
    field.cattle.io/publicEndpoints: >-
      [{"addresses":["10.41.241.114"],"port":31045,"protocol":"TCP","serviceName":"season:mariadb-for-trainingplatform","allNodes":true}]
    objectset.rio.cattle.io/applied: >-
      H4sIAAAAAAAA/7RTzW7bOBB+lzlLXkqyZIu3bHYD5BIYG28KJM5hRI4c1jQpkHTQwPC7F5Rkx02atJfeRPKb0Xw/swfs1B05r6wBDs8ZJLBRRgKHW3LPShAksKWAEgMC3wMaYwMGZY2PR9t8JRE8hYlTdiIwBE0TZf9SsUPN2FzMCpYKrCmdVpSnTVG0KWtnrMjnMsMmg0MCGhvSn7Z7Qv8EHGTDqjliTfW0qrJyJpsSm7IhVlQz0VCOU1ZjI2ex6RYNrkleKdLSA3/4GdO2f1y+dAQcBuTd6/1dFkdq+Tn9lr8RYAJ8f0ig5X3N2cjdrtFK/GtkZ5UJEXs49EDfkRha0bdAzqBeOmxbJRZWK/Fy7KfMJ4+ddeH89xu+X0G8XAEvClYlK+icDVZYvQK+guXlYgWHH+Y1uKXzdqfvse54DujWFBYjYqRAPsp40bbKqHCaKvRCDqBBfgcccE0mQAK2I9frBhz+7ySGGK2g4hSQs7xIWZlm9ZJVPM95we7hkPwhz96bpboLKR15T/4jPwcd/jH+PxLWyWv5C+QX6zba4hH41ntPmkSw7r1eDo14IvdbilVpPu8VY7zM7uHwmMDgK2zRKZRN2lqXBofKKLPuNIbWui0MKN+hiFBP6K2BBHb91uKUVVkpMC1ZVaZTxFlat02Z1nnJGiraOWZ1XLAjlw9SDJd650PP44MonyO6K9wqraL8D3C9eJ7C4+n25VRwq8xa021AsYEExiV42B85B9HF8I9P4ybAa6DjGkQFzxIdIVG1d4mGG2t6uYeg3VhJfUUkHjDs+iBFf/9GjUbQaOT3AAAA//+efcJbUAUAAA
    objectset.rio.cattle.io/id: 9008c730-ca9e-46e2-b33f-0f70328d1ab1
  creationTimestamp: '2023-09-25T07:44:09Z'
  labels:
    objectset.rio.cattle.io/hash: db068aa9e9466157db5ab5be0367cbe2a409abd7
  managedFields:
    - apiVersion: v1
      fieldsType: FieldsV1
      fieldsV1:
        f:metadata:
          f:annotations:
            f:field.cattle.io/ipAddresses: {}
            f:field.cattle.io/targetDnsRecordIds: {}
            f:field.cattle.io/targetWorkloadIds: {}
      manager: rancher
      operation: Update
      time: '2023-06-28T06:20:51Z'
    - apiVersion: v1
      fieldsType: FieldsV1
      fieldsV1:
        f:metadata:
          f:annotations:
            .: {}
            f:field.cattle.io/publicEndpoints: {}
            f:objectset.rio.cattle.io/applied: {}
            f:objectset.rio.cattle.io/id: {}
          f:labels:
            .: {}
            f:objectset.rio.cattle.io/hash: {}
        f:spec:
          f:externalTrafficPolicy: {}
          f:internalTrafficPolicy: {}
          f:ipFamilies: {}
          f:ipFamilyPolicy: {}
          f:ports:
            .: {}
            k:{"port":3306,"protocol":"TCP"}:
              .: {}
              f:name: {}
              f:port: {}
              f:protocol: {}
              f:targetPort: {}
          f:selector: {}
          f:sessionAffinity: {}
          f:type: {}
      manager: agent
      operation: Update
      time: '2023-09-25T07:54:47Z'
  name: mariadb-for-trainingplatform
  namespace: season
  resourceVersion: '336910352'
  uid: ff80858d-e857-4252-9206-026aa51835eb
spec:
  clusterIP: 172.50.26.23
  clusterIPs:
    - 172.50.26.23
  externalTrafficPolicy: Cluster
  internalTrafficPolicy: Cluster
  ipFamilies:
    - IPv4
  ipFamilyPolicy: SingleStack
  ports:
    - name: tcp3306
      nodePort: 31045
      port: 3306
      protocol: TCP
      targetPort: 3306
  selector:
    workload.user.cattle.io/workloadselector: apps.deployment-season-mariadb-for-trainingplatform
  sessionAffinity: None
  type: NodePort
status:
  loadBalancer: {}

在这里插入图片描述

步骤3:进入mysql的pod来设置账号密码

mariadb -h127.0.0.1 -uroot -p123456

在这里插入图片描述

步骤4:使用heidiSQL连接

在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐