k8s部署mysql单机版

环境:
Os:Centos 7
k8s:1.28

1.创建名称空间

kubectl create namespace ns-mysql

 

2.创建secret

复制代码
[root@master single]# more 1-secret.yaml 
apiVersion: v1
data:
  MYSQL_ROOT_PASSWORD: bXlzcWw= #密码mysql 采用base64编码后结果
kind: Secret
metadata:
  name: mysql-secret
  namespace: ns-mysql
type: Opaque
复制代码
kubectl apply -f 1-secret.yaml

 

3.创建configmap

复制代码
[root@master single]# more 2-configmap.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: mysql-cnf
  namespace: ns-mysql
data:
  my.cnf: |-
    [client]
    default-character-set=utf8mb4
    [mysql]
    default-character-set=utf8mb4
    [mysqld]
    init_connect='SET collation_connection = utf8mb4_general_ci'
    init_connect='SET NAMES utf8mb4'
    interactive_timeout=86400
    wait_timeout=86400
    max_connections = 5000
    character-set-server=utf8mb4
    collation-server=utf8mb4_general_ci
    skip-character-set-client-handshake
    skip-name-resolve
    #master-slaver repication
    server_id=1
    log-bin=mysql-bin
    read-only=0
    replicate-ignore-db=mysql
    replicate-ignore-db=sys
    replicate-ignore-db=information_schema
    replicate-ignore-db=performance_schema
    gtid_mode=ON
    enforce_gtid_consistency = ON
    lower_case_table_names=1
    sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
复制代码

 

kubectl apply -f 2-configmap.yaml

 

4.创建pv 

复制代码
[root@master single]# more 3-pv.yaml 
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv
  namespace: ns-mysql
spec:
  accessModes:
    - ReadWriteOnce
  capacity:
    storage: 5Gi
  nfs:
    path: /k8s/mysql/data
    readOnly: false
    server: 192.168.1.102
复制代码

 

需要创建好子目录,k8s目录为nfs共享目录

mkdir -p /k8s/mysql/data 

 

kubectl apply -f 3-pv.yaml

 

5.创建pvc

复制代码
[root@master single]# more 4-pvc.yaml 
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pvc
  namespace: ns-mysql
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  volumeName: mysql-pv
复制代码

 

kubectl apply -f 4-pvc.yaml

 

6.创建sts

复制代码
[root@master single]# more 5-sts.yaml 
apiVersion: apps/v1
kind: StatefulSet
metadata:
  namespace: ns-mysql
  labels:
    app: mysql-hxl       ##可自定义名称
  name: mysql-hxl-sts    ##可自定义名称
  annotations:
    kubesphere.io/alias-name: mysql-hxl ##可自定义名称
spec:
  replicas: 1  ##这里只能设置副本数为1
  selector:
    matchLabels:
      app: mysql-hxl
  template:
    metadata:
      labels:
        app: mysql-hxl ##必须与spec.selector 同名称
      annotations:
        kubesphere.io/containerSecrets: null
        logging.kubesphere.io/logsidecar-config: '{}'
    spec:
      containers:
        - name: hxl-container
          ##type: worker
          imagePullPolicy: IfNotPresent
          resources:
            requests:
              cpu: '0.01'
              memory: 10Mi
            limits:
              cpu: '0.98'
              memory: 1700Mi
          image: registry.cn-shenzhen.aliyuncs.com/hxlk8s/mysql:5.7.30
          ports:
            - name: tcp-3306
              protocol: TCP
              containerPort: 3306
              ##servicePort: 3306
            - name: tcp-33060
              protocol: TCP
              containerPort: 33060
              ##servicePort: 33060
          env:
            - name: MYSQL_ROOT_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mysql-secret
                  key: MYSQL_ROOT_PASSWORD
          volumeMounts:
            - name: hxl-cnf-volume  ##必须与volumes定义的同名称
              readOnly: false
              mountPath: /etc/mysql
            - name: hxl-data-volume ##必须与volumes定义的同名称
              readOnly: false
              mountPath: /var/lib/mysql
      serviceAccount: default
      affinity:
        podAntiAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
            - weight: 100
              podAffinityTerm:
                labelSelector:
                  matchLabels:
                    app: mysql-hxl
                topologyKey: kubernetes.io/hostname
      initContainers: []
      imagePullSecrets: null
      volumes:
        - name: hxl-cnf-volume     #映射configMap信息
          configMap:
            name: mysql-cnf
            items:
              - key: my.cnf
                path: my.cnf
        - name: hxl-data-volume    #映射pvc信息
          persistentVolumeClaim:
            claimName: mysql-pvc
  updateStrategy:
    type: RollingUpdate
    rollingUpdate:
      partition: 0
