kubernetes-1-install pv y pvc almacenados localmente

El volumen se puede dividir en las siguientes tres categorías según el uso:
(1) Volumen, volúmenes de datos locales y de red
(2) Volumen persistente
(3) Volumen persistente, volumen de datos de suministro dinámico

Nota: El volumen en Kubernetes brinda la capacidad de montar almacenamiento externo en un contenedor.

Nota: Pod necesita establecer la fuente de volumen (spec.volumes) y el punto de montaje (spec.containers.volumeMounts) antes de usar el volumen correspondiente.

1 volumen de almacenamiento local y almacenamiento en red de k8s

Volumen de datos locales y volumen de datos de red en volumen:
(1) Volumen de datos locales: emptyDir, hostPath.
(2) Volumen de datos de la red: NFS.

1.1 emptyDir (directorio vacío)

Cree un volumen vacío y móntelo en el contenedor del Pod. También se eliminará la eliminación de pod del volumen. Escenario de aplicación: uso compartido de datos entre contenedores que se ejecutan en el mismo pod.
#docker pull busybox
#docker pull centos
#docker pull library / bash: El
archivo 4.4.23 empty.yaml
crea dos contenedores, uno para escribir y otro para leer, para probar si los datos son compartidos.

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: write
    image: library/bash:4.4.23
    imagePullPolicy: IfNotPresent
    command: ["sh","-c","while true; do echo 'hello' >> /data/hello.txt; sleep 2; done;"]
    volumeMounts:
      #将名为data的数据卷,挂载在容器的/data下面
      - name: data
        mountPath: /data

  - name: read
    image: centos
    imagePullPolicy: IfNotPresent
    command: ["bash","-c","tail -f /data/hello.txt"]
    volumeMounts:
      #将名为data的数据卷,挂载在容器的/data下面
      - name: data
        mountPath: /data

  #定义一个数据卷来源
  volumes:
  #定义数据卷名字
  - name: data
    emptyDir: {
    
    }

#kubectl apply -f empty.yaml

由于通过指定的镜像启动容器后,容器内部没有常驻进程,导致容器启动成功后即退出,从而进行了持续的重启。
command: ["sh","-c","while true; do echo 'hello' >> /data/hello.txt; sleep 2; done;"]

#kubectl logs my-pod -c read se
escribe cada dos segundos, por lo que los datos impresos se pueden ver de forma continua.

1.2 hostPath (montaje local)

Monte el archivo o directorio del sistema de archivos del nodo en el contenedor del Pod. Escenario de aplicación: el contenedor del Pod necesita acceder al archivo de host.
Archivo hostpath.yaml

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: busybox
    image: busybox
    imagePullPolicy: IfNotPresent
    args:
    - /bin/sh
    - -c
    - sleep 36000
   # 挂载点
    volumeMounts:
    #将名为data的数据卷,挂载在容器的/data下面
    - name: data
      mountPath: /data
  volumes:
  - name: data
    #挂载来源,宿主机的/tmp目录
    hostPath:
      path: /tmp
      type: Directory

#kubectl apply -f hostpath.yaml
Compruebe en qué nodo está programado el pod.
#kubectl get pods -n default -o wide
Inserte la descripción de la imagen aquíVea los datos en / tmp en el host y muéstrelos correctamente en el directorio / data del pod.

1.3 NFS (Volumen de red de almacenamiento de intercambio de archivos)

192.168.0.165 mymaster
192.168.0.163 myworker
(1) Instalar nfs: (se requiere el servicio nfs y cada máquina debe estar instalada)

#yum install -y nfs-utils #安装nfs服务
#yum install -y rpcbind#安装rpc服务
#注意:先启动rpc服务,再启动nfs服务,每台机器都启动。
#systemctl start rpcbind #先启动rpc服务
#systemctl enable rpcbind #设置开机启动
#systemctl start nfs-server #启动nfs服务
#systemctl enable nfs-server #设置开机启动

(2) Configure mymaster como servidor, configure el directorio / some / path para compartirlo y tenga permisos de lectura y escritura

#cat /etc/exports
/some/path 192.168.0.0/24(rw,no_root_squash)

#docker pull nginx
En este momento, cuando estás en el lado del cliente, no necesitas usar deliberadamente mount para montar, porque k8s lo montará automáticamente por nosotros.
(3) Archivo nfs.yaml

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        imagePullPolicy: IfNotPresent
        #将名为wwwroot的数据卷,挂载在容器的nginx的html目录下
        volumeMounts:
        - name: wwwroot
          mountPath: /usr/share/nginx/html
        ports:
        - containerPort: 80
    #定义数据卷名字为wwwroot,类型为nfs
      volumes:
      - name: wwwroot
        nfs:
          server: mymaster
          path: /some/path

#kubectl apply -f nfs.yaml
#kubectl exec -it nginx-deployment-5f58c6b8f9-8x4tb-sh
Inserte la descripción de la imagen aquí
Compruebe si hay contenido en el directorio

#cat /some/path/aa.html
my name is lucy

Inserte la descripción de la imagen aquí

2 Instale pv y pvc almacenados localmente

镜像 rancher / local-path-provisioner: v0.0.11
#docker load -i local-path-provisioner.tar
文件 local-path-storage.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: local-path-storage
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: local-path-provisioner-service-account
  namespace: local-path-storage
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: local-path-provisioner-role
rules:
- apiGroups: [""]
  resources: ["nodes", "persistentvolumeclaims"]
  verbs: ["get", "list", "watch"]
- apiGroups: [""]
  resources: ["endpoints", "persistentvolumes", "pods"]
  verbs: ["*"]
- apiGroups: [""]
  resources: ["events"]
  verbs: ["create", "patch"]
- apiGroups: ["storage.k8s.io"]
  resources: ["storageclasses"]
  verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: local-path-provisioner-bind
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: local-path-provisioner-role
subjects:
- kind: ServiceAccount
  name: local-path-provisioner-service-account
  namespace: local-path-storage
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: local-path-provisioner
  namespace: local-path-storage
spec:
  replicas: 1
  selector:
    matchLabels:
      app: local-path-provisioner
  template:
    metadata:
      labels:
        app: local-path-provisioner
    spec:
      serviceAccountName: local-path-provisioner-service-account
      containers:
      - name: local-path-provisioner
        image: rancher/local-path-provisioner:v0.0.11
        imagePullPolicy: IfNotPresent
        command:
        - local-path-provisioner
        - --debug
        - start
        - --config
        - /etc/config/config.json
        volumeMounts:
        - name: config-volume
          mountPath: /etc/config/
        env:
        - name: POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
      volumes:
        - name: config-volume
          configMap:
            name: local-path-config
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: local-path
  annotations: #添加为默认StorageClass
    storageclass.beta.kubernetes.io/is-default-class: "true"
provisioner: rancher.io/local-path
volumeBindingMode: WaitForFirstConsumer
reclaimPolicy: Delete
---
kind: ConfigMap
apiVersion: v1
metadata:
  name: local-path-config
  namespace: local-path-storage
data:
  config.json: |-
        {
                "nodePathMap":[
                {
                        "node":"DEFAULT_PATH_FOR_NON_LISTED_NODES",
                        "paths":["/opt/local-path-provisioner"]
                }
                ]
        }

#kubectl apply -f local-path-storage.yaml
Inserte la descripción de la imagen aquíVer el almacenamiento predeterminado
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_20466211/article/details/113121310
Recomendado
Clasificación