kubernetes - 如何挂载和格式化要挂载在GKE pods 中的新Google计算盘?

标签 kubernetes google-compute-engine google-kubernetes-engine

我已经在Google Compute Engine中创建了一个新磁盘。

gcloud compute disks create --size=10GB --zone=us-central1-a dane-disk

它说我需要格式化它。但是我不知道如何安装/访问磁盘?
gcloud compute disks list
NAME                                               LOCATION       LOCATION_SCOPE  SIZE_GB  TYPE         STATUS
notowania-disk                                     us-central1-a  zone            10       pd-standard  READY

New disks are unformatted. You must format and mount a disk before it can be used. You can find instructions on how to do this at:

https://cloud.google.com/compute/docs/disks/add-persistent-disk#formatting



我尝试了上面的指令,但是lsblk根本不显示磁盘

我是否需要创建一个VM并以某种方式将其附加到它才能使用它?我的目标是将磁盘作为独立于VM的persistent GKE volume挂载(上一次GKE升级导致VM重新娱乐和数据丢失)

最佳答案

感谢您澄清您在评论中要做的事情。

我在这里有2个不同的答案。

首先是我的测试表明Kubernetes GCE PD文档是正确的,有关格式的警告似乎可以安全地忽略。

如果您只是发出:

gcloud compute disks create --size=10GB --zone=us-central1-a my-test-data-disk

然后在pod中使用它:
apiVersion: v1
kind: Pod
metadata:
  name: test-pd
spec:
  containers:
  - image: nginx
    name: nginx-container
    volumeMounts:
    - mountPath: /test-pd
      name: test-volume
  volumes:
  - name: test-volume
    # This GCE PD must already exist.
    gcePersistentDisk:
      pdName: my-test-data-disk
      fsType: ext4

挂载时将对其进行格式化。这可能是因为fsType参数instructs the system how to format the disk。您无需对单独的GCE实例执行任何操作。即使删除 Pane 或整个群集,磁盘也将保留。第一次使用后不会重新格式化,并保留数据。

因此,来自gcloud的警告消息令人困惑,但是在这种情况下可以安全地忽略。

现在,为了基于GCE PD动态创建一个不会自动删除的持久卷,您将需要创建一个新的StorageClass并将回收策略设置为Retain,然后根据该PersistentVolumeClaim创建一个StorageClass。这基本上也将整个操作保留在Kubernetes内部,而无需使用gcloud做任何事情。同样,类似于here所描述的,类似的方法是您希望将StatefulSet与单个pod一起使用。

您想要做的大多数事情都在this GKE documentation about dynamically allocating PVCsKubernetes StorageClass documentation中进行了描述。这是一个例子:

gce-pd-retain-storageclass.yaml:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: gce-pd-retained
reclaimPolicy: Retain
provisioner: kubernetes.io/gce-pd
parameters:
  type: pd-standard
  replication-type: none

除了reclaimPolicy设置为Retain以外,以上存储类与“标准” GKE存储类基本相同。

pvc-demo.yaml:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-demo-disk
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: gce-pd-retained
  resources:
    requests:
      storage: 10Gi

应用上述操作将动态创建一个磁盘,该磁盘将在您删除声明时保留。

最后是一个demo-pod.yaml,它将PVC作为卷安装(这实际上是使用nginx的废话,但它演示了语法):
apiVersion: v1
kind: Pod
metadata:
  name: test-pd
spec:
  containers:
  - image: nginx
    name: nginx-container
    volumeMounts:
    - mountPath: /test-pd
      name: test-volume
  volumes:
  - name: test-volume
    persistentVolumeClaim:
      claimName: pvc-demo-disk

现在,如果按顺序应用这三个对象,您将获得一个使用PersistentVolumeClaim运行的容器,该容器自动为您创建(并格式化)了磁盘。当您删除Pod时,版权声明会将磁盘保留在周围。如果删除该声明,StorageClass仍然会阻止磁盘被删除。

请注意,此后留下的PV不会自动重用,因为数据仍在磁盘上。请参阅the Kubernetes documentation,以了解在这种情况下可以采取的措施。确实,这主要是说您不应该删除PVC,除非您准备好将数据从旧卷中移出。

请注意,当删除整个GKE群集时,这些磁盘甚至将继续存在(并且将继续向它们收费,直到删除它们为止)。

关于kubernetes - 如何挂载和格式化要挂载在GKE pods 中的新Google计算盘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58608984/

相关文章:

kubernetes - 在数据库中存储Kubernetes CronJob日志

google-cloud-platform - 如何使用 terraform 在 Google Compute Engine 上启用允许 HTTP 流量/允许 HTTP 流量

kubernetes - 从 k8s 入口动态添加/删除命名主机

kubernetes - 如何解决GKE上的kubectl连接问题

kubernetes - 如何撤销Kubernetes中的客户端证书?

ssl - 证书管理器挑战悬而未决

kubernetes - helm 列出所有已安装的图表

google-compute-engine - 错误 : Unauthorized on my own Google Cloud notebook

python - 凭证无效 - 尝试从 GCE 实例访问 Google Datastore 时出现 401

kubernetes - 如何找出负载均衡器服务的外部 IP?