Woj*_*Zet 5 google-compute-engine kubernetes google-kubernetes-engine
我在 Google Compute Engine 中创建了一个新磁盘。
gcloud compute disks create --size=10GB --zone=us-central1-a dane-disk
Run Code Online (Sandbox Code Playgroud)
它说我需要格式化它。但我不知道如何挂载/访问磁盘?
gcloud compute disks list
NAME LOCATION LOCATION_SCOPE SIZE_GB TYPE STATUS
notowania-disk us-central1-a zone 10 pd-standard READY
Run Code Online (Sandbox Code Playgroud)
新磁盘未格式化。您必须先格式化并安装磁盘,然后才能使用它。您可以在以下位置找到有关如何执行此操作的说明:
https://cloud.google.com/compute/docs/disks/add-persistent-disk#formatting
我试过上面的说明但是 lsblk根本没有显示磁盘
我是否需要创建一个 VM 并以某种方式将其附加到它才能使用它?我的目标是将磁盘安装为独立于 VM的持久 GKE 卷(上次 GKE 升级导致重新创建 VM 和数据丢失)
感谢您在评论中澄清您要做什么。
我在这里有 2 个不同的答案。
首先是我的测试表明Kubernetes GCE PD文档是完全正确的,关于格式化的警告似乎可以安全地忽略。
如果你只是发出:
gcloud compute disks create --size=10GB --zone=us-central1-a my-test-data-disk
Run Code Online (Sandbox Code Playgroud)
然后在 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
Run Code Online (Sandbox Code Playgroud)
它会在安装时被格式化。这可能是因为该fsType参数指示系统如何格式化磁盘。您无需对单独的 GCE 实例执行任何操作。即使您删除 pod 甚至整个集群,磁盘也会保留。第一次使用后不会重新格式化,并且数据会保留。
因此,来自 gcloud 的警告消息令人困惑,但在这种情况下可以安全地忽略。
现在,为了基于不会自动删除的 GCE PD动态创建持久卷,您需要创建一个新的StorageClass,将回收策略设置为Retain,然后PersistentVolumeClaim基于该创建一个StorageClass。这也基本上将整个操作保留在 Kubernetes 内部,无需对 gcloud 做任何事情。同样,类似的方法是你想用用什么StatefulSet,而不是一个单一的荚,如所描述这里。
此 GKE 文档中有关动态分配 PVC的大部分内容以及Kubernetes StorageClass 文档 中描述了您要执行的大部分操作。下面是一个例子:
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
Run Code Online (Sandbox Code Playgroud)
除了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
Run Code Online (Sandbox Code Playgroud)
应用上述将动态创建一个磁盘,当您删除声明时将保留该磁盘。
最后是一个 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
Run Code Online (Sandbox Code Playgroud)
现在,如果您按顺序应用这三个,您将获得一个使用 PersistentVolumeClaim 运行的容器,它自动为您创建(并格式化)了一个磁盘。当您删除 pod 时,该声明会保留磁盘。如果您删除声明,StorageClass 仍会阻止磁盘被删除。
请注意,此后留下的 PV 不会自动重用,因为数据仍在磁盘上。请参阅Kubernetes 文档,了解在这种情况下您可以采取哪些措施来回收它。实际上,这主要是说您不应该删除 PVC,除非您准备好将数据从旧卷中移出。
请注意,当整个 GKE 集群也被删除时,这些磁盘甚至将继续存在(并且您将继续为它们付费,直到您删除它们)。
| 归档时间: |
|
| 查看次数: |
801 次 |
| 最近记录: |