美文网首页Kubernetes
Kubernetes 配置Pod和容器(七)使用Persiste

Kubernetes 配置Pod和容器(七)使用Persiste

作者: YiQinGuo | 来源:发表于2017-06-01 16:17 被阅读556次

这个章节展示了如何使用PersistentVolume配置pod的存储。以下是过程的摘要:

1.集群管理员创建一个由物理存储支持的PersistentVolume。集群管理员不将该卷跟任何pod关联。

2.集群用户创建一个PersistentVolumeClaim,它自动绑定到一个合适的PersistentVolume。

3.创建一个pod使用PersistentVolumeClaim作为存储。

在node上创建一个index.html文件

打开集群节点上的shell。如何打开shell取决于如何设置集群。例如,如果使用的是Minikube,可以使用minikube ssh打开集群节点上的shell。

在shell里创建一个/tmp/data文件目录:

mkdir /tmp/data

在/tmp/data文件目录里创建一个index.html文件:

echo 'Hello from Kubernetes storage' > /tmp/data/index.html

创建一个PersistentVolume

在本次实验,新建一个主机路径 PersistentVolume。kubernetes支持在单节点集群上的开发和测试的主机路径。主机路径PersistentVolume使用节点上的文件或目录模拟网络连接存储。

在生成集群中不能使用主机路径。相反,集群管理员可以提供网络资源,如Google Compute Engine持久磁盘,NFS共享或Amazon弹性块存储卷。集群管理员还可以使用StorageClasses来设置动态配置。

以下是主机路径PersistentVolume配置文件:

kind: PersistentVolume
apiVersion: v1
metadata:
  name: task-pv-volume
  labels:
    type: local
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/tmp/data"

配置文件指定卷/tmp/data在集群的节点。配置也指定了10G大小和ReadWriteOnce访问模式,这意味着卷可以通过单个节点的读写来安装。

创建一个PersistentVolume:

kubectl create -f http://k8s.io/docs/tasks/configure-pod-container/task-pv-volume.yaml

查看PersistentVolume的详细信息:

kubectl get pv tesk-pv-volume

输出展示PersistentVolume的STATUS是Available。这意味着还没有被绑定到PersistentVolumeClaim。

创建一个PersistentVolumeClaim

下一步是创建一个PersistentVolumeClaim。pod使用PersistentVolumeClaim请求物理存储。在本次实验,你创建一个PersistentVolumeClaim,它请求一个至少三个可以为至少一个节点提供读写访问的gibibytes的卷。下面是PersistentVolumeClaim的配置文件:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: task-pv-claim
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi

创建一个PersistentVolumeClaim:

kubectl create -f http://k8s.io/docs/tasks/configure-pod-container/task-pv-claim.yaml

创建PersistentVolumeClaim以后,Kubernetes控制面板会查找满足声明要求的PersistentVolume。如果控制面板找到合适的PersistentVolume,它将声明绑定到卷。

重新看一下PersistentVolume:

kubectl get pv tesk-pv-volume

现在输出展示STATUS是Bound。

kubectl get pv task-pv-volume
NAME             CAPACITY   ACCESSMODES   RECLAIMPOLICY   STATUS    CLAIM                   REASON    AGE
task-pv-volume   10Gi       RWO           Retain          Bound     default/task-pv-claim             8m

查看PersistentVolumeClaim:

kubectl get pvc tesk-pv-claim

输出展示PersistentVolumeClaim绑定到了你的PersistentVolume,task-pv-volume。

NAME            STATUS    VOLUME           CAPACITY   ACCESSMODES   AGE
task-pv-claim   Bound     task-pv-volume   10Gi       RWO           5s

创建一个pod

下一步是创建一个pod使用PersistentVolumeClaim作为一个卷。

下面是pod的配置文件:

kind: Pod
apiVersion: v1
metadata:
  name: task-pv-pod
spec:

  volumes:
    - name: task-pv-storage
      persistentVolumeClaim:
       claimName: task-pv-claim

  containers:
    - name: task-pv-container
      image: nginx
      ports:
        - containerPort: 80
          name: "http-server"
      volumeMounts:
      - mountPath: "/usr/share/nginx/html"
        name: task-pv-storage

注意pod配置文件指定了PersistentVolumeClaim,但是没有指定PersistentVolume。从pod的角度来看claim是一个卷。

创建一个pod:

kubectl create -f http://k8s.io/docs/tasks/configure-pod-container/task-pv-pod.yaml

验证容器是否运行:

kubectl get pod task-pv-pod

使用shell进入到运行容器的内部:

kubectl exec -it task-pv-pod -- /bin/bash

在shell里面验证nginx是否应用从主机路径卷提供的index.html文件:

root@task-pv-pod:/# apt-get update
root@task-pv-pod:/# apt-get install curl
root@task-pv-pod:/# curl localhost

输出展示了写入到主机路径卷index.html里的内容:

Hello from Kubernetes storage

访问控制

配置存储组ID(GID)只允许pod使用相同的GID进行写操作。不匹配或者丢失GID将引起权限定义错误。为了减少与用户协调的需要,管理员可以使用GID注释PersistentVolume。然后GID自动加到任何使用PersistentVolume的pod。

使用 pv.beta.kubernetes.io/gid注释如下面的例子:

kind: PersistentVolume
apiVersion: v1
metadata:
  name: pv1
  annotations:
    pv.beta.kubernetes.io/gid: "1234"

当pod消耗具有GID注释的persistentVolume时,注释的GID将以与pod的安全的上下文中指定的GID相同的方式应用与pod中所有的容器。每个GID无论是源自PersistentVolume注释还是pod的规范,都会应用与每个container中运行的第一个进程。

注意:当pod消耗PersistentVolume时,与PersistentVolume相关联的GID不存在于pod资源本身。

相关文章

网友评论

    本文标题:Kubernetes 配置Pod和容器(七)使用Persiste

    本文链接:https://www.haomeiwen.com/subject/yisefxtx.html