原生Kubernetes容器云平台应用部署WordPress
Posted 人间忽晚,山河以秋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原生Kubernetes容器云平台应用部署WordPress相关的知识,希望对你有一定的参考价值。
学习目标:
使用YAML文件部署WordPress服务
学习内容:
在k8s运行WordPress的好处
(1)在已有集群的情况下,安装非常简单
(2)可靠性更高
(3)规模可以伸缩
(4)可以在多个云之间更为容易地迁移
Kubernetes上运行WordPress是一个可伸缩性服务运行于云原生集群的典型案例
1、 新建namespace(命名空间)
新建blog namespace ,将应用都部署到blog这个命名空间的下面
[root@master ~]# kubectl create namespace blog
namespace/blog created
2、 创建 mysql的Deployment对象
编写文件 wordpress-db.yaml
一定要注意YAML的编写格式,还有缩进,不然会报错
[root@master ~]# cat wordpress-db.yaml
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: mysql-deploy
namespace: blog
labels:
app: mysql
spec:
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.6 #使用mysql:5.7镜像会报错
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3306
name: dbport
env:
- name: MYSQL_ROOT_PASSWORD
value: rootPassW0rd
- name: MYSQL_DATABASE
value: wordpress
- name: MYSQL_USER
value: wordpress
- name: MYSQL_PASSWORD
value: wordpress
volumeMounts:
- name: db
mountPath: /var/lib/mysql
volumes:
- name: db
hostPath:
path: /var/lib/mysql
---
apiVersion: v1
kind: Service
metadata:
name: mysql
namespace: blog
spec:
selector:
app: mysql
ports:
- name: mysqlport
protocol: TCP
port: 3306
targetPort: dbport
创建上面的文件
[root@master ~]# kubectl create -f wordpress-db.yaml
deployment.apps/mysql-deploy created
service/mysql created
查看一下MySQL服务的详细信息
[root@master ~]# kubectl describe svc mysql -n blog
Name: mysql
Namespace: blog
Labels: <none>
Annotations: <none>
Selector: app=mysql
Type: ClusterIP
IP: 10.111.15.153
Port: mysqlport 3306/TCP
TargetPort: dbport/TCP
Endpoints: 10.24.9.15:3306
Session Affinity: None
Events: <none>
可以看到Endpoints部分匹配到了一个Pod,生成了一个clusterIP为10.111.15.153,现在就可以通过这个clusterIP加上定义的3306端口访问MySQL服务了。
3、 创建Wordpress服务
创建Wordpress服务,将上面的wordpress的Pod转换成Deployment对象
注意填写文档中的MySQL服务的ip,不然可能会出现数据库连接错误
[root@master ~]# cat wordpress.yaml
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: wordpress-deploy
namespace: blog
labels:
app: wordpress
spec:
template:
metadata:
labels:
app: wordpress
spec:
containers:
- name: wordpress
image: wordpress
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
name: wdport
env:
- name: WORDPRESS_DB_HOST
value: 10.111.15.153:3306 # 此处的IP,是mysql svc的clusterIP
- name: WORDPRESS_DB_USER
value: wordpress
- name: WORDPRESS_DB_PASSWORD
value: wordpress
---
apiVersion: v1
kind: Service
metadata:
name: wordpress
namespace: blog
spec:
type: NodePort
selector:
app: wordpress
ports:
- name: wordpressport
protocol: TCP
port: 80
targetPort: wdport
注意:要添加属性type: NodePort,然后创建wordpress.yaml文件。
[root@master ~]# kubectl create -f wordpress.yaml
deployment.apps/wordpress-deploy created
service/wordpress created
4、 编写YAML文件
编写YAML文件wordpress-pod.yaml。
[root@master ~]# cat wordpress-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: wordpress
namespace: blog
spec:
containers:
- name: wordpress
image: wordpress
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
name: wdport
env:
- name: WORDPRESS_DB_HOST
value: localhost:3306
- name: WORDPRESS_DB_USER
value: wordpress
- name: WORDPRESS_DB_PASSWORD
value: wordpress
- name: mysql
image: mysql:5.6
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3306
name: dbport
env:
- name: MYSQL_ROOT_PASSWORD
value: rootPassW0rd
- name: MYSQL_DATABASE
value: wordpress
- name: MYSQL_USER
value: wordpress
- name: MYSQL_PASSWORD
value: wordpress
volumeMounts:
- name: db
mountPath: /var/lib/mysql
volumes:
- name: db
hostPath:
path: /var/lib/mysql
注意:这里针对MySQL这个容器做了一个数据卷的挂载,这是为了能够将MySQL的数据能够持久化到节点上,这样下次MySQL容器重启过后数据不至于丢失。
5、创建pod
[root@master ~]# kubectl create -f wordpress-pod.yaml
pod/wordpress created
6、访问服务
查看svc
[root@master ~]# kubectl get svc -n blog
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
mysql ClusterIP 10.111.15.153 <none> 3306/TCP 7m53s
wordpress NodePort 10.104.80.117 <none> 80:32012/TCP 76s
可以看到Wordpress服务产生了一个32012的端口,现在通过任意节点的NodeIP加上32012端口,就可以访问Wordpress应用了
学习时间:
2021年6月11日
以上是关于原生Kubernetes容器云平台应用部署WordPress的主要内容,如果未能解决你的问题,请参考以下文章