K8S入门到精通08-项目实战:K8S构建贝亲婴童商城
项目拓扑该项目拓扑结构如图所示,基本说明如下使用文件共享区的数据库脚本初始化mysql数据库使用beiqin-db-service在集群内部暴露mysql服务使用openjdk:8u222作为基础镜像,部署web应用(SpringBoot开发)使用beiqin-app-service暴露应用的端口部署所需资源文件部署所需资源均在文末的百度网盘中,所需资源目录结构如下[root@master www
项目拓扑
该项目拓扑结构如图所示,基本说明如下
- 使用文件共享区的数据库脚本初始化mysql数据库
- 使用beiqin-db-service在集群内部暴露mysql服务
- 使用openjdk:8u222作为基础镜像,部署web应用(SpringBoot开发)
- 使用beiqin-app-service暴露应用的端口
部署所需资源文件
部署所需资源均在文末的百度网盘中,所需资源目录结构如下
[root@master www-data]# tree beiqin
beiqin
├── beiqin-app-deploy.yml # web应用部署文件
├── beiqin-app-service.yml # web应用service部署文件
├── beiqin-db-deploy.yml # 数据库部署文件
├── beiqin-db-service.yml # 数据库service部署文件
├── dist
│ ├── application.yml # 应用程序配置文件
│ └── beiqin-app.jar # SpringBoot应用程序
└── sql
└── beiqin.sql # 数据库初始化sql
设置并挂载NFS文件
为了简化操作步骤,这里我们延用《05-基于NFS的集群文件共享》中的NFS设置,将Master节点中的/data/www-data共享到Node节点中的/data/www-data目录中
将需要共享的文件复制到Master节点的/data/www-data目录即可
部署并初始化数据库
编写beiqin-db-deploy.yml
apiVersion: apps/v1beta1 # 等价于extensions/v1beta1(1.6版本以前),1.6版本之后都可以使用apps/*
kind: Deployment # 这是一个部署脚本
metadata: # 元数据信息
name: beiqin-db-deploy # deployment的名称
spec: # 详细信息
replicas: 1 # 部署的副本数量
template: # 模板的设置选项
metadata:
labels: # 标签
app: beiqin-db-deploy # 自定义app标签
spec:
volumes: # 定义数据卷
- name: beiqin-db-volume # 数据卷名称
hostPath: # 主机路径
path: /data/www-data/beiqin/sql/ # Node宿主机上共享文件夹的路径
containers:
- name: beiqin-db-deploy
image: mysql:5.7 # 容器使用镜像
ports:
- containerPort: 3306 # 容器对外声明的暴露端口
env:
- name: MYSQL_ROOT_PASSWORD # 设置mysql的root密码
value: "root"
volumeMounts: # 设置挂载点
- name: beiqin-db-volume # 挂载之前定义的数据卷
mountPath: /docker-entrypoint-initdb.d # 挂载到容器的目录,docker-entrypoint-initdb.d为mysql初始化脚本的目录
部署数据库
kubectl create -f beiqin-db-deploy.yml
验证部署情况
# 查看pod
kubectl get pods
# 进入pod实例内部
kubectl exec -it beiqin-db-deploy-869d9cbdcb-6j567 /bin/bash
# 在容器内部登录mysql
mysql -uroot -proot
# 查看数据库
show databases;
# 使用beiqin db,统计t_goods表
use beiqin;
show tables;
select count(*) from t_goods;
创建db服务
编写beiqin-db-service.yml
apiVersion: v1
kind: Service
metadata:
name: beiqin-db-service
labels: # Service是特殊的pod,也必须定义labels
app: beiqin-db-service
spec:
selector:
app: beiqin-db-deploy
ports:
- port: 3310 # service对外暴露端口(对外指的是:容器外,K8S集群内部)
targetPort: 3306 # 容器内部端口
创建beiqin-db-service
kubectl create -f beiqin-db-service.yml
验证
# 查看service列表
kubectl get svc
# 查看beiqin-db-service详情
kubectl describe svc beiqin-db-service
部署Web应用
编写beiqin-app-deploy.yml
,大部分字段意义与beiqin-db-deploy.yml
相同,不再赘述。
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: beiqin-app-deploy
spec:
replicas: 2
template:
metadata:
labels:
app: beiqin-app-deploy
spec:
volumes:
- name : beqin-app-volume
hostPath:
path: /data/www-data/beiqin/dist
containers:
- name: beiqin-app-deploy
image: openjdk:8u222-jre
command: ["/bin/sh"] # 容器部署完成后默认执行的命令
args: ["-c","cd /usr/local/beiqin-dist;java -jar beiqin-app.jar"] # 启动web应用的命令
volumeMounts:
- name: beqin-app-volume
mountPath: /usr/local/beiqin-dist
部署web应用
kubectl create -f beiqin-app-deploy.yml
查看应用状态
# 查看pod列表
kubectl get pods
# 查看容器日志
kubectl logs -f beiqin-app-deploy-5bc96d54d9-pjnvf
确认beiqin-app.jar使用的配置文件application.yml
server:
port: 80
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://beiqin-db-service:3310/beiqin?useUnicode=true&characterEncoding=utf-8&useSSL=false
username: root
password: root
mvc:
favicon:
enabled: false
mybatis:
mapper-locations: classpath:/mapper/*.xml
configuration:
map-underscore-to-camel-case: true
注意url: jdbc:mysql://beiqin-db-service:3310/beiqin?useUnicode=true&characterEncoding=utf-8&useSSL=false
,数据库连接不再直接使用数据库的IP,而是使用DB Service中定义的服务名称/主机名称,这样配置文件就不用写死IP。
创建应用服务
编写beiqin-app-service.yml
apiVersion: v1
kind: Service
metadata:
name: beiqin-app-service
labels:
app: beiqin-app-service
spec:
selector:
app: beiqin-app-deploy
ports:
- port: 80
targetPort: 80
创建beiqin-app-service
kubectl create -f beiqin-app-service.yml
验证
# 查看service的CLUSTER-IP
kubectl get svc
# 验证web应用接口
curl 10.101.231.228/goods?gid=1788
使用rinetd实现端口转发
在Master节点上修改/etc/rinetd.conf
0.0.0.0 80 10.101.231.228 80
加载rinetd配置
rinetd -c /etc/rinetd.conf
在浏览器中访问如下地址(192.168.0.31为Master节点/IP),就能看到商城的页面了。
http://192.168.0.31/goods?gid=1788
版权说明
本文章内容为马士兵教育《架构师高级技能kubernetes入门到精通》课程的学习笔记
百度网盘上相关源码资料包 提取码:xdji
更多推荐
所有评论(0)