小编Yud*_*udi的帖子

Kubernetes 在现有目录上挂载卷,容器内有文件

我使用 1.11 版的 k8s 和 CephFS 作为存储。

我正在尝试挂载在 pod 中的 CephFS 上创建的目录。为了达到同样的目的,我在部署配置中编写了以下卷和卷挂载配置

体积

{
  "name": "cephfs-0",
  "cephfs": {
    "monitors": [
      "10.0.1.165:6789",
      "10.0.1.103:6789",
      "10.0.1.222:6789"
    ],
    "user": "cfs",
    "secretRef": {
      "name": "ceph-secret"
    },
    "readOnly": false,
    "path": "/cfs/data/conf"
  }
}
Run Code Online (Sandbox Code Playgroud)

卷挂载

{
  "mountPath": "/opt/myapplication/conf",
  "name": "cephfs-0",
  "readOnly": false
} 
Run Code Online (Sandbox Code Playgroud)

安装工作正常。我可以看到 ceph 目录,即 /cfs/data/conf 被挂载在 /opt/myapplication/conf 上,但以下是我的问题。

我的配置文件已经作为 docker 镜像的一部分出现在 /opt/myapplication/conf 位置。当部署尝试挂载 ceph 卷时,位于 /opt/myapplication/conf 位置的所有文件都会消失。我知道这是挂载操作的行为,但是有什么方法可以将容器中已经存在的文件保留在我正在挂载的卷上,以便挂载相同卷的其他 pod 可以访问配置文件。即 pod 中位于 /opt/myapplication/conf 位置的文件应该可以在位置 /cfs/data/conf 的 CephFS 上访问。

是否可以?

我浏览了 docker 文档,它提到

使用容器填充一个卷如果你启动一个创建新卷的容器,如上,并且容器在要挂载的目录中有文件或目录(如上面的/app/),目录的内容被复制到卷中. 然后容器安装并使用该卷,使用该卷的其他容器也可以访问预先填充的内容。

这符合我的要求,但如何使用 k8s …

mount docker kubernetes kubernetes-pod

20
推荐指数
2
解决办法
1万
查看次数

Kubernetes:使用NFS进行动态持久卷配置

我有多节点kubernetes设置.我正在尝试使用带有NFS卷插件的存储类动态分配持久卷.我找到了glusterfs,aws-ebs等的存储类示例.但是,我没有找到任何NFS示例.如果我只创建PV和PVC,那么NFS工作得很好(没有存储类).我试图通过引用其他插件为NFS编写存储类文件.请参考下面,

NFS的存储class.yaml

kind: StorageClass
apiVersion: storage.k8s.io/v1beta1
metadata:
  namespace: kube-system
  name: my-storage
  annotations:
    storageclass.beta.kubernetes.io/is-default-class: "true"
  labels:
    kubernetes.io/cluster-service: "true"

provisioner: kubernetes.io/nfs
parameters:
  path: /nfsfileshare
  server: <nfs-server-ip> 
Run Code Online (Sandbox Code Playgroud)

NFS-PV-claim.yaml

apiVersion: v1
metadata:
  name: demo-claim
  annotations:
    volume.beta.kubernetes.io/storage-class: my-storage
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi
Run Code Online (Sandbox Code Playgroud)

它没用.所以,我的问题是,我们可以为NFS编写存储类吗?它是否支持动态提供?

nfs docker kubernetes

11
推荐指数
2
解决办法
1万
查看次数

Kubernetes 对象大小限制

我正在处理 CRD 并创建自定义资源。我需要在自定义资源中保留有关我的应用程序的大量信息。根据官方文档,etcd 最多可处理 1.5MB 的请求。我遇到了类似的错误

“错误”:“请求实体太大:限制为 3145728”

我相信错误中指定的限制是 3MB。对此有何想法?这个问题有什么出路吗?

etcd kubernetes google-kubernetes-engine

7
推荐指数
1
解决办法
5052
查看次数

Python 列表:为什么在连接操作后会创建新的列表对象?

