淄博网站建设优化珍云,邯郸网站建设最新报价,上海圣品科技 做网站,免费设计app的网站建设测试容器并不是什么都没有的容器#xff0c;只是它没有我们期望的常驻进程。我们常用它来做一些测试。 举个例子#xff0c;在《研发工程师玩转Kubernetes——自动扩缩容》中我们使用本地wrk进行了压力测试。如果我们希望进入容器手工调用wrk#xff0c;该怎么做呢#xff…测试容器并不是什么都没有的容器只是它没有我们期望的常驻进程。我们常用它来做一些测试。 举个例子在《研发工程师玩转Kubernetes——自动扩缩容》中我们使用本地wrk进行了压力测试。如果我们希望进入容器手工调用wrk该怎么做呢
错误的案例
虽然下面这个清单文件的镜像中包含了wrk程序但是它没有启动一个常驻进程。导致运行这个Pod一直会报错“Back-off restarting failed container”Reason是CrashLoopBackOff。
apiVersion: v1
kind: Pod
metadata:name: wrklabels:name: wrk
spec:containers:- name: wrk-containerimage: localhost:32000/wrk:v1kubectl describe pod wrkName: wrk
Namespace: default
Priority: 0
Service Account: default
Node: fangliang-virtual-machine/192.168.137.248
Start Time: Mon, 29 May 2023 14:30:37 0800
Labels: namewrk
Annotations: cni.projectcalico.org/containerID: 75a18bfd3f3d83dd14b7bc9655343842d9bac20a4c52a7ee75932013be395e01cni.projectcalico.org/podIP: 10.1.62.178/32cni.projectcalico.org/podIPs: 10.1.62.178/32
Status: Running
IP: 10.1.62.178
IPs:IP: 10.1.62.178
Containers:wrk-container:Container ID: containerd://80d5186f701de4ccd861dc84078290250f3452a90ed226cb246a4f6b9aab5ef6Image: localhost:32000/wrk:v1Image ID: localhost:32000/wrksha256:3548119fa498e871ac75ab3cefb901bf5a069349dc4b1b92afab8db4653f6b25Port: noneHost Port: noneState: WaitingReason: CrashLoopBackOffLast State: TerminatedReason: CompletedExit Code: 0Started: Mon, 29 May 2023 14:31:17 0800Finished: Mon, 29 May 2023 14:31:17 0800Ready: FalseRestart Count: 3Environment: noneMounts:/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-ld6j6 (ro)
Conditions:Type StatusInitialized True Ready False ContainersReady False PodScheduled True
Volumes:kube-api-access-ld6j6:Type: Projected (a volume that contains injected data from multiple sources)TokenExpirationSeconds: 3607ConfigMapName: kube-root-ca.crtConfigMapOptional: nilDownwardAPI: true
QoS Class: BestEffort
Node-Selectors: none
Tolerations: node.kubernetes.io/not-ready:NoExecute opExists for 300snode.kubernetes.io/unreachable:NoExecute opExists for 300s
Events:Type Reason Age From Message---- ------ ---- ---- -------Normal Scheduled 54s default-scheduler Successfully assigned default/wrk to fangliang-virtual-machineNormal Pulled 14s (x4 over 53s) kubelet Container image localhost:32000/wrk:v1 already present on machineNormal Created 14s (x4 over 53s) kubelet Created container wrk-containerNormal Started 14s (x4 over 53s) kubelet Started container wrk-containerWarning BackOff 2s (x6 over 52s) kubelet Back-off restarting failed container wrk-container in pod wrk_default(588fb4f3-d649-4570-b64c-a4eff748417d)正确的案例
我们只要启动一个常驻进程就可以解决这个问题。 在linux系统中/dev/null是一个非常特殊的文件它会抛弃所有写入其中的数据。于是我们持续查看这个文件的写入就可以制造一个常驻进程而且没有其他额外的影响。 command: [“/bin/bash”, “-ce”, “tail -f /dev/null”] 即把清单文件改成如下
apiVersion: v1
kind: Pod
metadata:name: wrklabels:name: wrk
spec:containers:- name: wrk-containerimage: localhost:32000/wrk:v1command: [/bin/bash, -ce, tail -f /dev/null]测试
创建Pod
kubectl create -f wrk_pod.yamlpod/wrk created 登录容器
kubectl exec wrk -c wrk-container -it /bin/bash执行指令
wrk -t10 -c10 -d10 http://192.168.137.248:30000可见我们已经可以在这个测试容器中执行我们想执行的指令了。
参考资料
https://blog.csdn.net/yztezhl/article/details/125421316https://linuxhint.com/what_is_dev_null/