我有一个 kubernetes 多资源文件,其中包含要应用的不同资源,例如部署定义、服务定义、pv、pvc 等。有没有办法通过 kubernetes python 客户端使用这个单个文件来部署所有这些资源一下子?虽然我的情况有点不同。我有一个文件,它使用 CRD 以及自定义 kubernetes 资源对象,例如Deployment + Ambassador's Mapping。如何使用kubernetes python 客户端来实现这一点?
问问题
1246 次
3 回答
0
对于客户,您必须分别进行所有操作。当您在 YAML 文件中有多个文档时,kubectl 会为您拆分它们并为每个文档进行 API 调用。
于 2020-03-02T10:07:06.507 回答
0
您可以使用 config.new_client_from_config 来管理多个集群。
或使用字典中的 kube 配置而不是本地文件。
from kubernetes import client, config
from kubernetes.client import Configuration, ApiClient
def new_client_from_dict(conf: dict, context: str):
"""
create client via conf dict
"""
client_config = type.__call__(Configuration)
config.load_kube_config_from_dict(config_dict=conf, context=context, persist_config=False,
client_configuration=client_config)
return ApiClient(configuration=client_config)
client1 = client.CoreV1Api(api_client=new_client_from_dict(CLUSTER1_KUBE_CONFIG, context='cluster1'))
client2 = client.CoreV1Api(api_client=new_client_from_dict(CLUSTER2_KUBE_CONFIG, context='cluster2'))
client1.list_namespaced_pod()
client2.list_namespaced_pod()
于 2020-10-23T03:09:06.260 回答
0
我有一个 kubernetes 多资源文件有没有办法通过 kubernetes python 客户端使用这个单个文件来一次部署所有这些资源?
请检查examples
目录的内容。
from os import path
import yaml
from kubernetes import client, config
def main():
# Configs can be set in Configuration class directly or using helper
# utility. If no argument provided, the config will be loaded from
# default location.
config.load_kube_config()
with open(path.join(path.dirname(__file__), "nginx-deployment.yaml")) as f:
dep = yaml.safe_load(f)
k8s_beta = client.ExtensionsV1beta1Api()
resp = k8s_beta.create_namespaced_deployment(
body=dep, namespace="default")
print("Deployment created. status='%s'" % str(resp.status))
if __name__ == '__main__':
main()
重要提示:如果 yaml 文件包含多个资源,则必须在 yaml 文件顶部和资源之间使用三个破折号。
.../utils/create_from_yaml.py和.../examples/create_deployment_from_yaml.py也值得检查。
我有一个使用 CRD 和自定义 kubernetes 资源对象的文件
正如@coderanger 所说,该示例可以在.../docs/CustomObjectsApi.md中找到
希望有帮助。
于 2020-03-02T15:55:26.520 回答