k8s的坑,从这里开始

本文概述了初学者在使用k8s时遇到的五个常见问题,包括kubectl权限设置、node添加错误、API端口问题、master节点调度限制以及pod查找失败,提供了详细的解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。


以前刚接触k8s时踩了不少坑,比如这些:

问题1

1、在master节点使用kubectl命令时,报错:The connection to the server localhost:8080 was refused - did you specify the right host or port?
在这里插入图片描述

原因和解决:

执行以下命令配置kubectl,作为普通用户管理集群并在集群上工作:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

另外,kubectl命令需要使用kubernetes-admin来运行,所以如果是在非master节点也要使用kubectl命令,就需要将主节点中的/etc/kubernetes/admin.conf文件拷贝到从节点相同目录下,然后配置环境变量,并source生效:

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile

问题2

2、在k8s集群添加node节点时,报错:[ERROR FileContent–proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1

原因和解决:
这个报错,在很多博客都有提到,应该把/proc/sys/net/bridge/bridge-nf-call-iptables文件改成1:
在这里插入图片描述

问题3

3、k8s集群添加node,卡着半天不动:

原因和解决:
检查了命令、token,最后发现是api端口问题。
就是添加节点的命令中,master节点的端口用错了,一般是用6443端口,但是如果有自定义改动,要注意端口的变化。
在这里插入图片描述

问题4

4、k8s集群节点不够用,想要把pod分发到master节点,死活分发不上去

问题和解决:
用kubeadm 安装的k8s集群默认情况 master节点是不参与pod负载的,就是说pod并不会被调度到master节点上运行,只会调度到work 节点上运行。但是如果资源紧张,需要临时让master接受pod调度,可以去掉master身上的标签:

kubectl taint node k8s-master node-role.kubernetes.io/master-   
#k8s-master是在master节点运行kubectl get node命令,看到的master节点的name

如下图:
在这里插入图片描述
在这里插入图片描述

让 master节点恢复不参与POD负载的命令为

kubectl taint node <node-name> node-role.kubernetes.io/master=:NoSchedule`

让 master节点恢复不参与POD负载,并将Node上已经存在的Pod驱逐出去的命令为:

kubectl taint nodes <node-name> node-role.kubernetes.io/master=:NoExecute

问题5

5、kubectl describe pod查看pod详情,提示pod not found,如“Error from server (NotFound): pods “prometheus-0” not found”
在这里插入图片描述

原因和解决:
看上图,熟悉了k8s命令之后,一眼就看出来问题了,就是命令中没有指定namespace名字。K8S默认是在default的namespace下,如果不指定namespace,就会去default下面找这个pod,如果找不到,就会报错。
所以,要记得指定namespace:
在这里插入图片描述

k8s常用命令
可参考链接:https://www.jianshu.com/p/2ded3a8cc788

### 使用 Prometheus 监控 Kubernetes 的最佳实践 #### 部署方式的选择 为了确保 Prometheus 能够高效稳定地运行于 Kubernetes 集群中,推荐使用 Helm 这样的包管理工具来简化部署过程。通过 Helm 可以快速配置并启动完整的监控堆栈,其中包括 Prometheus 服务器、Alertmanager 和 Grafana 等组件[^4]。 ```bash helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update helm install prometheus prometheus-community/kube-prometheus-stack ``` 上述命令会自动完成 Prometheus 的安装及其依赖服务的初始化工作。这种方式不仅减少了手动操作带来的错误风险,还提供了灵活的自定义选项以便满足特定需求。 #### 数据持久化设计 为了避免因 Pod 删除而导致数据丢失的情况发生,在设置 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 参数时需特别留意。通常情况下,应该为 Prometheus Server 创建独立存储空间,并将其挂载至 `/etc/prometheus/` 下作为配置文件目录以及时间序列数据库路径[^3]。 ```yaml volumeMounts: - name: prometheus-config-volume mountPath: /etc/prometheus/ volumes: - name: prometheus-config-volume persistentVolumeClaim: claimName: prometheus-data-pvc ``` 此 YAML 片段展示了如何绑定 PVC 到指定容器内部位置上,从而保障即使节点迁移也不会影响到历史记录完整性。 #### 访问权限控制 考虑到安全性因素,建议采用 Role-Based Access Control(RBAC),授予最小必要权利给相关资源对象访问者。这一步可通过 ServiceAccount 结合 ClusterRoleBinding 或 RoleBinding 来达成目标。同时也要记得开启 TLS 加密通信机制保护敏感信息传输安全。 另外值得注意的是当本地调试或者远程接入 Prometheus UI 页面时可利用 `kubectl port-forward` 命令建立端口映射关系方便快捷查看实时状态图表[^2]: ```bash kubectl port-forward prometheus-monitoring-{your_pod_name} 8080:9090 -n monitoring ``` 这里 `{your_pod_name}` 应替换实际存在的 Prometheus 实例名称。 #### 自动发现与抓取规则优化 最后一点就是关于 Target Discovery(目标探测)部分的内容调整了。默认情况下 kube-state-metrics 提供丰富的 API 接口用于描述各种 K8S 对象的状态变化情况;而 node-exporter 主要负责采集宿主机层面性能指标比如 CPU/Memory/Disk I/O etc.. 因此合理规划这两类 Exporters 所覆盖范围对于提升整体效率至关重要。 综上所述,遵循以上几点指导原则能够帮助构建更加健壮可靠的 Prometheus-Kubernetes 组合解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值