![](/img/trans.png)
[英]interact with API added by k8s operator using native k8s python client
[英]k8s volumesnapshot is created but it returns 409 error message in python k8s client
我使用 python k8s 客户端成功地对我的卷进行了快照。
但是,我收到了以下消息。
我在集群中没有相同的volumesnapshot。
为什么会这样?
代码:
def create_snapshot(命名空间,pvc_name):
snapshot_class = "snapshotclass"
snapshot_name = f"snapshot-{pvc_name}"
snapshot_resource = {
"apiVersion": "snapshot.storage.k8s.io/v1beta1",
"kind": "VolumeSnapshot",
"metadata": {"name": snapshot_name},
"spec": {
"volumeSnapshotClassName": snapshot_class,
"source": {"persistentVolumeClaimName": pvc_name}
}
}
res = custom_api.create_namespaced_custom_object(
group="snapshot.storage.k8s.io",
version="v1beta1",
namespace= namespace,
plural="volumesnapshots",
body=snapshot_resource,
)
print(res)
create_snapshot("test", "test-pvc")
卷快照创建成功,但我收到一条消息:
File "/home/new/my/test/rescheduler/utils/k8s_controller.py", line 72, in create_snapshot
body=snapshot_resource,
File "/home/new/my/test/venv/lib/python3.6/site-packages/kubernetes/client/api/custom_objects_api.py", line 225, in create_namespaced_custom_object
return self.create_namespaced_custom_object_with_http_info(group, version, namespace, plural, body, **kwargs) # noqa: E501
File "/home/new/my/test/venv/lib/python3.6/site-packages/kubernetes/client/api/custom_objects_api.py", line 358, in create_namespaced_custom_object_with_http_info
collection_formats=collection_formats)
File "/home/new/my/test/venv/lib/python3.6/site-packages/kubernetes/client/api_client.py", line 353, in call_api
_preload_content, _request_timeout, _host)
File "/home/new/my/test/venv/lib/python3.6/site-packages/kubernetes/client/api_client.py", line 184, in __call_api
_request_timeout=_request_timeout)
File "/home/new/my/test/venv/lib/python3.6/site-packages/kubernetes/client/api_client.py", line 397, in request
body=body)
File "/home/new/my/test/venv/lib/python3.6/site-packages/kubernetes/client/rest.py", line 280, in POST
body=body)
File "/home/new/my/test/venv/lib/python3.6/site-packages/kubernetes/client/rest.py", line 233, in request
raise ApiException(http_resp=r)
kubernetes.client.exceptions.ApiException: (409)
Reason: Conflict
HTTP response headers: HTTPHeaderDict({'Audit-Id': 'dec3c73a-e5fc-4c63-8d1a-6e2e6c6600e1', 'Cache-Control': 'no-cache, private', 'Content-Type': 'application/json', 'Date': 'my, 25 Apr 2021 10:50:52 GMT', 'Content-Length': '346'})
HTTP response body: {"kind":"Status","apiVersion":"v1","metadata":{},"status":"Failure","message":"volumesnapshots.snapshot.storage.k8s.io \"snapshot-test-pvc\" already exists","reason":"AlreadyExists","details":{"name":"snapshot-test-pvc,"group":"snapshot.storage.k8s.io","kind":"volumesnapshots"},"code":409}
将此答案发布为社区 wiki,以提供在尝试使用上述代码片段创建资源时遇到错误409
的可能原因之一。
随意扩展它。
问题中遇到的错误:
Reason: Conflict
HTTP response headers: HTTPHeaderDict({'Audit-Id': 'dec3c73a-e5fc-4c63-8d1a-6e2e6c6600e1', 'Cache-Control': 'no-cache, private', 'Content-Type': 'application/json', 'Date': 'my, 25 Apr 2021 10:50:52 GMT', 'Content-Length': '346'})
HTTP response body: {"kind":"Status","apiVersion":"v1","metadata":{},"status":"Failure","message":"volumesnapshots.snapshot.storage.k8s.io \"snapshot-test-pvc\" already exists","reason":"AlreadyExists","details":{"name":"snapshot-test-pvc,"group":"snapshot.storage.k8s.io","kind":"volumesnapshots"},"code":409}
"snapshot-test-pvc\" already exists","reason":"AlreadyExists"
表示资源已存在于集群中。 要检查资源是否存在于集群中,您可以运行以下命令:
$ kubectl get volumesnapshots -A
$ kubectl describe volumesnapshots RESOURCE_NAME -A
我已经使用了问题中的代码并且没有任何问题。 行动过程如下:
VolumeSnapshot
创建成功kubernetes.client.exceptions.ApiException: (409)
Reason: Conflict
<-- REDACTED -->
HTTP response body: {"kind":"Status","apiVersion":"v1","metadata":{},"status":"Failure","message":"volumesnapshots.snapshot.storage.k8s.io \"snapshot-example-pvc\" already exists","reason":"AlreadyExists","details":{"name":"snapshot-example-pvc","group":"snapshot.storage.k8s.io","kind":"volumesnapshots"},"code":409}
旁注!
上面的错误是通过问题中的修改代码(主要是值)返回的。
尝试在已创建的资源上运行$ kubectl create -f resource.yaml -v=4
时,您也会看到此错误。
对于任何对此感兴趣的人来说,这是问题中使用的代码的最小、可重现的示例(它缺少import
并且def
放错了位置):
from kubernetes import client, config
def create_snapshot(namespace, pvc_name):
config.load_kube_config()
custom_api = client.CustomObjectsApi()
snapshot_class = "snapshotclass"
snapshot_name = f"snapshot-{pvc_name}"
snapshot_resource = {
"apiVersion": "snapshot.storage.k8s.io/v1beta1",
"kind": "VolumeSnapshot",
"metadata": {"name": snapshot_name},
"spec": {
"volumeSnapshotClassName": snapshot_class,
"source": {"persistentVolumeClaimName": pvc_name}
}
}
res = custom_api.create_namespaced_custom_object(
group="snapshot.storage.k8s.io",
version="v1beta1",
namespace= namespace,
plural="volumesnapshots",
body=snapshot_resource,
)
print(res)
create_snapshot("default", "test-pvc")
其他资源:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.