k8s部署mysql

124 阅读2分钟

背景

项目中的侧边栏是后端返回给前端渲染展示的,每次需要维护一份sql【部署的环境不同,侧边栏不一样】,人工维护成本巨大,因此想做一个系统来维护,直接写入每个环境的mysql。

image.png

问题

以前使用docker部署已经很轻车熟路了,而我们的业务环境自己用的是k8s部署在集群中的,因此这个系统的mysql也得部署在集群中,通过k8s集群来访问各个环境的mysql。

image.png

部署报错信息

直接通过deployment部署

kubectl create deployment mysql-fe --image=mysql -- env MYSQL_ROOT_PASSWORD=123456

image.png

kubectl describe pod xxx查询日志

image.png 这个创建的时候 命令行加参数 一直不知道怎么加,导致容器无法创建

查阅api

kubernetes.kansea.com/docs/user-g…

这里始终不知道参数怎么传,有知道的同学可以留言

如果我们想查询某个pod的详细日志

image.png kubectl get logs xxx无法查询

image.png kubectl logs idaas-oms-85d55b6577-bx2sd这个命令可以

image.png

解决

通过yaml文件

kubernetes.io/zh-cn/docs/…

下面是我自己用的

apiVersion: v1
kind: Service
metadata:
  name: mysql-fe
spec:
  ports:
  - port: 8889
  # 这是新增的 
    targetPort: 3306
    nodePort: 8889
  selector:
    app: mysql-fe
  clusterIP: None
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql-fe
spec:
  selector:
    matchLabels:
      app: mysql-fe
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mysql-fe
    spec:
      containers:
      - image: mysql-fe
        name: mysql-fe
        env:
          # Use secret in real usage
        - name: MYSQL_ROOT_PASSWORD
          value: '123456'
        ports:
        - containerPort: 3306
          name: mysql-fe
        volumeMounts:
        - name: mysql-fe-storage
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-fe-storage

最后创建service

kubectl expose deployment mysql-fe --port=8889 --target-port=3306 --type=NodePort --overrides '{ "apiVersion": "v1","spec":{"ports": [{"port":8889,"protocol":"TCP","targetPort":3306,"nodePort":8889}]}}'

结果

初步完成了这次集群的部署,这里面要学的知识还有很多。