kubernetes部署应用程序及MySQL数据库
镜像制作网上有很多教程,本地镜像仓库也有很多教程,这里不去详细介绍和部署了
生成yaml文件
kubectl create deployment web --image=fage/java-demo:v1 --dry-run=client -o yaml >deployment.yaml
部署前需要考虑的有:
1、拉取镜像认证信息 2、拉取镜像策略 3、资源的限制 4、健康检查 5、数据卷挂载.....等
cat deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: web #这里的标签名称要和service的对应才能被service关联
name: java-demo #显示的名称
spec:
replicas: 1
selector:
matchLabels:
app: web
project: www #注意:如果这里有这个标签,在service也要有
strategy: {}
template:
metadata:
labels:
app: web
project: www #注意:如果这里有这个标签,在service也要有
spec:
containers:
- image: fage/java-demo:v1
name: java-demo
resources: {}
# 镜像拉取策略
imagePullPolicy: IfNotPresent
# 变量
env:
- name: ABC
value: "123456"
# 资源限制,requests是启动最小资源,limits是最大使用资源,分配资源到pod参考依据
resources:
limits:
cpu: 1
memory: "1000Mi"
requests:
cpu: 0.5
memory: "500Mi"
# 存活健康检查,关联service,失败会被ep剔除pod
livenessProbe:
httpGet:
path: /
port: 8080
initialDelaySeconds: 60
periodSeconds: 10
# 准备就绪检查
readinessProbe:
httpGet:
path: /
port: 8080
initialDelaySeconds: 60
periodSeconds: 10
# 数据卷挂载
#voluneMounts:
# - name: config
# mountPath: /data
#数据源位置数据卷类型有nfs\secret\hostPath\configmap\emptyDir等
#volumes:
# - name: config
# type: nfs
# path: /data
# server: 192.168.10.162
这里暂时不用数据卷
生效清单文件
kubectl apply -f deployment.yaml
如果需要更新的话需要将原来的deployment.yaml删除掉后重建kubectl delete -f deployment.yaml 重建 kubectl apply -f deployment.yaml
创建service
vim svc.yaml
apiVersion: v1
kind: Service
metadata:
name: java-demo
project: www #注意:如果这里有这个标签,在deployment也要有
spec:
ports:
- port: 80
protocol: TCP
nodePort: 30010
targetPort: 8080
selector:
app: web #这里要与deployment的标签对应才能提供服务
type: NodePort
需要是三个都能看到才能正常访问



kubernetes部署MySQL容器实例
生成配置清单文件
cat mysql.yaml
apiVersion: v1
kind: Secret
metadata:
name: java-demo-db
namespace: default
type: Opaque
data:
mysql-root-password: "MTIzNDU2"
mysql-password: "MTIzNDU2"
# 以上是secret存储信息,不能存储明文数据,需要base64加密方式后的密码
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: java-demo-db #pod显示的名称
namespace: default #属于哪个标签
spec:
selector:
matchLabels:
project: www
app: mysql #service关联的标签
template:
metadata:
labels:
project: www
app: mysql #service关联的标签
spec:
containers:
- name: db
image: mysql:5.7.30 #使用官方的镜像部署MySQL
resources: #资源限制
requests:
cpu: 500m
memory: 512Mi
limits:
cpu: 500m
memory: 512Mi
env: #使用secret环境变量
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: java-demo-db
key: mysql-root-password
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
name: java-demo-db
key: mysql-password
- name: MYSQL_USER #配置使用的数据库用户和数据库名称
value: "test"
- name: MYSQL_DATABASE
value: "test"
ports:
- name: mysql
containerPort: 3306
livenessProbe: #健康检查
exec:
command:
- sh
- -c
- "mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD}"
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
exec:
command:
- sh
- -c
- "mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD}"
initialDelaySeconds: 5
periodSeconds: 10
volumeMounts: #挂载的数据
- name: data
mountPath: /var/lib/mysql
volumes: #挂载的数据源
- name: data
persistentVolumeClaim:
claimName: java-demo-db
---
# PVC自动供给
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: java-demo-db #PVC被挂载的名称
namespace: default
spec:
storageClassName: "managed-nfs-storage"
accessModes:
- "ReadWriteOnce" #挂载的权限类型
resources:
requests:
storage: "8Gi"
---
#service暴露信息
apiVersion: v1
kind: Service
metadata:
name: java-demo-db
namespace: default
spec:
type: ClusterIP
ports:
- name: mysql
port: 3306
targetPort: mysql
selector:
project: www
app: mysql
注意:数据库需要持久化,需要搭建自动供给环境如:NFS挂载自动供给获取其他支持持久化数据存储
生效清单文件
kubectl apply -f mysql.yaml kubectl get pods -owide |grep "java-demo-db"

kubectl get pv,pvc |grep "java-demo-db"

kubectl get svc |grep "java-demo-db"

创建临时mysql客户端测试
kubectl run mysql-client -it --rm --image=mysql:5.7 -- bash

更改镜像连接数据库的地址、数据库名、用户和密码
vim tomcat-java-demo-master/src/main/resources/application.yml
指向你的数据库的地址
然后将数据库的sql文件导入到数据库,创建并授权用户可以远程连接
kubectl get pods | grep " java-demo-db" kubectl cp /root/tomcat-java-demo-master/db/tables_ly_tomcat.sql java-demo-db-79fb79db89-zpkbn:/ kubectl exec -it java-demo-db-79fb79db89-zpkbn bash mysql -uroot -p123456 create database test; use test; source /tables_ly_tomcat.sql grant all on test.* to 'root'@'%' identified by '123456';
然后重新构建镜像和创建业务镜像
cd && cd tomcat-java-demo-master/ && mvn clean package -Dmaven.test.skip=true docker build -t fage/java-demo:v2 .
然后上传镜像到镜像仓库,没有镜像仓库可以到处镜像复制到其他及节点上导入
docker save -o java-demo-v2.tar fage/java-demo:v2 scp java-demo-v2.tar root@192.168.10.111:~ scp java-demo-v2.tar root@192.168.10.112:~
在其他节点导入镜像
docker load <java-demo-v2.tar
修改yaml镜像使用新的版本,把版本更改为最新的即可
如果需要提供给外部访问创建ingress规则即可
至此部署完成
使劲折腾才会有更好的结果!!!!
如有不对请不吝赐教,感谢!
转载请注明出处!

浙公网安备 33010602011771号