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
2
3
4
5
6
7
8
NAME                              READY     STATUS              RESTARTS   AGE
hello-minikube-3383150820-vctvh 0/1 ContainerCreating 0 3s

#如果输出显示 STATUS 为 Running,则 Pod 现在正在运行:

NAME READY STATUS RESTARTS AGE
hello-minikube-3383150820-vctvh 1/1 Running 0 13s

获取暴露 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
2
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "false"

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