第一部分:
准备 镜像:
mysql: docker部署mysql并且初始化数据库
WordPress:使用Dockerfile构建WordPress实战案例解法一
第2部分: 给数据增加 servic 管理
拆分:
思路: 先 单独部署 mysql :
# 指定apiserver版本号
apiVersion: v1
# 指定资源的类型
kind: Pod
# 定义源数据信息
metadata:
# Pod的名称
name: mysqlpod
labels:
apps: mysql57
# 用户定义资源期望运行的状态
spec:
hostNetwork: true
# 指定在worker232的工作节点运行
nodeName: worker232
# 在Pod内运行的容器定义
containers:
# 容器的名称
- name: mysqlhuaxiang
# 镜像名称
image: harbor.baimei.com/huaxiang-mysql/init_mysql57:v0.2
ports:
- containerPort: 3306
hostIP: 10.0.0.232
hostPort: 3306
name: db
# 向容器传递环境变量
env:
# 变量的名称
- name: MYSQL_ALLOW_EMPTY_PASSWORD
# 指定变量的值
value: "yes"
- name: MYSQL_DATABASE
value: "wordpress"
- name: MYSQL_USER
value: "baimei"
- name: MYSQL_PASSWORD
value: "123456"
这样操作, 数据库的 ip 会 被外网被暴露。
如何实现只实现内网访问呢?
我们可以 用service控制器来 进行管理
01-deploy-db.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: db
spec:
replicas: 1
selector:
matchLabels:
app: mysql57
template:
metadata:
labels:
app: mysql57
spec:
containers:
- name: mysql
image: harbor.baimei.com/huaxiang-mysql/init_mysql57:v0.2
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "123456"
- name: MYSQL_DATABASE
value: wordpress
- name: MYSQL_USER
value: wordpress
- name: MYSQL_PASSWORD
value: wordpress
这个可以单独的部署的:
接下来我们 增加一个 service 来管理 DB ,这样做的目的,是 控制数据库的ip 不变。 可以实现内网访问。
02-svc-db.yaml
apiVersion: v1
kind: Service
metadata:
name: db
spec:
clusterIP: 10.200.100.100
type: ClusterIP
selector:
app: mysql57
ports:
- port: 3306
targetPort: 3306
直接加载 svc
kubectl apply -f 02-svc-db.yaml
检查 svc 是否管理 了db
kubectl describe -f 02-svc-db.yaml
kubectl describe svc db
kubectl get pods --show-labels
第3阶段: 给数据 加入 nfs 存储卷
apiVersion: apps/v1
kind: Deployment
metadata:
name: db
spec:
replicas: 1
selector:
matchLabels:
app: mysql57
template:
metadata:
labels:
app: mysql57
spec:
volumes:
- name: data
nfs:
server: master231
path: /baimei/data/kubernetes/mysql57
containers:
- name: mysql
image: harbor.baimei.com/baimei-db/mysql:5.7
volumeMounts:
- name: data
mountPath: /var/lib/mysql/
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: baimei
- name: MYSQL_DATABASE
value: wordpress
- name: MYSQL_USER
value: wordpress
- name: MYSQL_PASSWORD
value: wordpress
自己运行有问题
kubectl apply -f 01-deploy-db.yaml
问题解决:
原因是 nfs 下边没有 目录, 需要自己创建, 并且要 可读可写的权限
修改后,再次执行 成功:
第4阶段: 给 WordPress deploymen 管理 namespace
需要对WordPress 用 deployment 部署, 还要用 sevice 近行管理,定义namespace
网络需要用到哦 coreDns
01.02 的yam配置 同 第3阶段, 不需要改变,已经独立出去了
配置如下:
00-baimei-linux86-ns.yaml
apiVersion: v1
kind: Namespace
metadata:
name: baimei-linux86
labels:
school: baimei
class: linux86
03-deploy-wp-nfs.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: wp
namespace: baimei-linux86
spec:
# replicas: 1
replicas: 3
selector:
matchLabels:
app: wordpress
template:
metadata:
labels:
app: wordpress
spec:
volumes:
- name: data
nfs:
server: master231
path: /baimei/data/kubernetes/wordpress/
containers:
- name: wordpress
image: harbor.baimei.com/wordpress/wordpress:latest
volumeMounts:
- name: data
mountPath: /var/www/html/wp-content/uploads
ports:
- containerPort: 80
env:
- name: WORDPRESS_DB_HOST
# value: 10.200.100.100
# value: db
# value: db.baimei-linux86.svc.baimei.com
value: db.baimei-linux86
- name: WORDPRESS_DB_USER
value: wordpress
- name: WORDPRESS_DB_PASSWORD
value: wordpress
04-svc-wp.yaml
apiVersion: v1
kind: Service
metadata:
name: wp
namespace: baimei-linux86
spec:
type: NodePort
selector:
app: wordpress
ports:
- port: 80
targetPort: 80
nodePort: 8080
运行 后
kubectl apply -f .
要检查是否给 db svc 加入了 名称空间: