8

构建 Kubernates PV

 1 year ago
source link: https://www.jansora.com/notebook/107538
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

构建 Kubernates PV闲文杂记构建 Kubernates PV 导航前往主站应用闲文杂记代码在线代码魔方房价浅析专栏戎码一生

参考 https://kubernetes.feisky.xyz/concepts/objects/persistent-volume#volume-sheng-ming-zhou-qi

参考 https://blog.csdn.net/liumiaocn/article/details/103388607

一个搭建好的 nfs 系统, 并确定能使用

root@l2:~# df -h | grep mnt
10.0.4.44:/z6dajk13   10G   32M   10G   1% /mnt/nfs
root@l2:~# cd /mnt/nfs
root@l2:/mnt/nfs# ls -l
total 8
-rw-r--r-- 1 root root    4 May 29 17:16 a.txt
drwxr-xr-x 2 root root    6 May 29 17:30 k8s
drwxr-xr-x 5 root root 4096 May 29 18:53 kubernates
root@l2:/mnt/nfs# rm -rf k8s
root@l2:/mnt/nfs# echo 'bb' >> b.txt
root@l2:/mnt/nfs# cat b.txt 
bb
root@l2:/mnt/nfs# 

构建 nfs client

安装 nfs client.

StorageClass for Persistent Volumeclassmy-nfsclient

helm install my-nfsclient azure/nfs-client-provisioner --set nfs.server=10.0.4.44 --set nfs.path=/z6dajk13/kubernates

检测状态 kubectl get pods

root@l2:/mnt/nfs# kubectl get pods
NAME                                                   READY   STATUS             RESTARTS   AGE
my-nfsclient-nfs-client-provisioner-7b7fbc4c58-pvm6z   1/1     Running            0          25m

查看 pod 详情 kubectl describe pods my-nfsclient-nfs-client-provisioner-7b7fbc4c58-pvm6z


root@l2:/mnt/nfs# kubectl describe pods my-nfsclient-nfs-client-provisioner-7b7fbc4c58-pvm6z
Name:         my-nfsclient-nfs-client-provisioner-7b7fbc4c58-pvm6z
Namespace:    default
Priority:     0
Node:         l4/10.0.4.12
Start Time:   Sun, 29 May 2022 18:35:31 +0800
Labels:       app=nfs-client-provisioner
              pod-template-hash=7b7fbc4c58
              release=my-nfsclient
Annotations:  <none>
Status:       Running
IP:           10.244.2.9
IPs:
  IP:           10.244.2.9
