Linux 运维工程师面试题(8)
祝各位小伙伴们早日找到本人心仪的工作。
继续学习才不会被淘汰。
地球不爆炸,咱们不放假。
机会总是留给有有筹备的人的。
加油,打工人!
1 docker 的网络类型,应用场景
- none:在应用 none 模式后,Docker 容器不会进行任何网络配置,没有网卡、没有 IP 也没有路由,因而默认无奈与外界通信,须要手动增加网卡配置 IP 等,所以极少应用。
- bridge:默认模式。能够和内部网络之间进行通信,通过 SNAT 拜访外网,应用 DNAT 能够让容器被内部主机拜访,所以此模式也称为 NAT 模式。
- host:此模式因为间接应用宿主机的网络无需转换,网络性能最高,然而各容器内应用的端口不能雷同,实用于运行容器端口比拟固定的业务。
- container:应用此模式创立的容器需指定和一个曾经存在的容器共享一个网络,而不是和宿主机共享网,新创建的容器不会创立本人的网卡也不会配置本人的 IP,而是和一个被指定的曾经存在的容器共享 IP 和端口范畴,因而这个容器的端口不能和被指定容器的端口抵触,除了网络之外的文件系统、过程信息等依然放弃互相隔离,两个容器的过程能够通过 lo 网卡进行通信。
2 CMD 和 ENTRYPOINT 的区别
No ENTRYPOINT | ENTRYPOINT exec_entry p1_entry | ENTRYPOINT [“exec_entry”,“p1_entry”] | |
---|---|---|---|
No CMD | error, not allowed | /bin/sh -c exec_entry p1_entry | exec_entry p1_entry |
CMD [“exec_cmd”,“p1_cmd”] | exec_cmd p1_cmd | /bin/sh -c exec_entry p1_entry | exec_entry p1_entry exec_cmd p1_cmd |
CMD exec_cmd p1_cmd | /bin/sh -c exec_cmd p1_cmd | /bin/sh -c exec_entry p1_entry | exec_entry p1_entry /bin/sh -c exec_cmd p1_cmd |
3 怎么减小 dokcer 镜像的大小
- 尽量选取满足需要但较小的根底零碎镜像;
- 清理编译生成的文件、安装包的缓存等临时文件;
- 装置各个软件时候要指定精确的版本号、并防止引入不须要的依赖;
- 缩小镜像层数,合并雷同的命令,比方 RUN 命令;
- 应用 Dockerfile 创立镜像时候要增加 dockerignore 文件或应用洁净的工具目录;
4 现有一个正在运行的容器,容器中没有 ps、top、netstat、ss、ip、lsof 等命令,怎么查看容器内过程及 pid 和关上的端口
能够应用 docker ps 命令查看容器内过程的和 port。也能够应用 docker top 命令查看容器内的相干过程,包含它们的 PID 和其它信息。能够应用 docker port 命令查看容器裸露的端口。
也能够进入容器。在 /proc 目录下查看过程 pid 和其余信息。
上面是 /proc/pid 目录中可能蕴含的文件和目录的一些例子:
- cmdline:该文件蕴含了过程启动时的残缺命令行参数。
- cwd:该文件蕴含了过程以后的工作目录。
- environ:该文件蕴含了过程环境变量列表。
- exe:该文件是过程的可执行文件的符号链接,能够通过它来找到过程的可执行文件。
- fd:该目录蕴含了过程关上的文件列表,每个文件都以符号链接的模式呈现在该目录下。
5 如何长期退出⼀个正在交互的容器的终端,而不终止它?
同时按三个键,ctrl+p+q。如果按 Ctrl+c 会使容器内的利用过程终止、进而会使容器终止。
6 如果只有镜像或者在运行的容器,没有 dockerfile,当初有需要须要借助这个镜像或容器重写 dockerfile,怎么查看这个镜像或容器之前的构建过程。
应用 docker history 或者 docker image history 命令进行查看。也能够应用 docker inspect 命令查看相干信息。
7 COPY 和 ADD 的区别
- COPY 命令会将文件的所有元数据(如所有者、权限等)都复制到容器中,而 ADD 则不会。这意味着在应用 ADD 时,您可能须要手动设置文件的元数据。
- ADD 命令反对在拷贝文件时主动解压缩 tar 文件,而 COPY 不反对。
- ADD 命令反对将 URL 作为源文件,并主动下载并将其复制到容器中。
8 制作镜像形式
- docker commit # 通过批改现有容器,将之手动构建为镜像
- docker build # 通过 Dockerfile 文件,批量构建为镜像
9 K8S 有那些组件,都是干什么用的
master:
- kube-apiserver:API 服务器为 REST 操作提供服务,公开 Kubernetes API,负责解决承受申请的工作。并为集群的共享状态提供前端,所有其余组件都通过该前端进行交互。
- kube-controller-manager:负责运行控制器过程,负责集群内的 Node、Pod 正本、服务端点(Endpoint)、命名空间(Namespace)、服务账号(ServiceAccount)、资源定额(ResourceQuota)的治理,当某个 Node 意外宕机时,Controller Manager 会及时发现并执行自动化修复流程,确保集群始终处于预期的工作状态。
- kube-scheduler:负责监督新创建的、未指定运行节点(node)的 Pods,并抉择节点来让 Pod 在下面运行。
- etcd:统一且高可用的键值存储,用作 Kubernetes 所有集群数据的后盾数据库。
node:
- kubelet:它保障容器(containers)都运行在 Pod 中。向 master 汇报 node 节点的状态信息;承受指令并在 Pod 中创立 docker 容器;筹备 Pod 所需的数据卷;返回 pod 的运行状态;在 node 节点执行容器健康检查
- kube-proxy:集群中每个节点(node)上所运行的网络代理,实现 Kubernetes 服务(Service)概念的一部分。
- 容器运行时(Container Runtime):容器运行环境是负责运行容器的软件。
10 K8S 创立一个 pod 的流程
- 筹备好对应的 yaml 文件,通过 kubectl 发送到 Api Server 中;
- Api Server 接管到客户端的申请将申请内容保留到 etcd 中;
- Scheduler 会监测 etcd,发现没有调配节点的 pod 对象通过过滤和打分筛选出最适宜的节点运行 pod;
- 节点会通过 conteiner runntime 运行对应 pod 的容器以及创立对应的正本数;
- 节点上的 kubelet 会对本人节点上的容器进行治理;
- controler 会监测集群中的每个节点,发现冀望状态和理论状态不合乎的话,就会告诉对应的节点;
- 节点收到告诉,会通过 container runtime 来对 pod 内的容器进行膨胀或者扩张。
对于我
全网可搜《阿贤 Linux》
CSDN、知乎、哔哩哔哩、博客园、51CTO、掘金、思否、开源中国、阿里云、腾讯云、华为云、今日头条、百家号、GitHub、集体博客
公众号:阿贤 Linux
集体博客:blog.waluna.top
https://blog.waluna.top/
原文链接: Linux 运维工程师面试题(8).