daemonset 不会创建任何 pod

问题描述 投票:0回答:6

我正在尝试使用 Kubernetes DaemonSets,但一点运气都没有。我已经寻找解决方案但无济于事。我希望这里有人可以帮忙。

首先,我看到了这张票。重新启动控制器管理器似乎没有帮助。正如你在这里看到的,其他 kube 进程都在 apiserver 之后启动,并且 api 服务器设置了 '--runtime-config=extensions/v1beta1=true' 。

kube     31398     1  0 08:54 ?        00:00:37 /usr/bin/kube-apiserver --logtostderr=true --v=0 --etcd_servers=http://dock-admin:2379 --address=0.0.0.0 --allow-privileged=false --portal_net=10.254.0.0/16 --admission_control=NamespaceAutoProvision,LimitRanger,ResourceQuota --runtime-config=extensions/v1beta1=true
kube     12976     1  0 09:49 ?        00:00:28 /usr/bin/kube-controller-manager --logtostderr=true --v=0 --master=http://127.0.0.1:8080 --cloud-provider=
kube     29489     1  0 11:34 ?        00:00:00 /usr/bin/kube-scheduler --logtostderr=true --v=0 --master=http://127.0.0.1:8080 

但是 api-versions 仅显示版本 1:

$ kubectl api-versions
Available Server Api Versions: v1

Kubernetes 版本为 1.2:

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"2", GitVersion:"v1.2.0", GitCommit:"86327329213fed4af2661c5ae1e92f9956b24f55", GitTreeState:"clean"}
Server Version: version.Info{Major:"1", Minor:"2", GitVersion:"v1.2.0", GitCommit:"86327329213fed4af2661c5ae1e92f9956b24f55", GitTreeState:"clean"}

DaemonSet 已创建,但似乎没有计划 pod (status.desiredNumberScheduled)。

$ kubectl get ds -o json
{
    "kind": "List",
    "apiVersion": "v1",
    "metadata": {},
    "items": [
        {
            "kind": "DaemonSet",
            "apiVersion": "extensions/v1beta1",
            "metadata": {
                "name": "ds-test",
                "namespace": "dvlp",
                "selfLink": "/apis/extensions/v1beta1/namespaces/dvlp/daemonsets/ds-test",
                "uid": "2d948b18-fa7b-11e5-8a55-00163e245587",
                "resourceVersion": "2657499",
                "generation": 1,
                "creationTimestamp": "2016-04-04T15:37:45Z",
                "labels": {
                    "app": "ds-test"
                }
            },
            "spec": {
                "selector": {
                    "app": "ds-test"
                },
                "template": {
                    "metadata": {
                        "creationTimestamp": null,
                        "labels": {
                            "app": "ds-test"
                        }
                    },
                    "spec": {
                        "containers": [
                            {
                                "name": "ds-test",
                                "image": "foo.vt.edu:1102/dbaa-app:v0.10-dvlp",
                                "ports": [
                                    {
                                        "containerPort": 8080,
                                        "protocol": "TCP"
                                    }
                                ],
                                "resources": {},
                                "terminationMessagePath": "/dev/termination-log",
                                "imagePullPolicy": "IfNotPresent"
                            }
                        ],
                        "restartPolicy": "Always",
                        "terminationGracePeriodSeconds": 30,
                        "dnsPolicy": "ClusterFirst",
                        "securityContext": {}
                    }
                }
            },
            "status": {
                "currentNumberScheduled": 0,
                "numberMisscheduled": 0,
                "desiredNumberScheduled": 0
            }
        }
    ]
}

这是我用于创建 DaemonSet 的 yaml 文件

apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: ds-test
spec:
  selector:
    app: ds-test
  template:
    metadata:
      labels:
        app: ds-test
    spec:
      containers:
      - name: ds-test
        image: foo.vt.edu:1102/dbaa-app:v0.10-dvlp
        ports:
          - containerPort: 8080

使用该文件创建 DaemonSet 似乎可以工作(我得到“daemonset“ds-test”已创建”),但没有创建 pod:

$ kubectl get pods -o json
{
    "kind": "List",
    "apiVersion": "v1",
    "metadata": {},
    "items": []
}
kubernetes
6个回答
5
投票

(如果我有足够的声誉,我会将此作为评论发布)

我对你的输出感到困惑。

如果在服务器上启用了

kubectl api-versions
,则应打印出
extensions/v1beta1
。因为没有,所以看起来扩展/v1beta1 没有启用。

但是如果未启用扩展/v1beta1,

kubectl get ds
应该会失败。所以我无法确定您的服务器上是否启用了 extensions/v1beta1 。

您可以尝试 GET

masterIP/apis
看看扩展程序是否列在其中吗? 您还可以转到
masterIP/apis/extensions/v1beta1
并查看那里是否列出了守护进程集。

另外,我看到

kubectl version
说1.2,但是
kubectl api-versions
不应该打印出字符串
Available Server Api Versions
(该字符串在1.1中被删除:https://github.com/kubernetes/kubernetes/pull/15796 ).


2
投票

我的集群中存在此问题(k8s 版本:1.9.7):

enter image description here

Daemonset由“Daemonset控制器”而不是“调度程序”控制,所以我重新启动

controller manager
,问题解决了:

enter image description here

但我认为这是 kubernetes 的问题,一些相关信息:

错误 1469037 - 有时 daemonset DESIRED=0 即使是这个匹配的节点

v1.7.4 - Daemonset DESIRED 0(用于节点导出器)#51785


1
投票

我遇到了类似的问题,然后尝试在 kube-system 命名空间中搜索守护进程集,如此处所述,https://github.com/kubernetes/kubernetes/issues/61342 我实际上也得到了正确的输出


0
投票

对于 pod 的当前状态不等于所需状态的任何情况(无论是由 DaemonSet、ReplicaSet、Deployment 等创建)我会首先检查当前节点上的 Kubelet

$ sudo systemctl status kubelet 

或者:

$ sudo journalctl -u kubelet

在许多情况下,由于以下错误,我的集群中未创建 pod:

Couldn't parse as pod (Object 'Kind' is missing in 'null')

在 vim 等编辑器中编辑资源的 yaml 后,可能会发生


0
投票

我在 EKS 集群上安装 EKS 插件时遇到过这种情况,结果发现我的所有工作节点都有一定的污点,我必须向插件的 DaemonSets 添加容忍度。


-4
投票

尝试:

$kubectl 污点节点 --all node-role.kubernetes.io/master:NoSchedule-

主节点无法接受 Pod。

© www.soinside.com 2019 - 2024. All rights reserved.