k8s Trouble Shooting
1. kubectl –generator 参数被弃用问题解决
k8s的书籍参考的是《kubernetes in Action》这本书,但是在后期发现使用
1 | kubectl run kubia --image=luksa/kubia --port=8080 --generator=run-pod/v1 |
发现报错:
1 | Flag --generator has been deprecated, has no effect and will be removed in the future. |
原因是生成器参数已经被弃用。https://kubernetes.io/zh/docs/reference/kubectl/conventions/#%E7%94%9F%E6%88%90%E5%99%A8
解决办法
https://kubernetes.io/zh/docs/setup/learning-environment/minikube/
让我们使用名为 echoserver 的镜像创建一个 Kubernetes Deployment,并使用 –port 在端口 8080 上暴露服务。echoserver 是一个简单的 HTTP 服务器。
1 | kubectl run kubia --image=luksa/kubia --port=8080 |
输出类似于:
1 | pod/kubia created |
将其作为 Service 公开:
1 | kubectl expose pod kubia --type=NodePort |
选项 –type = NodePort 指定 Service 的类型。
输出类似于:
1 | service/kubia exposed |
现在Pod 已经启动,但是必须等到 Pod 启动完全才能通过暴露的 Service 访问它。
检查 Pod 是否启动并运行:
1 | kubectl get pod |
果输出显示 STATUS 为 ContainerCreating,则表明 Pod 仍在创建中:
1 | NAME READY STATUS RESTARTS AGE |
获取暴露 Service 的 URL 以查看 Service 的详细信息:
1 | minikube service kubia --url |
删除 Service:
1 | kubectl delete services kubia |
原文链接:https://blog.csdn.net/cangye0504/article/details/106179563
2. Ingress Nginx 跳转308问题
加入注解:
1 | annotations: |
3. Too large body 和 Too big header
502 – too big header
502错误一般是后端服务不可用,但这里是nginx-ingress返回的,在nginx-ingress可看到如下日志:
upstream sent too big header while reading response header from upstream, client…
需要在ingress配置如下参数
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/proxy-buffer-size: 128k #根据实际情况配置
nginx.ingress.kubernetes.io/proxy-buffering: “on”
nginx.ingress.kubernetes.io/server-snippet: |
large_client_header_buffers 16 128K;
client_header_buffer_size 128k;
431/400 – too big header
http header过大也有可能返回400/431, 可按照上述调整,如果还是有问题需要检查后端服务的header设置,比如golang http header默认是1M;
springboot应用需要在application.properties加上server.max-http-header-size=32KB等
413 – too large body
如果返回413,则超过了body size的限制(默认1M), 可在ingress annotation添加
nginx.ingress.kubernetes.io/proxy-body-size: 8m