1. grpc调试工具
# 容器中操作
RUN GRPC_HEALTH_PROBE_VERSION=v0.3.1 &&
wget -qO/bin/grpc_health_probe https://github.com/grpc-ecosystem/grpc-health-probe/releases/download/${GRPC_HEALTH_PROBE_VERSION}/grpc_health_probe-linux-amd64 &&
chmod +x /bin/grpc_health_probe
# 或者下载二进制文件
https://github.com/grpc-ecosystem/grpc-health-probe/releases/download/v0.3.1/grpc_health_probe-linux-amd64
cp grpc_health_probe-linux-amd64 /usr/bin/grpc_health_probe && chmod 755 /usr/bin/grpc_health_probe
# 使用
grpc_health_probe -addr 10.2.2.51:9090
status: SERVING
2. 滚动重启deployment
# 1.15版本后
kubectl rollout restart ${deployment-name} -n ${namespace}
# 给deployment加一个参数
kubectl patch deployment
-p '{"spec":{"template":{"spec":{"containers":[{"name":"","env":[{"name":"RESTART_","value":"'$(date +%s)'"}]}]}}}}'
3. 网络调试nsenter
- 相当多的容器为了轻量级,是不包含较为基础的命令的,比如说ip address,ping,telnet,ss,tcpdump等等命令,这就给调试容器网络带来相当大的困扰:只能通过docker inspect ContainerID命令获取到容器IP,以及无法测试和其他网络的连通性。这时就可以使用nsenter命令仅进入该容器的网络命名空间,使用宿主机的命令调试容器网络。
# 1.找到容器的宿主机
kubectl -n kube-public get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
test-nginx-69956c9698-2k8p5 1/1 Running 0 16h xxxx slave02
# 2.ssh到容器所在的宿主机,并找到容器的
ssh slave02
docker ps -a |grep 'test-nginx'
# 3.过滤容器信息中的pid信息
docker inspect a27e4afd5a54 | grep -i pid
"Pid": 20287,
"PidMode": "",
"PidsLimit": null,
# 4.通过nsenter进入容器pid的命令空间,然后可以用宿主机的命令curl ping等等命令检查和调试网络是否通
nsenter -t 20287 -n ip a