如何使用 k8s 客户端和 cronjob 运行定期卷快照



我有一个要为其运行快照的卷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 计划。

相关内容

最新更新