起因
因为 调试 k8s 里面的接口的时候 要进到 pod 里面 才行(网络的原因 dns) ,然后 有的pod 里面 连个 ping 都没有…… 直接装了 下次 pod 杀死 再换 ping 工具 就没有了
所以想着自己专门搞个调试 的 pod , 里面 httpie ping 等工具都安装好了,就 不用每次 都 在 服务的pod 里面调试 了
制作 dockerfile
FROM alpine:latest
# 设置国内源
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories
RUN apk update
# 安装 httpie 工具
RUN apk add httpie
# 后面想要啥工具自己添加
制作 k8s pod
因为 这个相当于是个工具 ,也没有 自己的server ,所以就不用 弄 k8s 的 service 了, 直接 pod 完事
# 自己写的 http-test k8s pod 主要用来 http 测试 服务好不好用
apiVersion: v1
kind: Pod
metadata:
name: http-test
spec:
containers:
- name: http-test
image: http-test:latest
imagePullPolicy: IfNotPresent
启动 k8s 的 pod
k apply -f deployments/addons/http-test.yaml
然后 问题就来了 ,他会频繁的重启 ,然后 显示的就是 CrashLoopBackOff
$ k get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
http-test 1/2 CrashLoopBackOff 1 (14s ago) 18s 10.244.0.184 k8s-master-node1 <none> <none>
后来百度查了下 说是 容器运行需要有输出,通常是容器中运行程序的日志输出(容器通常就是运行一个应用) , 为了能够让容器不退出,你可以在运行命令中添加一段死循环
修改 pod.yaml
# 自己写的 http-test k8s pod 主要用来 http 测试 服务好不好用
apiVersion: v1
kind: Pod
metadata:
name: http-test
spec:
containers:
- name: http-test
image: http-test:latest
imagePullPolicy: IfNotPresent
command: # pod 起来调用命令 让他睡个一个小时
- sleep
- "3600"
然后 在看结果 就能 running 啦
$ k get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
http-test 1/2 Running 0 4s 10.244.0.185 k8s-master-node1 <none> <none>
进去看看能不能访问其他 service
$ k exec -it http-test -- sh
/ # http get http://blog-server:8050/api/menu
HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
date: Tue, 22 Mar 2022 02:31:11 GMT
server: envoy
transfer-encoding: chunked
x-envoy-upstream-service-time: 16
结果是可以 的 !