You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过kubectl启动Kubernetes中Traefik Ingress Controller DaemonSet

解决Traefik Ingress Controller DaemonSet无法启动的问题

咱们先梳理下你遇到的核心问题:能通过k get daemonset --all-namespaces看到kube-system下的traefik-ingress-controller DaemonSet,但它的DESIRED、CURRENT副本数都是0,执行scale命令时还报NotFound错误。下面是一步步排查和解决的方法:

1. 先确认DaemonSet的真实存在性

首先得确保你没搞错资源名称或命名空间,执行这条命令验证:

kubectl get daemonset traefik-ingress-controller -n kube-system -o yaml

如果能正常返回YAML配置,说明资源确实存在;要是还是报NotFound,大概率是kubectl版本和集群版本不兼容(你用的v1.15.2,集群版本如果差得比较多,API兼容性会出问题),或者资源名称写错了(比如是不是叫traefik而非traefik-ingress-controller?)。

2. 检查节点选择器的匹配情况

你的DaemonSet设置了节点选择器IngressProxy=true,这意味着只有带这个标签的节点才会被调度。先看看集群里的节点标签:

kubectl get nodes --show-labels

要是没有任何节点带IngressProxy=true标签,那DaemonSet肯定不会启动Pod。给你想部署Traefik的节点加上标签:

# 把<node-name>换成目标节点的名称
kubectl label node <node-name> IngressProxy=true

3. 直接编辑DaemonSet配置(替代scale命令)

既然scale命令报错,咱们绕开它,直接修改DaemonSet的配置来设置期望副本数:

kubectl edit daemonset traefik-ingress-controller -n kube-system

在打开的编辑器里,找到spec.desiredNumberScheduled字段,把值从0改成1(或者你需要的数量),保存退出后,查看DaemonSet状态:

kubectl get daemonset traefik-ingress-controller -n kube-system

等个一两分钟,看看CURRENT数是不是变成1了,再检查Pod状态:

kubectl get pods -n kube-system -l app=traefik-ingress-controller

4. 排查Pod无法启动的深层原因

如果修改后还是没Pod跑起来,就查看DaemonSet的事件日志,找具体问题:

kubectl describe daemonset traefik-ingress-controller -n kube-system

重点看Events部分,常见的问题有:

  • 节点CPU/内存资源不够
  • Traefik镜像拉取失败(地址错了、私有镜像没权限)
  • 节点上已有服务占用了Traefik的端口
  • ServiceAccount权限不足

5. 解决kubectl版本兼容性问题

要是前面的步骤都没用,且你确认DaemonSet存在但scale命令就是报错,那大概率是kubectl版本和集群不匹配。你可以安装和集群版本一致的kubectl,再试scale命令:

# 示例:如果集群是v1.20.0,下载对应版本的kubectl(根据你的操作系统调整)
curl -LO "https://dl.k8s.io/release/v1.20.0/bin/linux/amd64/kubectl"
chmod +x ./kubectl
./kubectl scale --replicas=1 DaemonSet/traefik-ingress-controller -n kube-system

内容的提问来源于stack exchange,提问作者Dolphin

火山引擎 最新活动