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/


相关文章
|
缓存 自然语言处理 Java
详解FreeMarker Template:在Spring Boot中实现动态内容生成
详解FreeMarker Template:在Spring Boot中实现动态内容生成
2895 13
|
6月前
|
Linux
Linux 麒麟系统安装 make rpm 包步骤
下载make-4.3 RPM包,通过终端进入下载目录,使用`sudo yum install ./make-4.3-1.ky10.x86_64.rpm`安装,自动解决依赖,最后运行`make --version`验证是否成功。推荐此方法避免手动处理依赖问题,确保安装顺利。
1377 3
|
8月前
|
存储 弹性计算 人工智能
阿里云渠道商:云文件存储 NAS是什么?
阿里云NAS提供云端共享存储,多台服务器可同时访问同一文件,解决版本混乱难题。支持跨地域挂载、自动备份与按需付费,适用于团队协作、数据共享等场景,开箱即用,免运维,助力企业高效上云。
|
5月前
|
机器学习/深度学习 敏捷开发 人工智能
阿里云人工智能平台PAI和百炼有什么区别?PAI和百炼定位、功能及使用方法对比
阿里云PAI是“造模型”平台,面向算法工程师,支持从训练到部署的全周期AI开发;百炼是“用模型”平台,聚焦大模型快速应用,助力业务团队低门槛构建智能体。两者互补协同,覆盖AI开发全流程。
1355 5
|
6月前
|
缓存 Linux C语言
Linux 麒麟系统安装 libgomp-7.3.0 rpm 包步骤
下载指定rpm文件后,通过终端进入目录,使用`yum install`命令安装libgomp库,自动解决依赖问题。安装后可用`rpm -q`或`ldconfig -p`验证结果。遇权限问题用sudo,依赖缺失时由yum自动补全,冲突则先卸载旧版。
|
负载均衡 算法 关系型数据库
ShardingSphere数据库读写分离
最近这段时间来经历了太多东西,无论是个人的压力还是个人和团队失误所带来的损失,都太多,被骂了很多,也被检讨,甚至一些不方便说的东西都经历了,不过还好,一切都得到了解决,无论好坏,这对于个人来说也是一种成长吧,事后自己也做了一些深刻的检讨,总结为一句话“挫败使你难受,使你睡不着觉,使你痛苦,不过最后一定会使你变得成熟,变得认真,变得负责”,每次面临挫败,我都会告诉自己,这不算什么,十年之后,你回过头来看待这件事的时候,你一定会觉得,这算什么屁事。
417 0
|
负载均衡 算法 Java
SpringCloud之Ribbon使用
通过 Ribbon,可以非常便捷的在微服务架构中实现请求负载均衡,提升系统的高可用性和伸缩性。在实际使用中,需要根据实际场景选择合适的负载均衡策略,并对其进行适当配置,以达到更佳的负载均衡效果。
750 13
|
存储 缓存 网络协议
什么是域名?
域名(Domain name)是互联网的基础组成部分,为网络上的Web服务器提供便于人们理解的地址标识。通过使用域名,人们可以轻松访问互联网上的各种服务,而无需记住复杂的IP地址。域名由若干部分组成,从右至左阅读,其中顶级域名(TLD)揭示了域名的一般用途。购买域名实际上是在一定期限内获得使用权,这一过程需通过域名注册商完成。当用户在浏览器中输入域名时,系统会通过DNS服务器解析成对应的IP地址,从而实现内容的访问。
3311 3
|
SQL 关系型数据库 测试技术
详解DB2 restore恢复数据库
本文介绍了将生产数据库完整恢复到测试环境的具体步骤和注意事项。包括检查服务器空间、上传数据库文件、停掉数据库连接、查看日志、设置编码页、日志重定向、设置表空间大小、执行恢复、前滚日志、恢复字符集、善后工作等操作,帮助确保数据恢复过程顺利进行。
1071 0
|
SQL 关系型数据库 数据库
postgresql报:ERROR: column “i“ of relation “test“ does not exist LINE 1: UPDATE怎么解决?
解决“ERROR: column "i" of relation "test" does not exist”错误的关键在于核实列名的准确性,修正更新语句,确保列名的引用正确无误,并考虑到任何可能影响列名引用的表别名、大小写、特殊字符或动态SQL生成等因素。通过上述步骤,你应该能有效定位并解决问题,保证SQL语句的正确执行。
1487 0

热门文章

最新文章