前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >研发工程师玩转Kubernetes——创建一个测试容器

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

作者头像
方亮
发布2023-05-31 14:39:31
2790
发布2023-05-31 14:39:31
举报
文章被收录于专栏:方亮方亮

测试容器并不是什么都没有的容器,只是它没有我们期望的常驻进程。我们常用它来做一些测试。

举个例子,在《研发工程师玩转Kubernetes——自动扩缩容》中我们使用本地wrk进行了压力测试。如果我们希望进入容器手工调用wrk,该怎么做呢?

错误的案例

虽然下面这个清单文件的镜像中包含了wrk程序,但是它没有启动一个常驻进程。导致运行这个Pod一直会报错“Back-off restarting failed container”,Reason是CrashLoopBackOff。

代码语言:javascript
复制
apiVersion: v1
kind: Pod
metadata:
  name: wrk
  labels:
    name: wrk
spec:
  containers:
  - name: wrk-container
    image: localhost:32000/wrk:v1
代码语言:javascript
复制
kubectl describe pod wrk
代码语言:javascript
复制
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: 75a18bfd3f3d83dd14b7bc9655343842d9bac20a4c52a7ee75932013be395e01
                  cni.projectcalico.org/podIP: 10.1.62.178/32
                  cni.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://80d5186f701de4ccd861dc84078290250f3452a90ed226cb246a4f6b9aab5ef6
    Image:          localhost:32000/wrk:v1
    Image ID:       localhost:32000/wrk@sha256:3548119fa498e871ac75ab3cefb901bf5a069349dc4b1b92afab8db4653f6b25
    Port:           <none>
    Host Port:      <none>
    State:          Waiting
      Reason:       CrashLoopBackOff
    Last State:     Terminated
      Reason:       Completed
      Exit Code:    0
      Started:      Mon, 29 May 2023 14:31:17 +0800
      Finished:     Mon, 29 May 2023 14:31:17 +0800
    Ready:          False
    Restart Count:  3
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-ld6j6 (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             False 
  ContainersReady   False 
  PodScheduled      True 
Volumes:
  kube-api-access-ld6j6:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.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-machine
  Normal   Pulled     14s (x4 over 53s)  kubelet            Container image "localhost:32000/wrk:v1" already present on machine
  Normal   Created    14s (x4 over 53s)  kubelet            Created container wrk-container
  Normal   Started    14s (x4 over 53s)  kubelet            Started container wrk-container
  Warning  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”

即把清单文件改成如下

代码语言:javascript
复制
# wrk_pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: wrk
  labels:
    name: wrk
spec:
  containers:
  - name: wrk-container
    image: localhost:32000/wrk:v1
    command: ["/bin/bash", "-ce", "tail -f /dev/null"]

测试

创建Pod

代码语言:javascript
复制
kubectl create -f wrk_pod.yaml

pod/wrk created

登录容器

代码语言:javascript
复制
kubectl exec wrk -c  wrk-container -it /bin/bash

执行指令

代码语言:javascript
复制
wrk -t10 -c10 -d10  http://192.168.137.248:30000

可见,我们已经可以在这个测试容器中执行我们想执行的指令了。

参考资料

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-05-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 错误的案例
  • 正确的案例
  • 测试
    • 创建Pod
      • 登录容器
        • 执行指令
        • 参考资料
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档