前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Tke1.20.6升级Tke1.22.5留下的坑

Tke1.20.6升级Tke1.22.5留下的坑

原创
作者头像
对你无可奈何
修改2023-07-21 16:45:01
4890
修改2023-07-21 16:45:01
举报
文章被收录于专栏:运维专栏

背景:

线上kubernetes集群,tke 1.20.6版本,跑了两年多了。六月底升级了master节点1.22.5版本

升级须知里面风险点各种文档检查都正常.......

work节点没有升级,只是升级了master节点,就这样跑了三周,期间缩容的时候出现了eck admissionregistration.k8s.io/v1beta1 api的问题。今天集群中一个节点上面的traefik pod 重启了,然后随之的问题来了......http访问出现大量404!

问题排查过程

关于traefik

2021年安装的,详见Kubernetes 1.20.5 安装traefik在腾讯云下的实践.基本就是如下的样子:

图都是后面随手截过来凑数的!

确认问题出现在网关代理层

扫了一眼服务基本都跑了十多天了没有什么异常,直接定位去看traefik 网关代理:

代码语言:txt
复制
kubectl get pods -n traefik

注:图片就拿来凑数的 ,当时没有截图,手都要发抖了.......

看到有一个traefik pod 重启了,查看一下traefik pod的日志:

代码语言:txt
复制
kubectl logs -f traefik-ingress-controller-xxxx -n traefik

出现大量Failed to watch v1beta1.Ingress: failed to list v1beta1.Ingress: the server could not find the requested resource (get ingresses.extensions) 。看到这里,个人基本确认是kubernetes集群升级留下的后遗症!还是crd rbac这些自定义资源的问题......

升级traefik集群

基本就是重新执行了一遍 crd 文件和rbac配置文件:

参照:https://doc.traefik.io/traefik/reference/dynamic-configuration/kubernetes-crd/,一切以官方文件为准:

cat traefik-crd.yaml就忽略了官方看吧太长了

代码语言:txt
复制
kubectl apply -f traefik-crd.yaml

还是参照上面的文档 但是rbac文件中注意namespace的名称 sa要与部署应用在同一namespace!

代码语言:txt
复制
kind: ClusterRole
metadata:
  name: traefik-ingress-controller

rules:
  - apiGroups:
      - ""
    resources:
      - services
      - endpoints
      - secrets
    verbs:
      - get
      - list
      - watch
  - apiGroups:
      - extensions
      - networking.k8s.io
    resources:
      - ingresses
      - ingressclasses
    verbs:
      - get
      - list
      - watch
  - apiGroups:
      - extensions
      - networking.k8s.io
    resources:
      - ingresses/status
    verbs:
      - update
  - apiGroups:
      - traefik.containo.us
    resources:
      - middlewares
      - middlewaretcps
      - ingressroutes
      - traefikservices
      - ingressroutetcps
      - ingressrouteudps
      - tlsoptions
      - tlsstores
      - serverstransports
    verbs:
      - get
      - list
      - watch

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: traefik-ingress-controller

roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: traefik-ingress-controller
subjects:
  - kind: ServiceAccount
    name: traefik-ingress-controller
    namespace: traefik
代码语言:txt
复制
kubectl apply -f traefik-rbac.yaml -n traefik

然后顺手修改了一下traefik镜像版本 2.4-2.9。等待所有pod running后404异常解除,当然了这里还可能有以下问题:

traefik pod日志中可能会出现这样的日志:

参照:

https://doc.traefik.io/traefik/reference/dynamic-configuration/kubernetes-gateway/#rbac

cat gateway-rbac.yaml

代码语言:txt
复制
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: gateway-role
rules:
  - apiGroups:
      - ""
    resources:
      - namespaces
    verbs:
      - list
      - watch
  - apiGroups:
      - ""
    resources:
      - services
      - endpoints
      - secrets
    verbs:
      - get
      - list
      - watch
  - apiGroups:
      - gateway.networking.k8s.io
    resources:
      - gatewayclasses
      - gateways
      - httproutes
      - tcproutes
      - tlsroutes
    verbs:
      - get
      - list
      - watch
  - apiGroups:
      - gateway.networking.k8s.io
    resources:
      - gatewayclasses/status
      - gateways/status
      - httproutes/status
      - tcproutes/status
      - tlsroutes/status
    verbs:
      - update

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: gateway-controller

roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: gateway-role
subjects:
  - kind: ServiceAccount
    name: traefik-ingress-controller
    namespace: traefik
代码语言:txt
复制
kubectl apply -f gateway-rbac.yaml -n traefik

异常解除..... 差不多花了二十多分钟....主要也是当时毛了,手忙脚乱......

总结

  1. 升级确保检查组件版本 与集群版本兼容匹配性。跟腾讯tke团队反馈过这个问题,他们后续也会增加版本升级的api兼容性检查。
  2. 以后项目更新过程中对集群组件进行适当的更新保持组件版本的迭代更新,尽量利用更新维护时间发现问题解决问题。避免线上环境突发这样的异常状态。
  3. 404异常访问告警的添加,404类报警开始都屏蔽了,认为是正常状态。后续添加404访问到达阈值或者其他计算方法的一个报警规则。

另外

以上gateway-rbac的操作在AWS alb eks traefik realip后端真实IP中有遇到过

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景:
  • 问题排查过程
    • 关于traefik
      • 确认问题出现在网关代理层
        • 升级traefik集群
        • 总结
        • 另外
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档