stateful minio redis mysql

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

create user 'root'@'%' IDENTIFIED WITH mysql_native_password by 'mysql';

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

FLUSH PRIVILEGES;

create user 'admin'@'%' IDENTIFIED WITH mysql_native_password by 'mysql';

GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%'  WITH GRANT OPTION;

FLUSH PRIVILEGES;

ALTER USER 'admin'@'%' DEFAULT ROLE administrator, developer;


minio部署

---

# https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: miniodev
  namespace: default
  labels:
    app: miniodev
spec:
  selector:
    matchLabels:
      app: miniodev # has to match .spec.template.metadata.labels
  replicas: 1 # by default is 1
  template:
    metadata:
      labels:
        app: miniodev # has to match .spec.selector.matchLabels
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - name: miniodev
        image: minio/minio
        env:
        - name: MINIO_ROOT_USER
          value: "admin"
        - name: MINIO_ROOT_PASSWORD
          value: "adminadmin"
        ports:
        - containerPort: 9090
        - containerPort: 9000
        volumeMounts:
        - name: miniodata
          mountPath: /data
        command: ["/bin/bash","-c","minio server /data --console-address :9000 -address :9090"]
  volumeClaimTemplates:
  - metadata:
      name: miniodata
    spec:
      storageClassName: auto-nfs-storage
      accessModes:
      - ReadWriteMany
      resources:
        requests:
          storage: 200Mi
---

apiVersion: v1
kind: Service
metadata:
  name: miniodev
  namespace: default
  labels:
    app: miniodev
spec:
  selector:
    app: miniodev
  type: NodePort
  ports:
  - name: miniodev9090
    protocol: TCP
    port: 9090
    targetPort: 9090
    nodePort: 39090
  - name: miniodev9000
    protocol: TCP
    port: 9000
    targetPort: 9000
    nodePort: 39000

redis部署

---

# https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/

apiVersion: apps/v1

kind: StatefulSet

metadata:

  name: redis001

  namespace: default

spec:

  selector:

    matchLabels:

      app: redis001 # has to match .spec.template.metadata.labels

  serviceName: "redis001"

  replicas: 1 # by default is 1

  template:

    metadata:

      labels:

        app: redis001 # has to match .spec.selector.matchLabels

    spec:

      terminationGracePeriodSeconds: 10

      containers:

      - name: redis001

        image: bitnami/redis:6.2

        env:

        - name: REDIS_PASSWORD

          value: redis001

        ports:

        - containerPort: 6379

          name: redis001

        volumeMounts:

        - name: redisdata

          mountPath: /bitnami/redis/data

  volumeClaimTemplates:

  - metadata:

      name: redisdata

    spec:

      storageClassName: auto-nfs-storage

      accessModes:

      - ReadWriteOnce

      resources:

        requests:

          storage: 100Mi

---

# https://kubernetes.io/docs/concepts/services-networking/service/

apiVersion: v1

kind: Service

metadata:

  name: redis001

  namespace: default

  labels:

    app: redis001

spec:

  selector:

    app: redis001

  type: NodePort

  ports:

  - name: redis001

    protocol: TCP

    port: 16379

    targetPort: 6379

    nodePort: 16379


 

---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql004
  namespace: default
  labels:
    app: mysql004
spec:
  selector:
    matchLabels:
      app: mysql004 # has to match .spec.template.metadata.labels
  serviceName: "mysql004"
  replicas: 1 # by default is 1
  template:
    metadata:
      labels:
        app: mysql004 # has to match .spec.selector.matchLabels
    spec:
      terminationGracePeriodSeconds: 10   
      containers:
      - name: mysql004
        image: mysql:8.0.23
        resources:
            requests:
              cpu: 500m
              memory: 512Mi
            limits:
              cpu: 1000m
              memory: 512Mi

        env:
        - name: ACCEPT_EULA
          value: "Y"
        - name: MYSQL_ROOT_PASSWORD
          value: mysql88.8
        - name: MYSQL_ROOT_USER
          value: root
        - name: MYSQL_SQL_MODE
          value: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
        - name: MYSQL_DATABASE
          value: db001
        - name: MYSQL_AUTHENTICATION_PLUGIN
          value: mysql_native_password
        - name: MYSQL_DATABASE
          value: db001
        - name: DATADIR
          value: /data
        - name: MYSQL_ROOT_HOST
          value: '%'
        ports:
        - containerPort: 3306
          name: mysql003
          protocol: TCP
        - containerPort: 33060
          name: p33060
          protocol: TCP
        - containerPort: 33061
          name: p33061
          protocol: TCP
        volumeMounts:
        - name: mysql-data
          mountPath: /data
        - name: my-cnf
          mountPath: /etc/mysql/conf.d/my.cnf
          subPath: my.cnf
        - name: log-file
          mountPath: /var/log/mysqld.log
          subpath: mysqld.log
      volumes:
      - name: my-cnf
        configMap:
          name: mysql-config
          items:
          - key: my.cnf
            path: my.cnf

      - name: log-file
        hostPath: 
          path: /var/log/mysqld.log
          type: FileOrCreate
  volumeClaimTemplates:
  - metadata:
      name: mysql-data
    spec:
      storageClassName: auto-nfs-storage
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 300Mi
---

