起因
因為 調試 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
結果是可以 的 !