在云原生环境下使用nginx-ingress-controller作为网关服务,我们希望能监控网关流量,重点监控访问者的IP和访问的服务。目前使用比较多的两种基于 NGINX 的 Ingress 控制器实现:一种是nginxinc/kubernetes-ingress,另一种是kubernetes/ingress-nginx,我们使用的是nginxinc/kubernetes-ingress
,它是nginx社区维护的一个版本。开始准备通过metric暴露nginx-ingress-controller的监控指标,使用Prometheus进行采集,发现nginx社区维护的这个开源版kubernetes-ingress可收集的监控指标非常少。我们需要的信息其实Nginx都有打印日志,所以,我们决定采集nginx-ingress-controller的日志,最终收集到ES中进行存储,后期就可以使用Kibana查询这些日志,甚至对这些日志进行分析。
在K8s云环境下,如何查询某一Linux系统进程ID与Pod对应关系需要一定的技巧。本文利用在K8s集群中某一机器的文件描述符占用过高的问题,排查定位到对应Pod的一次经验记录Linux系统进程ID与Pod对应关系查询思路。
本文详细介绍了如何通过Kubernetes中的Go语言调用API Server来实现创建Job任务。该功能需要实现创建Job执行任务、任务完成后提取日志中的JSON并解析入库,以及支持周期执行等步骤。这些都得益于client-go包的支持才能轻松实现,但在实践中也遇到了一些值得记录的问题。
有两种基于 NGINX 的 Ingress 控制器实现:一种是nginxinc/kubernetes-ingress,另一种是kubernetes/ingress-nginx。
Grafana Image Renderer
是一个 Grafana 后端插件,它使用无头浏览器 (Chromium) 将面板和仪表板渲染为 PNG。比如下面的邮件通知,Include image
功能则需要这个插件。
我们都知道在k8s中,NameSpace是资源隔离的,那如何在命名空间A中调用B中的服务呢?直接使用服务名.命名空间名.svc.cluster.local
就可以实现,那么还有其它办法吗?
先说答案:第一种方式:在NameSpace A中创建无Selecter选择运算符的Service,然后手动创建EndPoints指向NameSpace B中的Service IP。或者第二种方式使用ExternalName 类型的Service
K8s中flexvolume插件驱动的安装只需要将对应驱动文件放到对应宿主机目录下,k8s 1.17及其之前需要重启kubelet组件生效
我们知道k8s中可以通过服务名进行调用,初次部署coredns后正常运行但无法解析服务名,导致各pod之间通信不能通过svc,排查后发现kube-proxy报如下错误:
在k8s中使用了ingress-nginx-controller作为Ingress控制器,默认bodysize最大限制为1M,在类似文件上传下载比较大的请求中就会出现失败返回413状态码的情况。如果是nginx-ingress-controller注解是不一样的,它们两的区别可以查看我另一篇文章K8s中的两种nginx-ingress-controller及其区别
在K8s中我们知道可以使用Exec或TCP或HTTP对应用进行就绪探针检测和存活检测、以便K8s可以对应用进行平滑更新、升级、关停等。最近在K8s中部署SpringBoot应用,使用TCP 8080(应用端口)进行就绪探针检测,在更新应用时发现了一个问题。