复制代码

 

kubectl apply -f 5-sts.yaml

 

deployment版

vi 5-deploy.yaml

复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hxl-mysql-deploy
  namespace: ns-mysql
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql-hxl
  template:
    metadata:
      labels:
        app: mysql-hxl
    spec:
      containers:
        - name: hxl-container
          image: registry.cn-shenzhen.aliyuncs.com/hxlk8s/mysql:5.7.30
          imagePullPolicy: IfNotPresent
          ports:
            - name: tcp-3306
              protocol: TCP
              containerPort: 3306
              ##servicePort: 3306
            - name: tcp-33060
              protocol: TCP
              containerPort: 33060
              ##servicePort: 33060
          env:
            - name: MYSQL_ROOT_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mysql-secret
                  key: MYSQL_ROOT_PASSWORD
          volumeMounts:
            - name: hxl-cnf-volume
              readOnly: false
              mountPath: /etc/mysql
            - name: hxl-data-volume
              readOnly: false
              mountPath: /var/lib/mysql
      volumes:
        - name: hxl-cnf-volume     #映射configMap信息
          configMap:
            name: mysql-cnf
            items:
              - key: my.cnf
                path: my.cnf
        - name: hxl-data-volume    #映射pvc信息
          persistentVolumeClaim:
            claimName: mysql-pvc
复制代码

 

 

 

8.创建nodeport service

复制代码
[root@master single]# more 7-nodeport-svc.yaml 
apiVersion: v1
kind: Service
metadata:
  name: mysql-front
  labels:
    app: mysql-hxl
  namespace: ns-mysql
spec:
  selector:
    app: mysql-hxl
  type: NodePort
  ports:
    - name: ''
      port: 3306
      protocol: TCP
      targetPort: 3306
      nodePort: 30001  #指定主机任意端口30000-32767
  sessionAffinity: None
复制代码
kubectl apply -f 7-nodeport-svc.yaml

 

9.通过客户端连接
使用端口30001

/opt/mysql57/bin/mysql -h 192.168.1.102 -uroot -pmysql -P30001
/opt/mysql57/bin/mysql -h 192.168.1.105 -uroot -pmysql -P30001
/opt/mysql57/bin/mysql -h 192.168.1.106 -uroot -pmysql -P30001

复制代码
mysql> select user,host from mysql.user;
+---------------+-----------+
| user          | host      |
+---------------+-----------+
| root          | %         |
| mysql.session | localhost |
| mysql.sys     | localhost |
| root          | localhost |
+---------------+-----------+
4 rows in set (0.00 sec)

mysql> show grants for 'root'@'%';
+-------------------------------------------------------------+
| Grants for root@%                                           |
+-------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION |
+-------------------------------------------------------------+
1 row in set (0.00 sec)
复制代码

该账号默认对连接客户端不做限制.

 

posted @   slnngk  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
历史上的今天:
2024-03-05 神舟数据库物理备份和恢复
2024-03-05 神舟数据库导出导入
2024-03-05 神舟数据库日常维护
2024-03-05 神舟通用数据库安装(交互方式)
2020-03-05 oracle 12C CDB下开启wallet
2019-03-05 redis集群部署+节点端口修改+数据恢复
点击右上角即可分享
微信分享提示