【问题标题】:ValueError: Invalid value for selector, must not be NoneValueError:选择器的值无效,不得为无
【发布时间】:2020-08-03 03:02:02
【问题描述】:

我对 Kubernetes 很陌生,我必须使用 Kubernetes python-client 创建一个 pod。 因此,为了进行实验,我正在尝试运行项目提供的examples notebooks,而不做任何更改,看看事情是如何工作的。

在第 3 步以 intro_notebook.ipynb 开始出现错误:

ValueError: Invalid value for `selector`, must not be `None`

代码如下:

from kubernetes import client, config

我唯一更改的部分是第二个单元,因为我使用 Ubuntu 的 microk8s 运行 Kubernetes:

config.load_kube_config('/var/snap/microk8s/current/credentials/client.config')
api_instance = client.AppsV1Api()
dep = client.V1Deployment()
spec = client.V1DeploymentSpec() # <<< At this line I hit the error!

完整的回溯:

ValueError                                Traceback (most recent call last)
<ipython-input-9-f155901e8381> in <module>
      1 api_instance = client.AppsV1Api()
      2 dep = client.V1Deployment()
----> 3 spec = client.V1DeploymentSpec()

~/.local/share/virtualenvs/jupyter-2hJZ4kgI/lib/python3.8/site-packages/kubernetes/client/models/v1_deployment_spec.py in __init__(self, min_ready_seconds, paused, progress_deadline_seconds, replicas, revision_history_limit, selector, strategy, template)
     76         if revision_history_limit is not None:
     77             self.revision_history_limit = revision_history_limit
---> 78         self.selector = selector
     79         if strategy is not None:
     80             self.strategy = strategy

~/.local/share/virtualenvs/jupyter-2hJZ4kgI/lib/python3.8/site-packages/kubernetes/client/models/v1_deployment_spec.py in selector(self, selector)
    215         """
    216         if selector is None:
--> 217             raise ValueError("Invalid value for `selector`, must not be `None`")  # noqa: E501
    218 
    219         self._selector = selector

ValueError: Invalid value for `selector`, must not be `None`

我正在运行python3.8

$ pip freeze | grep -e kuber
kubernetes==11.0.0

$ snap list microk8s 
Name      Version  Rev   Tracking       Publisher   Notes
microk8s  v1.18.6  1551  latest/stable  canonical✓  classic

更新

将 microk8s 降级到 v1.15.11 并没有解决问题。

【问题讨论】:

  • 您确定这是错误吗?通常会有一个完整的回溯,包括失败的行。
  • 请包括整个错误提示以及代码。
  • @FooBar 你能分享一下你集群运行的 Kubernetes 版本吗?
  • @hilsenrat 添加的版本:v1.18.6。这是兼容性问题吗?我可以列出 pod...
  • @FooBar 可能是......正如你看到的in that issue,Python 客户端现在只支持到 Kubernetes v1.15。

标签: python python-3.x kubernetes kubernetes-apiserver


【解决方案1】:

这是因为他们将验证更改为在构造函数中进行,而不是稍后进行 - 这不是笔记本所期望的。 他们你只需要在构造Deployment之前将这些内部分配向上移动即可:

name = "my-busybox"
spec = client.V1DeploymentSpec(
    selector=client.V1LabelSelector(match_labels={"app":"busybox"}),
    template=client.V1PodTemplateSpec(),
)
container = client.V1Container(
    image="busybox:1.26.1",
    args=["sleep", "3600"],
    name=name,
)
spec.template.metadata = client.V1ObjectMeta(
    name="busybox",
    labels={"app":"busybox"},
)
spec.template.spec = client.V1PodSpec(containers = [container])
dep = client.V1Deployment(
    metadata=client.V1ObjectMeta(name=name),
    spec=spec,
)

【讨论】:

  • 谢谢,我迷路了……我的意思是,真的迷路了!
  • 如果 kubernetes python 客户端是你第一次接触 python,那是一个粗略的起点。如果 kubernetes python 客户端是您第一次接触 kubernetes,那肯定是错误的起点
  • 这是第二个。 “Kubernetes python 客户端几乎是我第一次接触 Kubernetes”。我只有 Kubernetes 的基本知识,什么是集群,什么是节点或 pod。如何运行 pod...这就是我从初学者课程中所知道的几乎所有内容...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-17
  • 2019-10-26
  • 1970-01-01
  • 1970-01-01
  • 2015-01-01
  • 2017-11-11
相关资源
最近更新 更多