Kubernets_LNMP
namespace为lnmp
表格
website1 和 website11内容应该同步
挂载情况
pod | node2 | 内部 |
---|---|---|
nginx1 | website1 | /data |
confmap1 | /etc/nginx/conf.d/default.conf | |
nginx2 | website2 | /data |
confmap2 | /etc/nginx/conf.d/default.conf | |
php1 | website11 | /data |
php2 | website22 | /data |
master | /mysql/dbmaster/conf | /etc/mysql/conf.d |
/mysql/dbmaster/data | /var/lib/mysql | |
/mysql/dbmaster/log | /var/log/mysql | |
slave | /mysql/dbslave/conf | /etc/mysql/conf.d |
/mysql/dbslave/data | /var/lib/mysql | |
/mysql/dbslave/log | /var/log/mysql |
svc
svc | type | ClusterIp | ports |
---|---|---|---|
dbmaster-service | NodePort | 10.8.229.197 | 3306:30005/TCP |
dbslave-service | ClusterIP | 10.0.206.238 | 3306 |
php1 | ClusterIP | 10.10.119.99 | 9000 |
php2 | ClusterIP | 10.5.87.185 | 9000 |
LVS-service | NodePort | 10.1.4.60 | 80:31499/TCP |
php镜像
vim 1
FROM php:7.0-fpm
# 安装 MySQLi 扩展
RUN docker-php-ext-install mysqli
# 设置工作目录
WORKDIR /var/www/html
# 如果有其他依赖,可以在这里安装
# 暴露 PHP-FPM 端口
EXPOSE 9000
# 启动 PHP-FPM
CMD ["php-fpm"]
操作
docker build -t php7x -f 1 .
docker login --username=aliyun9875230798 registry.cn-hangzhou.aliyuncs.com
docker tag php7x registry.cn-hangzhou.aliyuncs.com/xiaolu77/work:php7x
docker push registry.cn-hangzhou.aliyuncs.com/xiaolu77/work:php7x
如果php的pod拉不起来 可能需要执行docker login这个命令.
yaml
nginx1
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx1
namespace: lnmp
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx1
image: nginx
ports:
- containerPort: 80
volumeMounts:
- name: website1
mountPath: "/data"
- name: nginx-config1
mountPath: "/etc/nginx/conf.d/"
readOnly: true
volumes:
- name: website1
hostPath:
path: /data/website1
- name: nginx-config1
configMap:
name: nginx-config1
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- node2
nginx1configmap
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-config1
namespace: lnmp
data:
default.conf: |
server {
listen 80;
server_name localhost;
location / {
root /data; # 对应主机挂载到nginx容器中的/data代码目录
index index.php index.html index.htm;
}
location ~ \.php(.*)$ {
root /data; # 对应主机挂在到php容器中的/data代码目录
fastcgi_pass 10.244.2.37:9000; # 此地址为php容器的内网ip
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data$fastcgi_script_name;
fastcgi_param PATH_INFO $1; # 此行配置pathinfo,tp框架必须使用pathinfo
include fastcgi_params;
}
}
php1
apiVersion: apps/v1
kind: Deployment
metadata:
name: php1
spec:
replicas: 1
selector:
matchLabels:
app: php1
template:
metadata:
labels:
app: php1
spec:
containers:
- name: php1
image: registry.cn-hangzhou.aliyuncs.com/xiaolu77/work:php7x
ports:
- containerPort: 9000
securityContext:
privileged: true # 开启容器的特权模式
volumeMounts:
- mountPath: "/data"
name: website1-volume
command: ["php-fpm"]
volumes:
- name: website1-volume
hostPath:
path: /data/website11
nodeSelector:
kubernetes.io/hostname: node2
nginx2
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx2
namespace: lnmp
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx2
image: nginx
ports:
- containerPort: 80
volumeMounts:
- name: website
mountPath: "/data"
- name: nginx-config2
mountPath: "/etc/nginx/conf.d/"
readOnly: true
volumes:
- name: website
hostPath:
path: /data/website2
- name: nginx-config2
configMap:
name: nginx-config2
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- node2
nginx2configmap
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-config2
namespace: lnmp
data:
default.conf: |
server {
listen 80;
server_name localhost;
location / {
root /data; # 对应主机挂载到nginx容器中的/data代码目录
index index.php index.html index.htm;
}
location ~ \.php(.*)$ {
root /data; # 对应主机挂在到php容器中的/data代码目录
fastcgi_pass 10.244.2.34:9000; # 此地址为php容器的内网ip
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data$fastcgi_script_name;
fastcgi_param PATH_INFO $1; # 此行配置pathinfo,tp框架必须使用pathinfo
include fastcgi_params;
}
}
php2
apiVersion: apps/v1
kind: Deployment
metadata:
name: php2
spec:
replicas: 1
selector:
matchLabels:
app: php2
template:
metadata:
labels:
app: php2
spec:
containers:
- name: php2
image: registry.cn-hangzhou.aliyuncs.com/xiaolu77/work:php7x
ports:
- containerPort: 9000
securityContext:
privileged: true # 开启容器的特权模式
volumeMounts:
- mountPath: "/data"
name: website2-volume
command: ["php-fpm"]
volumes:
- name: website2-volume
hostPath:
path: /data/website22
nodeSelector:
kubernetes.io/hostname: node2
php1svc
apiVersion: v1
kind: Service
metadata:
name: php2
spec:
selector:
app: php2
ports:
- protocol: TCP
port: 9000
targetPort: 9000
type: ClusterIP
php2svc
apiVersion: v1
kind: Service
metadata:
name: php2
spec:
selector:
app: php2
ports:
- protocol: TCP
port: 9000
targetPort: 9000
type: ClusterIP
mysql-master
apiVersion: apps/v1
kind: Deployment
metadata:
name: dbmaster
spec:
replicas: 1
selector:
matchLabels:
app: dbmaster
template:
metadata:
labels:
app: dbmaster
spec:
nodeSelector:
kubernetes.io/hostname: node2 # 指定要调度到的节点
containers:
- name: dbmaster
image: mysql:5.7
env:
- name: MYSQL_ROOT_PASSWORD
value: "1"
ports:
- containerPort: 3306
securityContext:
privileged: true # 开启容器的特权模式
volumeMounts:
- name: log-volume
mountPath: /var/log/mysql
- name: data-volume
mountPath: /var/lib/mysql
- name: conf-volume
mountPath: /etc/mysql/conf.d
volumes:
- name: log-volume
hostPath:
path: /mysql/dbmaster/log
- name: data-volume
hostPath:
path: /mysql/dbmaster/data
- name: conf-volume
hostPath:
path: /mysql/dbmaster/conf
mysql-slave
apiVersion: apps/v1
kind: Deployment
metadata:
name: dbslave
spec:
replicas: 1
selector:
matchLabels:
app: dbslave
template:
metadata:
labels:
app: dbslave
spec:
nodeSelector:
kubernetes.io/hostname: node2 # 指定要调度到的节点
containers:
- name: dbslave
image: mysql:5.7
env:
- name: MYSQL_ROOT_PASSWORD
value: "1"
ports:
- containerPort: 3306
securityContext:
privileged: true # 开启容器的特权模式
volumeMounts:
- name: log-volume
mountPath: /var/log/mysql
- name: data-volume
mountPath