我正在学习 Python 5E 书中关于列表的主题。我注意到如果我们在列表上进行连接,它会创建新对象。扩展方法不创建新对象,即就地更改。在串联的情况下实际会发生什么?

例如

l = [1,2,3,4]
m = l
l = l + [5,6]
print l,m

#output
([1,2,3,4,5,6], [1,2,3,4])
Run Code Online (Sandbox Code Playgroud)

如果我按如下方式使用增强分配,

l = [1,2,3,4]
m = l
l += [5,6]
print l,m

#output
([1,2,3,4,5,6], [1,2,3,4,5,6])
Run Code Online (Sandbox Code Playgroud)

在这两种操作的情况下,后台会发生什么?

python python-2.7 python-3.x

5
推荐指数
2
解决办法
90
查看次数

Kubernetes:使用主机路径进行动态存储配置

我的问题是关于PersistentVolumeClaim我在aws ec2上有一个节点集群设置我正在尝试使用kubernetes.io/host-path作为Provisioner创建一个存储类.

存储类的yaml文件内容如下,

kind: StorageClass
apiVersion: storage.k8s.io/v1beta1
metadata:
namespace: kube-system
name: my-storage
annotations:
    storageclass.beta.kubernetes.io/is-default-class: "false"
labels:
    kubernetes.io/cluster-service: "true"
provisioner: kubernetes.io/host-path
Run Code Online (Sandbox Code Playgroud)

PersistentVolumeClaim的yaml文件内容如下,

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: task-pv-claim
annotations:
    volume.beta.kubernetes.io/storage-class: my-storage
spec:
accessModes:
    - ReadWriteOnce
resources:
    requests:
    storage: 3Gi
Run Code Online (Sandbox Code Playgroud)

当我尝试在minikube上创建存储类和PVC时,它正在工作.它是在/ tmp/hostpath_volume/minikube上创建音量但是,当我在aws ec2上的一个节点集群设置上尝试类似的事情时,我收到了以下错误

无法创建配置程序:已禁用配置卷插件"kubernetes.io/host-path"

当我执行kubectl描述pvc task-pv-claim时,我可以看到此错误.此外,PV未创建,因此声明处于暂挂状态

我找到了类似kube-controller-manager的东西,它在其选项中显示了--enable-dynamic-provisioning和--enable-hostpath-provisioner,但不知道如何使用它.

kubernetes devops minikube devops-services

4
推荐指数
1
解决办法
6133
查看次数

Kubernetes:hostPath 存储权限

问题:无法写入容器内的目录。

我正在使用 hostPath 存储来满足持久存储要求。我没有使用 PV 和 PVC 来使用 hospath,而是使用它的卷插件。例如

{
    "apiVersion": "v1",
    "id": "local-nginx",
    "kind": "Pod",
    "metadata": {
        "name": "local-nginx"
    },
    "spec": {
        "containers": [
             {
                 "name": "local-nginx",
                 "image": "fedora/nginx",
                 "volumeMounts": [
                     {
                         "mountPath": "/usr/share/nginx/html/test",
                         "name": "localvol"
                     }
                 ]
             }
        ],
        "volumes": [
            {
                 "name": "localvol",
                 "hostPath": {
                    "path": "/logs/nginx-logs"
                 }
            }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:nginx pod 只是为了举例。

我在主机上的目录被创建为“drwxr-xr-x。2 root root 6 Apr 23 18:42 /logs/nginx-logs”并且相同的权限反映在 pod 内,但由于它是 755,其他用户即用户在里面pod 无法在挂载的目录中写入/创建文件。

问题:

  1. 有没有办法避免上面指定的问题?

  2. 在 Hostpath 存储的情况下,有没有办法指定目录权限?

  3. 我可以在以下定义中设置任何字段以提供所需的权限吗?


"volumes":{
   "name": "vol",
    "hostPath": …
Run Code Online (Sandbox Code Playgroud)

kubernetes docker-volume

4
推荐指数
1
解决办法
4849
查看次数