K8S 使用NFS存储 动态创建 PVC/PV 并通过 Statefulset 部署 Nginx

K8S 使用NFS存储 动态创建 PVC/PV

https://blog.csdn.net/mshxuyi/article/details/115314108

1、创建

vim statefulset-nginx.yaml

# 内容
apiVersion: v1
kind: Service
metadata:
  name: nginx-headless-svc
spec:
  ports:
  - protocol: TCP
    port: 80
  clusterIP: None
  selector:
    app: nginx-headless
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: nginx-headless
spec:
  selector:
    matchLabels:
      app: nginx-headless
  serviceName: nginx-headless-svc
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx-headless
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
        volumeMounts:
        - name: html
          mountPath: "/usr/share/nginx/html"
  volumeClaimTemplates:
  - metadata:
      name: html
    spec:
      accessModes: ["ReadWriteOnce"]
      storageClassName: "nfs-storage"
      resources:
        requests:
          storage: 1Gi

2、查看 PVC,自动创建 2个 PVC,并绑定到下面创建的 PV,名称是 volumeClaimTemplates + StatefulSet + -{0...N} 的 Name 组合

kubectl get pvc

# 显示
NAME                    STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
html-nginx-headless-0   Bound    pvc-50c169b5-f546-49b3-95d5-6ad364a57546   1Gi        RWO            nfs-storage    11s
html-nginx-headless-1   Bound    pvc-321fba4e-0cf2-4422-a3ff-0022c3acbe5f   1Gi        RWO            nfs-storage    5s

3、查看 PV,自动创建 2 个 PV

kubectl get pv

# 显示
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                           STORAGECLASS   REASON   AGE
pvc-321fba4e-0cf2-4422-a3ff-0022c3acbe5f   1Gi        RWO            Delete           Bound    default/html-nginx-headless-1   nfs-storage             96s
pvc-50c169b5-f546-49b3-95d5-6ad364a57546   1Gi        RWO            Delete           Bound    default/html-nginx-headless-0   nfs-storage             102s

4、查看 SVC, 这是一个无头服务,Cluster-IP 为 None

kubectl get svc -o wide

# 显示
NAME                     TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE     SELECTOR
nginx-headless-svc       ClusterIP   None             <none>        80/TCP           8m44s   app=nginx-headless

5、访问

# 进入 NFS 服务器创建数据

echo "hello,nginx-headless-0" > /nfsdata/default-html-nginx-headless-0-pvc-50c169b5-f546-49b3-95d5-6ad364a57546/index.html

echo "hello,nginx-headless-1" > /nfsdata/default-html-nginx-headless-1-pvc-321fba4e-0cf2-4422-a3ff-0022c3acbe5f/index.html


# 创建一个 POD 访问集群
kubectl run busybox --image=busybox -it


# 访问集群内的指定 POD, 服务之间通过 podname + headless service name 进行通信
wget -q -O- nginx-headless-0.nginx-headless-svc
# 成功
hello,nginx-headless-0


# 也可以直接通过 SVC 名访问
wget -q -O- nginx-headless-svc

# 这时会随机显示
/ # wget -q -O- nginx-headless-svc
hello,nginx-headless-1
/ # wget -q -O- nginx-headless-svc
hello,nginx-headless-0

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用NFS创建PVPVC,并将PVC挂到Nginx应用中的完整配置文件: 1. 创建NFS服务器和共享目录 在NFS服务器上创建一个共享目录,并将其导出为NFS共享。 2. 创建PVPVC 创建PVPVC的yaml文件,示例: ```yaml apiVersion: v1 kind: PersistentVolume metadata: name: nfs-pv spec: capacity: storage: 10Gi accessModes: - ReadWriteMany nfs: server: nfs-server-ip path: /path/to/nfs/share --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nfs-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi ``` 3. 创建Nginx Deployment和Service 创建Nginx Deployment和Service的yaml文件,示例: ```yaml kind: Deployment apiVersion: apps/v1 metadata: name: nginx-deployment spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 volumeMounts: - name: nfs-volume mountPath: "/usr/share/nginx/html" volumes: - name: nfs-volume persistentVolumeClaim: claimName: nfs-pvc --- apiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx ports: - name: http port: 80 targetPort: 80 type: LoadBalancer ``` 4. 应用配置文件 应用配置文件的yaml文件,示例: ```yaml apiVersion: v1 kind: ConfigMap metadata: name: nginx-config data: nginx.conf: | worker_processes 1; events { worker_connections 1024; } http { server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.html; } } } --- apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 volumeMounts: - name: nfs-volume mountPath: "/usr/share/nginx/html" - name: nginx-config mountPath: "/etc/nginx/nginx.conf" subPath: nginx.conf volumes: - name: nfs-volume persistentVolumeClaim: claimName: nfs-pvc - name: nginx-config configMap: name: nginx-config ``` 其中,应用配置文件中的ConfigMap可自定义Nginx配置。 5. 应用配置文件 将以上配置文件应用到Kubernetes集群中: ``` kubectl apply -f pv-pvc.yaml kubectl apply -f nginx.yaml kubectl apply -f nginx-config.yaml ``` 这样,就完成了使用NFS创建PVPVC,并将PVC挂到Nginx应用中的完整配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值