【docker/K8S/Racher】docker/K8S/Racher安装mysql的坑-20230925
docker/K8S安装mysql的坑
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连接
更多推荐
所有评论(0)