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规则即可
至此部署完成
使劲折腾才会有更好的结果!!!!
如有不对请不吝赐教,感谢!
转载请注明出处!