当前位置: 首页 > news >正文

研发工程师玩转Kubernetes——创建一个测试容器

测试容器并不是什么都没有的容器,只是它没有我们期望的常驻进程。我们常用它来做一些测试。
举个例子,在《研发工程师玩转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:v1
kubectl describe pod wrk
Name:             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:           name=wrk
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/wrk@sha256:3548119fa498e871ac75ab3cefb901bf5a069349dc4b1b92afab8db4653f6b25Port:           <none>Host Port:      <none>State:          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:    <none>Mounts:/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:       <nil>DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300snode.kubernetes.io/unreachable:NoExecute op=Exists 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.yaml

pod/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/125421316
  • https://linuxhint.com/what_is_dev_null/
http://www.lryc.cn/news/89436.html

相关文章:

  • FPGA - 7系列 FPGA内部结构之CLB -03- CLB相关原语以及应用
  • 什么是日志关联
  • 打家劫舍问题 Python题解
  • 【JavaSE】Java基础语法(十八):接口
  • SVD求解两组多维点之间的欧式变换矩阵,及halcon代码实现
  • 常用监控方案 Prometheus + Grafana 简单使用小结
  • 基于长短期神经网络LSTM的飞行轨迹跟踪预测,基于长短期神经网络LSTM的三维路径预测
  • 计算机组成原理-指令系统-指令格式及寻址方式
  • 【满分】【华为OD机试真题2023B卷 JAVAJS】经典屏保
  • Apache 网页与安全优化
  • Unity的IFilterBuildAssemblies:深入解析与实用案例
  • 分片架构,Redis Cluster 分析
  • Linux-0.11 文件系统bitmap.c详解
  • 【Linux】基本指令,拥抱Linux的第一步
  • CTF 2015: Search Engine-fastbin_dup_into_stack
  • DRF之全局异常处理
  • AI创作工具的使用体验报告
  • C++算法模板(转自acwing)
  • 阿里云服务器最新优惠价格及最新收费标准(2023更新)
  • React实现监听粘贴事件并获取粘贴板中的截图
  • ISO_IEC_7816-3
  • 学习C#反射(Reflection)
  • Spring Boot的核心组件和工作原理
  • 【指针的深刻理解】
  • lintcode-图的拓扑排序(java)
  • 【状态估计】基于随机方法优化PMU优化配置(Matlab代码实现)
  • Rinne Loves Graph
  • 第15章:索引的数据结构
  • 机械师曙光16电脑开机自动蓝屏怎么解决?
  • 机器学习_Lasso回归_ElasticNet回归_PolynomialFeatures算法介绍_02---人工智能工作笔记0037