为了与其他Pod隔离,新建一个命名空间。
kubectl create namespace java-web
1)创建MySQL定义文件sql-rc.yaml,用于启动MySQL服务。
apiVersion: v1
kind: ReplicationController
metadata:
name: mysql
namespace: java-web
spec:
replicas: 1
selector:
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"
上述文件中的spec.template.metadata.labels
指定了该Pod的标签。
注:这里的标签必须与上面的
spec.selector
匹配,否则每当此RC创建了一个无法匹配标签的Pod,系统会认为此系统创建失败,继而不停地尝试创建新的Pod,导致系统进入恶性循环。
2)将其发布到Kubernetes集群
kubectl create -f sql-rc.yaml
查看pod信息
kubectl get pods -n java-web
注:
kubectl get pods
为查看default命名空间里的pods信息,若想查看指定的命名空间需要使用参数-n
指定。
3)创建关联的Service定义文件,并执行create命令
vim sql-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: mysql
namespace: java-web
spec:
ports:
- port: 3306
targetPort: 3306
selector:
app: mysql
vim kubectl create -f sql-svc.yaml
1)创建Tomcat
编写Tomcat对应的文件web-rc.yaml
vim web-rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: tomcat
namespace: java-web
spec:
replicas: 1
selector:
app: tomcat
template:
metadata:
labels:
app: tomcat
spec:
containers:
- name: tomcat
image: docker.io/kubeguide/tomcat-app:v1
ports:
- containerPort: 8080
env:
- name: MYSQL_SERVICE_HOST
value: 10.104.44.202
- name: MYSQL_SERVICE_PORT
value: '3306'
注:上述文件中的
spec.containers.env.name:MYSQL_SERVICE_HOST.value
为自己创建的mysql服务的CLUSTER-IP
,可使用kubectl get service -n java-web
命令查看。
创建Tomcat
kubectl create -f web-rc.yaml
2)创建Tomcat对应的Service
在文件中设置端口转发项,将容器的8080端口转发到本地的30000端口。
apiVersion: v1
kind: Service
metadata:
name: tomcat
namespace: java-web
spec:
type: NodePort
ports:
- port: 8080
targetPort: 8080
nodePort: 30000
selector:
app: tomcat
执行kubectl create
命令进行创建,并查看创建的Service
kubectl create -f web-svc.yaml
kubectl get pods -n java-web
5)查看服务部署的位置
kubectl get pod -n java-web -o wide
可以看到,mysql和tomcat都被部署到slave2上,所以在浏览器输入slave2的IP地址:30000/demo
访问即可。
单击add按钮可向数据库添加数据。