使kubernetes能够通过nfs创建持久卷

的是翻译以下为中文,只需一个选项:

目标

让自行搭建的 Kubernetes 环境能够通过 NFS 创建持久卷。将主节点设为 NFS 服务器。

这个问题很困难,但我们一定会找到解决办法。

非常感谢您将信息总结得如此清晰易懂。

步驟

在Node侧的工作

# worker nodeにnfs clientをinstall
$ sudo apt install nfs-common

在主机端的工作

我决定模仿Ref的做法,并将master设为nfs服务器。
我的k8s群集所在的子网环境是172.31.0.0/16,因此将其作为设置。

# NFSサーバのインストール
$ sudo apt install nfs-kernel-server

# NFSで利用するディレクトリの作成
$ sudo mkdir -p /mnt/share/nfs

# NFSサーバ用の設定
$ echo "/mnt/share/nfs  172.31.0.0/16(rw,async,crossmnt,no_root_squash,no_subtree_check)" | sudo tee -a /etc/exports

# 設定が完了したら以下を実行
sudo exportfs -ra

# NFSサーバの起動
$ sudo systemctl start nfs-server.service
$ sudo systemctl enable nfs-server.service

确认行动

为了确认是否能成功运行,我创建了PV和PVC,使用了以下Ref的WordPress进行了功能验证。

操作步骤

# PV用のdirectoryを作成
$ sudo mkdir /mnt/share/nfs/pv0001
$ sudo mkdir /mnt/share/nfs/pv0002

# pvのmanifestを2つ作成
$ cat pv0001.yaml 
kind: PersistentVolume
apiVersion: v1
metadata:
  name: pv0001
spec:
  capacity:
    storage: 20Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: slow
  nfs:
    server: 172.31.xx.xx
    path: /mnt/share/nfs/pv0001

ubuntu@ip-172-31-43-82:~/wordpress_mysql$ cat pv0002.yaml 
kind: PersistentVolume
apiVersion: v1
metadata:
  name: pv0002
spec:
  capacity:
    storage: 20Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: slow
  nfs:
    server: 172.31.xx.xx
    path: /mnt/share/nfs/pv0002

# mysqlのmanifestを作成 (refのものからpvcの部分を修正)
ubuntu@ip-172-31-43-82:~/wordpress_mysql$ cat mysql-deployment.yaml
apiVersion: v1
kind: Service
metadata:
  name: wordpress-mysql
  labels:
    app: wordpress
spec:
  ports:
    - port: 3306
  selector:
    app: wordpress
    tier: mysql
  clusterIP: None
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
  labels:
    app: wordpress
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
  storageClassName: slow   # storageClassNameをpvと合わせないとpvを掴んでくれない
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress-mysql
  labels:
    app: wordpress
spec:
  selector:
    matchLabels:
      app: wordpress
      tier: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: wordpress
        tier: mysql
    spec:
      containers:
      - image: mysql:5.6
        name: mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-pass
              key: password
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pv-claim

# wordpressのdeploymentの作成
ubuntu@ip-172-31-43-82:~/wordpress_mysql$ cat wordpress-deployment.yaml
apiVersion: v1
kind: Service
metadata:
  name: wordpress
  labels:
    app: wordpress
spec:
  ports:
    - port: 80
  selector:
    app: wordpress
    tier: frontend
  type: LoadBalancer
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: wp-pv-claim
  labels:
    app: wordpress
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
  storageClassName: slow  # ここも同じ
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress
  labels:
    app: wordpress
spec:
  selector:
    matchLabels:
      app: wordpress
      tier: frontend
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: wordpress
        tier: frontend
    spec:
      containers:
      - image: wordpress:4.8-apache
        name: wordpress
        env:
        - name: WORDPRESS_DB_HOST
          value: wordpress-mysql
        - name: WORDPRESS_DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-pass
              key: password
        ports:
        - containerPort: 80
          name: wordpress
        volumeMounts:
        - name: wordpress-persistent-storage
          mountPath: /var/www/html
      volumes:
      - name: wordpress-persistent-storage
        persistentVolumeClaim:
          claimName: wp-pv-claim

# kustomiationを作成
ubuntu@ip-172-31-43-82:~/wordpress_mysql$ cat kustomization.yaml
secretGenerator:
- name: mysql-pass
  literals:
  - password=xxxxxxxx    # passwordを設定
resources:
  - mysql-deployment.yaml
  - wordpress-deployment.yaml
ubuntu@ip-172-31-43-82:~/wordpress_mysql$

试着部署一下

$ kubectl apply -f pv0001.yaml
$ kubectl apply -f pv0002.yaml
$ kubectl apply -k .

# 状態確認
$ kubectl get pv
NAME     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                    STORAGECLASS   REASON   AGE
pv0001   20Gi       RWO            Retain           Bound    default/mysql-pv-claim   slow                    12m
pv0002   20Gi       RWO            Retain           Bound    default/wp-pv-claim      slow                    12m

$ kubectl get pvc
NAME             STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
mysql-pv-claim   Bound    pv0001   20Gi       RWO            slow           11m
wp-pv-claim      Bound    pv0002   20Gi       RWO            slow           11m

$ kubectl get pod
NAME                              READY   STATUS    RESTARTS   AGE
wordpress-5cd87d7fbb-v6m8t        1/1     Running   0          12m
wordpress-mysql-84c759b56-qb72r   1/1     Running   0          12m
$
广告
将在 10 秒后关闭
bannerAds