# https://kubernetes.io/docs/concepts/services-networking/service/

apiVersion: v1

kind: Service

metadata:

  name: mysql3306

  namespace: default

  labels:

    app: mysql004

spec:

  selector:

    app: mysql004

  type: NodePort

  ports:

  - name: mysql3306

    protocol: TCP

    port: 3306

    targetPort: 3306

    nodePort: 13306

---

---
apiVersion: v1
kind: ConfigMap
metadata:
  name: mysql-config
  namespace: k8s-mysql
  labels:
    app: mysql
data:
  my.cnf: |-
    [client]
    default-character-set=utf8mb4
    [mysql]
    default-character-set=utf8mb4
    [mysqld]
    max_connections = 2000
    secure_file_priv=/var/lib/mysql
    sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
    skip-name-resolve
    open_files_limit = 65535
    table_open_cache = 128
    log_error = /var/lib/mysql/mysql-error.log #错误日志路径
    slow_query_log = 1
    long_query_time = 1 #慢查询时间 超过1秒则为慢查询
    slow_query_log_file = /var/lib/mysql/mysql-slow.log
    default-storage-engine = InnoDB #默认存储引擎
    innodb_file_per_table = 1
    innodb_open_files = 500
    innodb_buffer_pool_size = 64M
    innodb_write_io_threads = 4
    innodb_read_io_threads = 4
    innodb_thread_concurrency = 0
    innodb_purge_threads = 1
    innodb_flush_log_at_trx_commit = 2
    innodb_log_buffer_size = 2M
    innodb_log_file_size = 32M
    innodb_log_files_in_group = 3
    innodb_max_dirty_pages_pct = 90
    innodb_lock_wait_timeout = 120
    bulk_insert_buffer_size = 8M
    myisam_sort_buffer_size = 8M
    myisam_max_sort_file_size = 10G
    myisam_repair_threads = 1
    interactive_timeout = 28800
    wait_timeout = 28800
    [mysqldump]
    quick
    max_allowed_packet = 16M #服务器发送和接受的最大包长度
    [myisamchk]
    key_buffer_size = 8M
    sort_buffer_size = 8M
    read_buffer = 4M
    write_buffer = 4M



 

echo 'deb http://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free'>/etc/apt/sources.list

 echo 'deb-src http://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free'>>/etc/apt/sources.list

 apt-get update

 apt-get install vim net-tools


 

     #admin_tls_version=''

    #admin-ssl=OFF

    #disable-admin-ssl

---

要在 Kubernetes 集群中部署 Redis 集群,您需要使用 StatefulSet 来确保每个 Redis 节点都有唯一的名称和稳定的网络标识符。以下是一些基本步骤和配置文件示例: 1. 创建一个 ConfigMap 来存储 Redis 的配置文件。 ``` apiVersion: v1 kind: ConfigMap metadata: name: redis-config data: redis.conf: | bind 0.0.0.0 port 6379 cluster-enabled yes cluster-config-file /data/nodes.conf cluster-node-timeout 5000 appendonly yes ``` 2. 创建一个 Headless Service 来让每个 Redis Pod 都有唯一的 DNS 名称。 ``` apiVersion: v1 kind: Service metadata: name: redis spec: clusterIP: None selector: app: redis ports: - name: redis port: 6379 ``` 3. 创建一个 StatefulSet 来部署 Redis 集群。 ``` apiVersion: apps/v1 kind: StatefulSet metadata: name: redis spec: serviceName: redis replicas: 3 selector: matchLabels: app: redis template: metadata: labels: app: redis spec: containers: - name: redis image: redis:5.0.5-alpine command: - sh - -c - "redis-server /usr/local/etc/redis/redis.conf" ports: - name: redis containerPort: 6379 volumeMounts: - name: data mountPath: /data - name: config mountPath: /usr/local/etc/redis/ volumes: - name: data emptyDir: {} - name: config configMap: name: redis-config items: - key: redis.conf path: redis.conf volumeClaimTemplates: - metadata: name: data spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 1Gi ``` 在这个配置文件中,我们定义了一个有 3 个 Pod 的 StatefulSet,每个 Pod 使用 Redis 5.0.5-alpine 镜像,并且挂载了一个名为 `data` 的 PersistentVolumeClaim 来存储 Redis 数据。我们还定义了一个名为 `config` 的 ConfigMap,其中包含 Redis 的配置文件。最后,我们将 `serviceName` 设置为 `redis`,这将确保每个 Pod 都有唯一的 DNS 名称。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值