Controlled By:  ReplicaSet/my-nfsclient-nfs-client-provisioner-7b7fbc4c58
Containers:
  nfs-client-provisioner:
    Container ID:   docker://6e77341dcef10b16c9d6b23bee30ea4e45204f7b9791b8d807d75cb10f3cf449
    Image:          quay.io/external_storage/nfs-client-provisioner:v3.1.0-k8s1.11
    Image ID:       docker-pullable://quay.io/external_storage/nfs-client-provisioner@sha256:cdbccbf53d100b36eae744c1cb07be3d0d22a8e64bb038b7a3808dd29c174661
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Sun, 29 May 2022 18:37:27 +0800
    Ready:          True
    Restart Count:  0
    Environment:
      PROVISIONER_NAME:  cluster.local/my-nfsclient-nfs-client-provisioner
      NFS_SERVER:        10.0.4.44
      NFS_PATH:          /z6dajk13/kubernates
    Mounts:
      /persistentvolumes from nfs-client-root (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from my-nfsclient-nfs-client-provisioner-token-69ccz (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  nfs-client-root:
    Type:      NFS (an NFS mount that lasts the lifetime of a pod)
    Server:    10.0.4.44
    Path:      /z6dajk13/kubernates
    ReadOnly:  false
  my-nfsclient-nfs-client-provisioner-token-69ccz:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  my-nfsclient-nfs-client-provisioner-token-69ccz
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                 node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  27m   default-scheduler  Successfully assigned default/my-nfsclient-nfs-client-provisioner-7b7fbc4c58-pvm6z to l4
  Normal  Pulling    27m   kubelet            Pulling image "quay.io/external_storage/nfs-client-provisioner:v3.1.0-k8s1.11"
  Normal  Pulled     25m   kubelet            Successfully pulled image "quay.io/external_storage/nfs-client-provisioner:v3.1.0-k8s1.11" in 1m50.942114237s
  Normal  Created    25m   kubelet            Created container nfs-client-provisioner
  Normal  Started    25m   kubelet            Started container nfs-client-provisioner

安装 redis 进行测试

检测 redis repo: https://artifacthub.io/packages/helm/bitnami/redis

检查 pv class 配置项

7RSQKj.png

安装 helm install my-redis bitnami/redis --set global.storageClass=nfs-client

root@l2:~# helm install my-redis bitnami/redis --set global.storageClass=nfs-client
NAME: my-redis
LAST DEPLOYED: Sun May 29 18:53:22 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: redis
CHART VERSION: 16.10.0
APP VERSION: 6.2.7

** Please be patient while the chart is being deployed **

Redis™ can be accessed on the following DNS names from within your cluster:

    my-redis-master.default.svc.cluster.local for read/write operations (port 6379)
    my-redis-replicas.default.svc.cluster.local for read-only operations (port 6379)



To get your password run:

    export REDIS_PASSWORD=$(kubectl get secret --namespace default my-redis -o jsonpath="{.data.redis-password}" | base64 --decode)

To connect to your Redis™ server:

1. Run a Redis™ pod that you can use as a client:

   kubectl run --namespace default redis-client --restart='Never'  --env REDIS_PASSWORD=$REDIS_PASSWORD  --image docker.io/bitnami/redis:6.2.7-debian-10-r23 --command -- sleep infinity

   Use the following command to attach to the pod:

   kubectl exec --tty -i redis-client \
   --namespace default -- bash

2. Connect using the Redis™ CLI:
   REDISCLI_AUTH="$REDIS_PASSWORD" redis-cli -h my-redis-master
   REDISCLI_AUTH="$REDIS_PASSWORD" redis-cli -h my-redis-replicas

To connect to your database from outside the cluster execute the following commands:

    kubectl port-forward --namespace default svc/my-redis-master 6379:6379 &
    REDISCLI_AUTH="$REDIS_PASSWORD" redis-cli -h 127.0.0.1 -p 6379

检测状态 kubectl get pods 处于 running

root@l2:~# kubectl get pods
NAME                                                   READY   STATUS             RESTARTS   AGE
my-nfsclient-nfs-client-provisioner-7b7fbc4c58-pvm6z   1/1     Running            0          57m
my-redis-master-0                                      1/1     Running            0          39m
my-redis-replicas-0                                    0/1     CrashLoopBackOff   13         39m

检测详情 kubectl decribe pods my-redis-master-0

root@l2:~# kubectl describe pods my-redis-master-0
Name:         my-redis-master-0
Namespace:    default
Priority:     0
Node:         l4/10.0.4.12
Start Time:   Sun, 29 May 2022 18:53:26 +0800
Labels:       app.kubernetes.io/component=master
              app.kubernetes.io/instance=my-redis
              app.kubernetes.io/managed-by=Helm
              app.kubernetes.io/name=redis
              controller-revision-hash=my-redis-master-564575987f
              helm.sh/chart=redis-16.10.0
              statefulset.kubernetes.io/pod-name=my-redis-master-0
Annotations:  checksum/configmap: a746719e48ee91bc2f3077dba980d86d03278b30d1961852890e42a78771690f
              checksum/health: c1626ed9079e04fb9c301d80021e964758fd212c0c66611f0a7f028e39778389
              checksum/scripts: ac900030eba0d31a0a2ef7ed079ef662aa81d1d8f0fae534b22ecd40742cb714
              checksum/secret: c1e0ecb80e7fee67b7520d43b3fe6266d166e0da4b0fb9055de5c1141532d56f
Status:       Running
IP:           10.244.2.10
IPs:
  IP:           10.244.2.10
Controlled By:  StatefulSet/my-redis-master
Containers:
  redis:
    Container ID:  docker://da621ab4b95117c2eaeb41a99adba34d7f5f820dd8a4f4fbe50915197bc87783
    Image:         docker.io/bitnami/redis:6.2.7-debian-10-r23
    Image ID:      docker-pullable://bitnami/redis@sha256:a61e5bed84aa7b0434eb7003fcad586800a24518209efa5c5769806ec5d6e4d5
    Port:          6379/TCP
    Host Port:     0/TCP
    Command:
      /bin/bash
    Args:
      -c
      /opt/bitnami/scripts/start-scripts/start-master.sh
    State:          Running
      Started:      Sun, 29 May 2022 18:53:58 +0800
    Ready:          True
    Restart Count:  0
    Liveness:       exec [sh -c /health/ping_liveness_local.sh 5] delay=20s timeout=6s period=5s #success=1 #failure=5
    Readiness:      exec [sh -c /health/ping_readiness_local.sh 1] delay=20s timeout=2s period=5s #success=1 #failure=5
    Environment:
      BITNAMI_DEBUG:           false
      REDIS_REPLICATION_MODE:  master
      ALLOW_EMPTY_PASSWORD:    no
      REDIS_PASSWORD:          <set to the key 'redis-password' in secret 'my-redis'>  Optional: false
      REDIS_TLS_ENABLED:       no
      REDIS_PORT:              6379
    Mounts:
      /data from redis-data (rw)
      /health from health (rw)
      /opt/bitnami/redis/etc/ from redis-tmp-conf (rw)
      /opt/bitnami/redis/mounted-etc from config (rw)
      /opt/bitnami/scripts/start-scripts from start-scripts (rw)
      /tmp from tmp (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from my-redis-token-92rs6 (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  redis-data:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  redis-data-my-redis-master-0
    ReadOnly:   false
  start-scripts:
    Type:      ConfigMap (a volume populated by a ConfigMap)
    Name:      my-redis-scripts
    Optional:  false
  health:
    Type:      ConfigMap (a volume populated by a ConfigMap)
    Name:      my-redis-health
    Optional:  false
  config:
    Type:      ConfigMap (a volume populated by a ConfigMap)
    Name:      my-redis-configuration
    Optional:  false
  redis-tmp-conf:
    Type:       EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium:     
    SizeLimit:  <unset>
  tmp:
    Type:       EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium:     
    SizeLimit:  <unset>
  my-redis-token-92rs6:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  my-redis-token-92rs6
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                 node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason            Age                From               Message
  ----     ------            ----               ----               -------
  Warning  FailedScheduling  40m (x2 over 40m)  default-scheduler  0/3 nodes are available: 3 pod has unbound immediate PersistentVolumeClaims.
  Normal   Scheduled         40m                default-scheduler  Successfully assigned default/my-redis-master-0 to l4
  Normal   Pulling           40m                kubelet            Pulling image "docker.io/bitnami/redis:6.2.7-debian-10-r23"
  Normal   Pulled            40m                kubelet            Successfully pulled image "docker.io/bitnami/redis:6.2.7-debian-10-r23" in 28.401308376s
  Normal   Created           40m                kubelet            Created container redis
  Normal   Started           40m                kubelet            Started container redis

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK