注意事项

其实mysql这种应用我还是不建议挂到k8s中,因为我是学习使用,使用的vmvare开了3台虚拟linux,因为k8s对配置要求较高,如果太低的话会出现pod部署失败等配置问题,建议还是只在k8s部署springcloud项目的jar包

  1. 因为是容器化部署,如果默认配置的话可能会出现下面问题:重启docker容器,mysql存储的数据都没了,还有mysql登录密码都需要在docker运行mysql镜像的时候指定。
  2. 因为k8s为了保证可用性,如果在节点A上部署的mysql宕机了,可能会在B节点上重新部署mysql,这样的话之前保存的数据都流失了。所以需要指定启动参数。
  3. 我自己的k8s部署环境配置信息:
    * 在192.168.192.131部署node131 (k8s的master+工作节点)
    * 在192.168.192.132部署node132 (k8s的工作节点)

正片开始!

1. 确定mysql镜像包

我使用的是daocloud镜像仓库,下载了最新版的mysql镜像包拉取pull下来存到本地私有仓库,只是镜像地址:daocloud.io/library/mysql:5.7.5-m15

2. 创建namespace.yaml文件

apiVersion: v1 #类型为Namespace
kind: Namespace  #类型为Namespace
metadata:
  name: ssx-ns  #命名空间名称
  labels:
    name: lb-ssx-ns

然后应用到k8s中
kubectl create -f ./namespace.yaml

3. 创建deployment.yaml文件

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: mysql #为该Deployment设置key为app,value为mysql的标签
  name: ssx-mysql-dm
  namespace: ssx-ns
spec:
  replicas: 1 
  selector: #标签选择器,与上面的标签共同作用
    matchLabels: #选择包含标签app:mysql的资源
      app: mysql
  template: #这是选择或创建的Pod的模板
    metadata: #Pod的元数据
      labels: #Pod的标签,上面的selector即选择包含标签app:mysql的Pod
        app: mysql
    spec: #期望Pod实现的功能(即在pod中部署)
      containers: #生成container,与docker中的container是同一种
      - name: ssx-mysql-c
        image: 192.168.1.130:5000/ssx-mysql:v1.0 #使用镜像 此处的镜像地址是我自己的私有镜像仓库,该mysql镜像其实是daocloud.io/library/mysql:5.7.5-m15的重新打tag
        ports:
        - containerPort: 3306  # 开启本容器的80端口可访问
        volumeMounts:
        - mountPath: /var/lib/mysql #这是mysql容器内保存数据的默认路径
          name: c-v-path
        - mountPath: /etc/localtime
          name: c-v-path-time
        env:   #容器运行前需设置的环境变量列表
        - name: MYSQL_ROOT_PASSWORD  #环境变量名称
          value: "1" #环境变量的值 这是mysqlroot的密码 因为是纯数字,需要添加双引号 不然编译报错
      volumes:
      - name: c-v-path #和上面保持一致 这是本地的文件路径,上面是容器内部的路径
        hostPath:
          path: /root/apps/k8s/for_docker_volume/mysql #此路径需要实现创建
      - name: c-v-path-time #和上面保持一致 这是本地的文件路径,上面是容器内部的路径
        hostPath:
          path: /etc/localtime #此路径需要实现创建
      nodeSelector: #把此pod部署到指定的node标签上
        kubernetes.io/hostname: node131

然后应用到k8s中
kubectl create -f ./deployment.yaml

4. 创建service.yaml文件

apiVersion: v1
kind: Service
metadata:
  labels:
   app: mysql
  name: ssx-mysql-sv
  namespace: ssx-ns
spec:
  ports:
  - port: 9000 #我暂时不理解,这个设置 明明没用到?
    name: ssx-mysql-last
    protocol: TCP
    targetPort: 3306 # 容器nginx对外开放的端口 上面的dm已经指定了
    nodePort: 31090 #外网访问的端口
  selector:
    app: mysql
  type: NodePort

然后应用到k8s中
kubectl create -f ./service.yaml

5. 等待pod部署完成,大概几分钟,然后就可访问mysql,这里mysql连接信息:192.168.192.131:31090