我有一个要为其运行快照的卷PersistentVolumeClaim
。我知道有VolumeSnapshot
文档。我认为运行定期快照的最佳方法是为此创建一个CronJob
。
所以我用python k8s客户端和我的自定义脚本创建了一个docker镜像。这样我可以随时运行它,并且可以直接从 pod 访问 kube 配置和所有资源。
FROM python:3.8-slim-buster
RUN apt-get -qq update && apt-get -qq install -y git
COPY . .
RUN pip install --upgrade pip
RUN pip install git+https://github.com/kubernetes-client/python.git
我遇到的第一个问题是,我试图使用这个VolumeSnapshot
模板,使用apiVersion: snapshot.storage.k8s.io/v1beta1
行为
client = kubernetes.client.ApiClient()
utils.create_from_yaml(
k8s_client=client,
yaml_file='snapshot.yaml',
verbose=True
)
但它失败了
AttributeError: module 'kubernetes.client' has no attribute 'SnapshotStorageV1beta1Api'
事实上,我在 python 客户端、js 客户端和官方文档 v1.18 中都找不到它。也许是因为它处于测试阶段?
然后我尝试编写一些自定义代码。所以我有
def main():
_configuration = kubernetes.client.Configuration()
_client = kubernetes.client.ApiClient(_configuration)
_storage_api = kubernetes.client.StorageV1beta1Api(_client)
storages = _storage_api.get_api_resources()
但它返回了 V1 存储类的列表,我找不到任何从响应中创建快照的方法。
在我的术语中,快照是将当前状态复制粘贴到其他任何内容中。您知道如何实现这一目标吗?
我觉得我过度设计了这个,但我不想使用第三方,例如藏匿处。
我在 GKE 上运行。
如果您登录到 gcloud 控制台并在侧边栏上,则该 persistentVolumeClaim 将映射到 PersistentVolume
。计算引擎 -> 磁盘
您将获得项目中使用的所有GCE磁盘的列表。
您将需要运行
kubectl get pvc --namespace YOUR_NAMESPACE
这将为您提供所有PVC的列表,您需要找出所需的PVC之一,以便获取磁盘名称,以便您可以在控制台中查看您需要执行以下操作
╰─ kubectl describe pvc NAME_OF_PVC --namespace YOUR_NAMESPACE
Name: NAME_OF_PVC
Namespace: YOUR_NAMESPACE
StorageClass: standard
Status: Bound
Volume: pvc-61e864b6-6fbf-4a36-80af-8a65e1588b58
Finalizers: [kubernetes.io/pvc-protection]
Capacity: 10Gi
Access Modes: RWO
VolumeMode: Filesystem
Mounted By: <none>
Events: <none>
卷名的pvc-61e864b6-6fbf-4a36-80af-8a65e1588b58
返回控制台并按此名称进行筛选,然后单击它,您应该能够从那里创建快照。
现在,正确的方法是创建快照计划并将其绑定到磁盘,如下所示 (https://cloud.google.com/blog/products/compute/introducing-scheduled-snapshots-for-compute-engine-persistent-disk(。
创建完快照计划后,您可以在控制台中编辑磁盘,并将其分配给磁盘创建的任何 shanpshot 计划。