注意事项
其实mysql这种应用我还是不建议挂到k8s中,因为我是学习使用,使用的vmvare开了3台虚拟linux,因为k8s对配置要求较高,如果太低的话会出现pod部署失败等配置问题,建议还是只在k8s部署springcloud项目的jar包
- 因为是容器化部署,如果默认配置的话可能会出现下面问题:重启docker容器,mysql存储的数据都没了,还有mysql登录密码都需要在docker运行mysql镜像的时候指定。
- 因为k8s为了保证可用性,如果在节点A上部署的mysql宕机了,可能会在B节点上重新部署mysql,这样的话之前保存的数据都流失了。所以需要指定启动参数。
- 我自己的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