网站首页 > 技术教程 正文
接上篇Kubernetes 中部署 NFS Provisioner 为 NFS 提供动态分配卷(上篇)
一、nginx 使用 nfs 静态 PV
1、静态 nfs-static-nginx-rc.yaml
##清理资源 kubectl delete -f nfs-static-nginx-rc.yaml -n test cat >nfs-static-nginx-rc.yaml<<\EOF ##创建namespace --- apiVersion: v1 kind: Namespace metadata: name: test labels: name: test ##创建nfs-pv --- apiVersion: v1 kind: PersistentVolume metadata: name: nfs-pv labels: pv: nfs-pv spec: capacity: storage: 10Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain storageClassName: nfs # 注意这里使用nfs的storageClassName,如果没改k8s的默认storageClassName的话,这里可以省略 nfs: path: /data/nfs/nginx/ server: 10.198.1.155 ##创建nfs-pvc --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nfs-pvc namespace: test labels: pvc: nfs-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi storageClassName: nfs selector: matchLabels: pv: nfs-pv ##部署应用nginx --- apiVersion: v1 kind: ReplicationController metadata: name: nginx-test namespace: test labels: name: nginx-test spec: replicas: 2 selector: name: nginx-test template: metadata: labels: name: nginx-test spec: containers: - name: nginx-test image: docker.io/nginx volumeMounts: - mountPath: /usr/share/nginx/html name: nginx-data ports: - containerPort: 80 volumes: - name: nginx-data persistentVolumeClaim: claimName: nfs-pvc ##创建service --- apiVersion: v1 kind: Service metadata: namespace: test name: nginx-test labels: name: nginx-test spec: type: NodePort ports: - port: 80 protocol: TCP targetPort: 80 name: http nodePort: 30080 selector: name: nginx-test EOF ##创建资源 kubectl apply -f nfs-static-nginx-rc.yaml -n test ##查看pv资源 kubectl get pv -n test --show-labels ##查看pvc资源 kubectl get pvc -n test --show-labels ##查看pod $ kubectl get pods -n test NAME READY STATUS RESTARTS AGE nginx-test-r4n2j 1/1 Running 0 54s nginx-test-zstf5 1/1 Running 0 54s #可以看到,nginx应用已经部署成功。 #nginx应用的数据目录是使用的nfs共享存储,我们在nfs共享的目录里加入index.html文件,然后再访问nginx-service暴露的端口 #切换到到nfs-server服务器上 echo "Test NFS Share discovery with nfs-static-nginx-rc" > /data/nfs/nginx/index.html #在浏览器上访问kubernetes主节点的 http://master:30080,就能访问到这个页面内容了
2、静态 nfs-static-nginx-deployment.yaml
##清理资源 kubectl delete -f nfs-static-nginx-deployment.yaml -n test cat >nfs-static-nginx-deployment.yaml<<\EOF ##创建namespace --- apiVersion: v1 kind: Namespace metadata: name: test labels: name: test ##创建nfs-pv --- apiVersion: v1 kind: PersistentVolume metadata: name: nfs-pv labels: pv: nfs-pv spec: capacity: storage: 10Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain storageClassName: nfs # 注意这里使用nfs的storageClassName,如果没改k8s的默认storageClassName的话,这里可以省略 nfs: path: /data/nfs/nginx/ server: 10.198.1.155 ##创建nfs-pvc --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nfs-pvc namespace: test labels: pvc: nfs-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi storageClassName: nfs selector: matchLabels: pv: nfs-pv ##部署应用nginx --- apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment namespace: test labels: name: nginx-test spec: replicas: 2 selector: matchLabels: name: nginx-test template: metadata: labels: name: nginx-test spec: containers: - name: nginx-test image: docker.io/nginx volumeMounts: - mountPath: /usr/share/nginx/html name: nginx-data ports: - containerPort: 80 volumes: - name: nginx-data persistentVolumeClaim: claimName: nfs-pvc ##创建service --- apiVersion: v1 kind: Service metadata: namespace: test name: nginx-test labels: name: nginx-test spec: type: NodePort ports: - port: 80 protocol: TCP targetPort: 80 name: http nodePort: 30080 selector: name: nginx-test EOF ##创建资源 kubectl apply -f nfs-static-nginx-deployment.yaml -n test ##查看pv资源 kubectl get pv -n test --show-labels ##查看pvc资源 kubectl get pvc -n test --show-labels ##查看pod $ kubectl get pods -n test NAME READY STATUS RESTARTS AGE nginx-deployment-64d6f78cdf-8bw8t 1/1 Running 0 55s nginx-deployment-64d6f78cdf-n5n4q 1/1 Running 0 55s #可以看到,nginx应用已经部署成功。 #nginx应用的数据目录是使用的nfs共享存储,我们在nfs共享的目录里加入index.html文件,然后再访问nginx-service暴露的端口 #切换到到nfs-server服务器上 echo "Test NFS Share discovery with nfs-static-nginx-deployment" > /data/nfs/nginx/index.html #在浏览器上访问kubernetes主节点的 http://master:30080,就能访问到这个页面内容了
3、nginx 多目录挂载
- PV 和 PVC 是一一对应关系,当有 PV 被某个 PVC 所占用时,会显示 banding,其它 PVC 不能再使用绑定过的 PV。
- PVC 一旦绑定 PV,就相当于是一个存储卷,此时 PVC 可以被多个 Pod 所使用。(PVC支不支持被多个 Pod 访问,取决于访问模型 accessMode 的定义)。
- PVC 若没有找到合适的 PV 时,则会处于 pending 状态。
- PV 是属于集群级别的,不能定义在名称空间中。
- PVC 时属于名称空间级别的。
##清理资源 kubectl delete -f nfs-static-nginx-dp-many.yaml -n test cat >nfs-static-nginx-dp-many.yaml<<\EOF ##创建namespace --- apiVersion: v1 kind: Namespace metadata: name: test labels: name: test ##创建nginx-data-pv --- apiVersion: v1 kind: PersistentVolume metadata: name: nginx-data-pv labels: pv: nginx-data-pv spec: capacity: storage: 50Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain storageClassName: nfs # 注意这里使用nfs的storageClassName,如果没改k8s的默认storageClassName的话,这里可以省略 nfs: path: /data/nfs/nginx/ server: 10.198.1.155 ##创建nginx-etc-pv --- apiVersion: v1 kind: PersistentVolume metadata: name: nginx-etc-pv labels: pv: nginx-etc-pv spec: capacity: storage: 50Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain storageClassName: nfs # 注意这里使用nfs的storageClassName,如果没改k8s的默认storageClassName的话,这里可以省略 nfs: path: /data/nfs/nginx/ server: 10.198.1.155 ##创建pvc名字为nfs-nginx-data,存放数据 --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nfs-nginx-data namespace: test labels: pvc: nfs-nginx-data spec: accessModes: - ReadWriteMany resources: requests: storage: 50Gi storageClassName: nfs selector: matchLabels: pv: nginx-data-pv ##创建pvc名字为nfs-nginx-etc,存放配置文件 --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nfs-nginx-etc namespace: test labels: pvc: nfs-nginx-etc spec: accessModes: - ReadWriteMany resources: requests: storage: 50Gi storageClassName: nfs selector: matchLabels: pv: nginx-etc-pv ##部署应用nginx --- apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment namespace: test labels: name: nginx-test spec: replicas: 2 selector: matchLabels: name: nginx-test template: metadata: labels: name: nginx-test spec: containers: - name: nginx-test image: docker.io/nginx volumeMounts: - mountPath: /usr/share/nginx/html name: nginx-data # - mountPath: /etc/nginx #--这里需要注意,如果是这么挂载,那么需要事先现在/data/nfs/nginx/目录下把nginx的完整配置提前拷贝好 # name: nginx-etc ports: - containerPort: 80 volumes: - name: nginx-data persistentVolumeClaim: claimName: nfs-nginx-data # - name: nginx-etc # persistentVolumeClaim: # claimName: nfs-nginx-etc ##创建service --- apiVersion: v1 kind: Service metadata: namespace: test name: nginx-test labels: name: nginx-test spec: type: NodePort ports: - port: 80 protocol: TCP targetPort: 80 name: http nodePort: 30080 selector: name: nginx-test EOF ##创建资源 kubectl apply -f nfs-static-nginx-dp-many.yaml -n test ##查看pv资源 kubectl get pv -n test --show-labels ##查看pvc资源 kubectl get pvc -n test --show-labels ##查看pod $ kubectl get pods -n test NAME READY STATUS RESTARTS AGE nginx-deployment-64d6f78cdf-8bw8t 1/1 Running 0 55s nginx-deployment-64d6f78cdf-n5n4q 1/1 Running 0 55s ##进入容器 kubectl exec -it nginx-deployment-f687cdf47-xncj8 -n test /bin/bash #可以看到,nginx应用已经部署成功。 #nginx应用的数据目录是使用的nfs共享存储,我们在nfs共享的目录里加入index.html文件,然后再访问nginx-service暴露的端口 #切换到到nfs-server服务器上 echo "Test NFS Share discovery with nfs-static-nginx-dp-many" > /data/nfs/nginx/index.html #在浏览器上访问kubernetes主节点的 http://master:30080,就能访问到这个页面内容了
4、参数 namespace
##清理资源
export NAMESPACE="mos-namespace"
kubectl delete -f nfs-static-nginx-dp-many.yaml -n ${NAMESPACE}
cat >nfs-static-nginx-dp-many.yaml<<-EOF
##创建namespace
---
apiVersion: v1
kind: Namespace
metadata:
name: ${NAMESPACE}
labels:
name: ${NAMESPACE}
##创建nginx-data-pv
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: nginx-data-pv
labels:
pv: nginx-data-pv
spec:
capacity:
storage: 50Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs # 注意这里使用nfs的storageClassName,如果没改k8s的默认storageClassName的话,这里可以省略
nfs:
path: /data/nfs/nginx/
server: 10.198.1.155
##创建nginx-log-pv
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: nginx-log-pv
labels:
pv: nginx-log-pv
spec:
capacity:
storage: 50Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs # 注意这里使用nfs的storageClassName,如果没改k8s的默认storageClassName的话,这里可以省略
nfs:
path: /data/nfs/nginx/
server: 10.198.1.155
##创建pvc名字为nfs-nginx-data,存放数据
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: nfs-nginx-data
labels:
pvc: nfs-nginx-data
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 50Gi
storageClassName: nfs
selector:
matchLabels:
pv: nginx-data-pv
##创建pvc名字为nfs-nginx-log,存放日志文件
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: nfs-nginx-log
labels:
pvc: nfs-nginx-log
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 50Gi
storageClassName: nfs
selector:
matchLabels:
pv: nginx-log-pv
##部署应用nginx
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
name: nginx-test
spec:
replicas: 2
selector:
matchLabels:
name: nginx-test
template:
metadata:
labels:
name: nginx-test
spec:
containers:
- name: nginx-test
image: docker.io/nginx
volumeMounts:
- mountPath: /usr/share/nginx/html
name: nginx-data
- mountPath: /var/log/nginx
name: nginx-log
ports:
- containerPort: 80
volumes:
- name: nginx-data
persistentVolumeClaim:
claimName: nfs-nginx-data
- name: nginx-log
persistentVolumeClaim:
claimName: nfs-nginx-log
##创建service
---
apiVersion: v1
kind: Service
metadata:
name: nginx-test
labels:
name: nginx-test
spec:
type: NodePort
ports:
- port: 80
protocol: TCP
targetPort: 80
name: http
nodePort: 30180
selector:
name: nginx-test
EOF
##创建资源
kubectl apply -f nfs-static-nginx-dp-many.yaml -n ${NAMESPACE}二、nginx 使用 nfs 动态 PV
https://github.com/Lancger/opsfull/blob/master/components/external-storage/3%E3%80%81%E5%8A%A8%E6%80%81%E7%94%B3%E8%AF%B7PV%E5%8D%B7.md
1、动态 nfs-dynamic-nginx.yaml
通过参数控制在哪个命名空间创建
##清理资源 kubectl delete -f nfs-static-nginx-rc.yaml -n test cat >nfs-static-nginx-rc.yaml<<\EOF ##创建namespace --- apiVersion: v1 kind: Namespace metadata: name: test labels: name: test ##创建nfs-pv --- apiVersion: v1 kind: PersistentVolume metadata: name: nfs-pv labels: pv: nfs-pv spec: capacity: storage: 10Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain storageClassName: nfs # 注意这里使用nfs的storageClassName,如果没改k8s的默认storageClassName的话,这里可以省略 nfs: path: /data/nfs/nginx/ server: 10.198.1.155 ##创建nfs-pvc --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nfs-pvc namespace: test labels: pvc: nfs-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi storageClassName: nfs selector: matchLabels: pv: nfs-pv ##部署应用nginx --- apiVersion: v1 kind: ReplicationController metadata: name: nginx-test namespace: test labels: name: nginx-test spec: replicas: 2 selector: name: nginx-test template: metadata: labels: name: nginx-test spec: containers: - name: nginx-test image: docker.io/nginx volumeMounts: - mountPath: /usr/share/nginx/html name: nginx-data ports: - containerPort: 80 volumes: - name: nginx-data persistentVolumeClaim: claimName: nfs-pvc ##创建service --- apiVersion: v1 kind: Service metadata: namespace: test name: nginx-test labels: name: nginx-test spec: type: NodePort ports: - port: 80 protocol: TCP targetPort: 80 name: http nodePort: 30080 selector: name: nginx-test EOF ##创建资源 kubectl apply -f nfs-static-nginx-rc.yaml -n test ##查看pv资源 kubectl get pv -n test --show-labels ##查看pvc资源 kubectl get pvc -n test --show-labels ##查看pod $ kubectl get pods -n test NAME READY STATUS RESTARTS AGE nginx-test-r4n2j 1/1 Running 0 54s nginx-test-zstf5 1/1 Running 0 54s #可以看到,nginx应用已经部署成功。 #nginx应用的数据目录是使用的nfs共享存储,我们在nfs共享的目录里加入index.html文件,然后再访问nginx-service暴露的端口 #切换到到nfs-server服务器上 echo "Test NFS Share discovery with nfs-static-nginx-rc" > /data/nfs/nginx/index.html #在浏览器上访问kubernetes主节点的 http://master:30080,就能访问到这个页面内容了
参考文档:
- https://kubernetes.io/zh/docs/tasks/run-application/run-stateless-application-deployment/
- https://blog.51cto.com/ylw6006/2071845 在kubernetes集群中运行nginx
github 地址:https://url.cn/5osLAuY
猜你喜欢
- 2024-10-10 推荐几个开源的个人独立博客系统(开源个人博客源码下载)
- 2024-10-10 FreeMarker-静态模板的使用与生成
- 2024-10-10 使用nginx做前端服务器可以设置类似的静态文件客户端缓存
- 2024-09-12 「nginx」十、nginx的location配置详解
- 2024-09-12 使用nginx部署前端html等静态页面
- 2024-09-12 Nginx配置文件(nginx配置文件位置)
- 2024-09-12 基于nginx反向代理实现网站静态页面与动态页面自动切换
- 2024-09-12 nginx学习总结(nginx入门教程)
- 2024-09-12 除了负载均衡,Nginx还可以做很多,限流、缓存、黑白名单等
- 2024-09-12 Nginx网站服务(nginxweb服务器)
欢迎 你 发表评论:
- 10-23Excel计算工龄和年份之差_excel算工龄的公式year
- 10-23Excel YEARFRAC函数:时间的"年份比例尺"详解
- 10-23最常用的10个Excel函数,中文解读,动图演示,易学易用
- 10-23EXCEL中如何计算截止到今日(两个时间中)的时间
- 10-2390%人不知道的Excel神技:DATEDIF 精准计算年龄,告别手动算错!
- 10-23计算工龄及工龄工资(90%的人搞错了):DATE、DATEDIF组合应用
- 10-23Excel中如何计算工作日天数?用这两个函数轻松计算,附新年日历
- 10-23怎样快速提取单元格中的出生日期?用「Ctrl+E」批量搞定
- 最近发表
-
- Excel计算工龄和年份之差_excel算工龄的公式year
- Excel YEARFRAC函数:时间的"年份比例尺"详解
- 最常用的10个Excel函数,中文解读,动图演示,易学易用
- EXCEL中如何计算截止到今日(两个时间中)的时间
- 90%人不知道的Excel神技:DATEDIF 精准计算年龄,告别手动算错!
- 计算工龄及工龄工资(90%的人搞错了):DATE、DATEDIF组合应用
- Excel中如何计算工作日天数?用这两个函数轻松计算,附新年日历
- 怎样快速提取单元格中的出生日期?用「Ctrl+E」批量搞定
- Excel日期函数之DATEDIF函数_excel函数datedif在哪里
- Excel函数-DATEDIF求司龄_exceldatedif函数计算年龄
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)

本文暂时没有评论,来添加一个吧(●'◡'●)