k8s 容器实例command 巧用

说明: 很多时候我不想重新构建镜像,并且想要将完成shell脚本而不仅仅是简单的命令作为k8s容器实例command参数输入并且执行。可以借鉴comfigmap的写法使用管道符来输入一个完整的的文件内容。在k8s容器环境,更加适合使用定时任务定时执行一段完整的shell脚本

1、普通实例的写法

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: my-pod
  name: my-pod
  namespace: default
spec:
  containers:
  - args:
    - /bin/sh
    - -c
    - |-
      #!/bin/sh
      cat /etc/hosts
      echo "这是一个测试实例"
      echo $(date)
      tail -f /etc/hosts
    image: busybox:latest
    imagePullPolicy: Always
    name: my-pod

2、定时任务写法

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: my-cronjob
spec:
  schedule: "*/5 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: my-container
            image: busybox:latest
            command:
            - /bin/sh
            - -c
            - |
              #!/bin/sh
              cat /etc/hosts
              echo "这是一个测试实例"
              echo $(date)
              #tail -f /etc/hosts
          restartPolicy: OnFailure

### 如何在Kubernetes容器内部运行命令 为了在Kubernetes容器内执行命令,`kubectl exec` 是最常用的工具之一。此命令允许用户与正在运行的Pod内的容器交互并执行各种操作。 通过 `kubectl exec` 命令可以在指定的Pod中执行指令[^2]: ```bash kubectl exec <pod-name> -- <command> ``` 例如,在名为 `mypod` 的Pod中列出根目录下的文件,可使用下面的命令: ```bash kubectl exec mypod -- ls / ``` 对于更复杂的场景,比如当一个Pod中有多个容器时,则需要指明要向哪个容器发送命令。这可以通过 `-c` 或者 `--container` 参数实现: ```bash kubectl exec <pod-name> -c <container-name> -- <command> ``` 如果想要获得更加沉浸式的体验,即获取一个类似于登录到远程服务器上的shell会话,那么可以附加 `-it` 参数以启用交互模式,并分配伪TTY给该session: ```bash kubectl exec -it <pod-name> -- /bin/bash ``` 需要注意的是,不是所有的镜像都自带 `/bin/bash`; 对于那些没有安装Bash shell的情况,通常可以用 `/bin/sh` 替代它。 另外,除了直接利用 `kubectl exec` 来调用命令外,还可以考虑其他方法来访问容器环境。例如,查询容器进程ID (PID),进而借助宿主机的操作系统功能进一步诊断问题[^4]: ```bash docker inspect <container-id>|grep -i pid ``` 不过这种方法依赖于集群配置为Docker作为其容器运行时,并且拥有对节点层面的SSH访问权限。 最后值得注意的一点是,虽然单个Pod可能包含多个协同工作的容器实例,但是上述提到的方法都是针对特定的一个容器而言的;因此每次都需要明确指出目标容器的名字以便准确无误地完成所需的任务[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值