原书出版于2019年6月,但版本仍较低,案例也较为过时,本文针对k8s v1.18;原书案例坑较多,本文加以修正。
一. Deployment of mysql
- 文件名:mysql-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
spec:
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.7
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "123456"
- 更改的内容如下:
- kind 由原ReplicationController变化为Deployment,相应的apiVersion也变为apps/v1,同时selector也变为matchLabels。
- image变为mysql:5.7 否则在连接时会出现事务异常(mysql:lastest镜像是8)
- 启动:
kubectl create -f mysql-deploy.yaml
二、Service of mysql
- 文件名:mysql-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
ports:
- port: 3306
selector:
app: mysql
- 说明如下:
- selector会选择由mysql-deploy.yaml->template->labels创造的标签名为app:mysql的pod。
- 启动
kubectl create -f mysql-svc.yaml
三、Deployment of myweb
- 文件名:myweb-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myweb
spec:
replicas: 2
selector:
matchLabels:
app: myweb
template:
metadata:
labels:
app: myweb
spec:
containers:
- name: myweb
image: kubeguide/tomcat-app:v1
ports:
- containerPort: 8080
env:
- name: MYSQL_SERVICE_NAME
value: "mysql"
- 更改的内容如下:
- kind 由原ReplicationController变化为Deployment,相应的apiVersion也变为apps/v1,同时selector也变为matchLabels。
- env 添加一个环境变量MYSQL_SERVICE_NAME,指向到mysql-svc.yaml中的metadata->name上(原书将未设置此项,采用了Service的默认IP,此坑较深)。
- 运行:
kubectl create -f myweb-deploy.yaml
四、Service of myweb
- 文件名:myweb-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: myweb
spec:
type: NodePort
ports:
- port: 8080
nodePort: 30001
selector:
app: myweb
- 运行:
kubectl create -f mysql-svc.yaml
五、复位脚本:
#!/bin/bash
kubectl delete -f mysql-svc.yaml
kubectl delete -f mysql-deploy.yaml
kubectl delete -f myweb-svc.yaml
kubectl delete -f myweb-deploy.yaml
kubectl create -f mysql-deploy.yaml
kubectl create -f mysql-svc.yaml
kubectl create -f myweb-deploy.yaml
kubectl create -f myweb-svc.yaml
六、汇总到一起
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
spec:
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.7
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "123456"
---
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
ports:
- port: 3306
selector:
app: mysql
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: myweb
spec:
replicas: 2
selector:
matchLabels:
app: myweb
template:
metadata:
labels:
app: myweb
spec:
containers:
- name: myweb
image: kubeguide/tomcat-app:v1
ports:
- containerPort: 8080
env:
- name: MYSQL_SERVICE_NAME
value: "mysql"
---
apiVersion: v1
kind: Service
metadata:
name: myweb
spec:
type: NodePort
ports:
- port: 8080
nodePort: 30001
selector:
app: myweb
网友评论