kubectl exec 为什么要加 -it?

简介: kubectl exec 为什么要加 -it?

为什么kubectl exec要加-it?

最近才开始接触k8s,看早先其他同事写的文档里写如何使用pod的bash。

kubectl exec -it pod-name -n namespace bash

通过看kubectl exec -h 原命令的格式是这样

kubectl exec (POD | TYPE/NAME) [-c CONTAINER] [flags] -- COMMAND [args...] [options]

其中的Options

-c, --container='': Container name. If omitted, the first container in the pod will be chosen
    --pod-running-timeout=1m0s: The length of time (like 5s, 2m, or 3h, higher than zero) to wait until at least one
pod is running
-i, --stdin=false: Pass stdin to the container
-t, --tty=false: Stdin is a TTY

其中两项参数比较好理解,-c设置了执行命令的容器名字,以及命令超时时间,-i也说得比较明确,加了会将标准输入传到容器中去。但是-t我就不太懂。

什么是TTY?

在终端中执行tty就会发现,该命令显示了tty的文件位置,Linux很多文章和书中都提到了linux中一切都是文件。

$ tty 
/dev/tty0

终端表现的就像是一个文件,可以读也可以写

如果这么操作还有更神奇的表现

$ date > /dev/tty0
Tue Mar  1 10:30:53 CST 2022

tty是全局的文件系统,如果你这个时候又开了一个终端输入echo “Hello, Can you see me?”,那么这句话就会在第一个终端中出现。

如果不加-t会怎么样?

kubectl exec -i <podname> -n <namespace> bash 就会变成交互状态,就像进入了无GUI的窗口

$ kubectl exec -i test-675d4b584f-7nv4p -n emoxale-aat bash                             
date
Tue Mar  1 01:44:33 UTC 2022
pwd
/home

只有加了-t才会进入pod的终端。

只是浅层的现象

我只写了浅层的现象以及查了一下tty是什么东西,我看了很多大神他们看了k8s的源码,分析了exec底层如何实现的,文章超长,但我现在还停留在简单应用层面。以后也会分享k8s源码理解的。

Reference

what is tty?: https://jameshfisher.com/2017/12/09/what-is-a-tty/


相关文章
|
6月前
|
Kubernetes 负载均衡 应用服务中间件
kubectl 命令详细介绍
kubectl 命令详细介绍
|
6月前
|
存储 前端开发 IDE
YAML语法记录
YAML语法记录
113 0
|
6月前
|
Docker 容器
执行docker info出现警告解决
执行docker info出现警告解决
|
6月前
|
Shell Perl 容器
kubectl exec -it etcd-master -n kube-system /bin/bashkubectl exec [POD] [COMMAND]
kubectl exec -it etcd-master -n kube-system /bin/bashkubectl exec [POD] [COMMAND]
42 0
|
6月前
|
Kubernetes Linux Shell
Linux |奇怪的知识---complete命令---你不知道的命令参数补全---kubectl命令的参数补全
Linux |奇怪的知识---complete命令---你不知道的命令参数补全---kubectl命令的参数补全
150 0
|
Linux Perl
执行`pod mpaas`找不到命令
执行`pod mpaas`找不到命令
161 2
|
数据库
BOF和EOF的区别
BOF和EOF的区别
124 0
|
Shell C++
C++中的exec()函数
exec()函数在C++中是一个进程控制函数,用于创建新进程执行其他程序或命令行指令。exec()函数可以替换当前进程的代码和数据,创建新的进程运行其他程序。exec()函数有多个版本,例如execl、execv、execle、execve等,根据不同的参数类型和个数来使用。
175 0
4.1. [kustz] 使用 cobrautils 为命令添加更实用的命令参数
使用 cobrautils 库丰富命令行参数, 实现命令行工具的便捷性
4.1. [kustz] 使用 cobrautils 为命令添加更实用的命令参数
|
Kubernetes 网络协议 Shell
最全与最实用的kubectl 命令(1)
最全与最实用的kubectl 命令(1)