给面试官框框画大饼

1 用过那些linux操作命令

查看内存
查看cpu性能
创建目录
复制
备份
rpm命令
用什么命令压缩rpm包
删除
查看所有端口
ss-natp |grep  
开放固定端口sshd
raid5 raid10
用过哪些操作系统
国产服务器

2 mysql版本

如何创建一个新的库
连表查询方式及区别
给你一个表,有许多身份证号,对身份证号进行查重

3 面试2

你做过哪些 mysq! 优化
为什么选用 nginx 做 web 
你做过哪些优化Mysql增删改查怎么操作
你ek 用什么存储 数据存储在什么环境下
你项目用的什么环境
Mysq!两个相关联的表怎么修改表数据
Mysq!用的什么架构

4 软通

标准输出和错误输出同时怎么重定向同一个位置
shell 中怎么比较两个数字
探针
Hpa
亲和性
init 是什么容器
滚动更新
Pod生命周期状态有哪些
共享不出
linux 进程几种状态
怎么用一个命令在后台运行
搜索文件命令
Top
硬链接和软链接
buffer和cache
虚拟内存是什么
死锁是什么。怎么解决
索引类型
四大特性 ACID
标准输出和错误输出同时怎么重定向同一个位置
shell 中怎么比较两个数字
探针
Hpa
亲和性
init 是什么容器
滚动更新
Pod生命周期状态有哪些
共享不出
linux 进程几种状态
怎么用一个命令在后台运行
搜索文件命令
Top
硬链接和软链接
buffer和cache
虚拟内存是什么
死锁是什么。怎么解决
索引类型
四大特性 ACID

5 11月19号上海(合肥讯宇)

1 你们公司巡检制度是什么样子?

2 巡检的内容

3 系统了解的多吗?

4 有一批服务器要上架,对系统有哪些优化,有什么要做的?

5 关闭SELinux命令

6 禁止root登录 

7 时间同步怎么做的

8 做一个时间同步的服务器,让其他服务器来同步时间,怎么做?

9 磁盘没有满,就是创建文件失败
 indoe被占用完了

10 软连接和硬链接有什么区别? 各自适用于什么场景?

11 平常用脚本多吗?

12 写一个批量解压tar包的脚本

13 MySQL A表name字段的值 原来是a 更改为b

14 网络连接的多吗?

15 查看路由表怎么查看

16 抓包

17 三次握手为什么是三次?

18 三次握手原理 

19 nginx redis  tomcat 卢凯破 用的多吗?

20 redis 集群有哪些?

21 redis默认端口是多少?

22 Redis高可用集群Cluster模式 查看集群状态?

23 redis登录命令 登录到redis上查看数据 

24 redis持久化有哪些?

25 AOF持久化怎么做? 怎么配置?

26 tomcat 访问404 可能是什么原因? 怎么去排查?

27 在服务器上面有redis版本 需要修改配置重启服务 因为时间久远忘记了 怎么找到启动路径?

28 你在工作中觉得哪些操作 命令比较危险?

29 你觉得cp命令危险嘛?

30 cp想要备份 误操作了 把配置文件给覆盖了怎么补救?

6 K8S部署方式——》二进制/kubeadm(ansible,kubesphere)

#以上为部署的基础底座
#以下为K8内部的微服务、支持组件、个性化组件,包括:前后端
微服务:spring cloud (微服务需要管理 ,可以需要istio)
支持组件1(微服务支持服务):nacos-注册、调度、配置中心(zk) + pipoint/skyworking(链路追踪) 
支持组件2(对接大数据模块):大数据模块 spark flink 数仓 (MQ+redis(其他数据库))
支持组件3(告警平台):pro+grafana(告警平台)---》Pro采集数据模式:PULL 服务内建指标暴露器(cadvisor---docker stats) +pushgateway +(埋点暴露指标数据)(联邦模式thanos)
支持组件4(日志分析管理):EFK(es fluented kibana/grafana) loki(轻量级的日志分析系统)
支持组件5(批量管理工具): ansible/puptty/saltstack 
其他组件6:OpenAPI接口  SBC边界网关(一般用于语音系统使用)   WAF 
其他组件7:云产品 SLB edas arms rds oss ecs ack cdn vpc 云盾 态势感知 先知计划 WAF
其他组件8:mangoDb  Pg  minio HDFS FastDFS ceph etcd S3 OSS 等 
其他组件9:中间件---MQ系列、redis、Mysql  Nginx tomcat 
其他组件10:devops 云原生架构,jenkins ⭐gitvops
 
微服务: Tomcat
大数据: zk+kafka (spark flink )
告警平台: zabbix prometheus  open-falcaon nagios
日志分析管理: ELK 
批量管理工具: shell pssh ansible
网关:haproxy SLB  nginx lvs 
云产品:?
数据库/文件系统: mysql fastdfs nfs

性能优化:K8S 中间件 数据库 

传统项目:

1、迁移类工作(服务迁移(无状态) 架构迁移 数据中心迁移 数据迁移) 工具(云上、云下工具 同步工具) 申请域名、服务器、虚拟网络设备(虚拟交换机 VPC VPN)
PS:架构迁移:① 环境 ② 服务  ③ 业务 ④ 数据 ⑤ 资源(域名 公网IP 结构化数据 非结构化数据 配置清单资源)

2、升级类工作 业务升级(微服务升级 原1.0-》现1.2)jenkins git  和服务升级(ng平滑升级 1.18 - 1.21版本) 集群升级(例如K8S 1.18 -> k8s 1.21)
PS:git 工具常规操作: 拉取代码、上传代码、创建branch(分支)、合并分支、封版(整理对应命令)

以下需要在自己的git仓库做,git ssh-copy-id
拉取gitlab——》合并——》封版——》上传gitlab ——》jenkins
3、发布类工作:不建议写在传统中
4、性能调试、优化方向:MySQL  中间件  Ng 
Linux ——》Shell 正则 故障维护(各种鸭梨大 内核)
最大文件数 
文件描述符fd
队列
线程:
socket 等待时间、队列、接待请求数
内部线程 惊群优化 
内存的内存/缓存区大小
熵池(tomcat方向可以使用)
最大socket 接受请求数 
线程池、等待池
虚拟内存、SWAP

Shell 你们用在哪里

#一键部署
#重复工作
#日志分割
文件比对
备份
监控(zabbix)
ansible shell模块
健康检查()

系统初始化
数据库初始化
巡检
定期清理(超期日志)

MHA 自动修复(shell)

Ng : 内核优化 故障 问到Ng的话 50%会聊返回码 以及故障的返回码怎么解决

MySQL : 左连右连  内连 子查询 

将一张表的表数据全部复制到另一个库的test表中 
SQL:
navicat 

5、工单处理:故障处理

① 迁移类 
② 发布类 
③ 性能调优
④ 升级类 
⑤ 工单处理 
⑥ 改造类 
lvs+keepalived 负载均衡
——》haproxy + kp ——》SLB 
tomcat (JAVA ) +weblogic 
nginx + tomcat +spring boot/cloud (自研弹性伸缩组 50%扩展 40%收缩) + consul + 虚拟化 KVM-企业版 vsphere
每天 饭点的时候,压力会较大、平时压力较小 20% 80%

容器化改造:dockerfile + 网络拓扑改造 + 环境改造

改造为K8版本

设计:dockerfile K8S 部署(给定多套环境,用于生成、研发、测试)

传统项目: 
nginx + keepalived + tomcat + mysql主从 (redis )

更为的合理化、集中化、稳定、可用
痛点:
① 利用率不高
② 性能不高,存在部分单点故障
③ 网络不稳定、及安全性不够

考虑现在需求,对架构进行改造,最终期望是上云(的容器化)
改造1的大概方案——》能否定义弹性伸缩组,并且借助consul来实现实时发现、更新
                  ——》虚拟化改造,可以对资源实现弹性伸缩 vsphere 
                  ——》容器化改造,先把核心服务进行容器化,要做反复的测试、发布、联调等等 dockerfile 
                     lvs + keeplived docker + harbor(加密访问ldap ca 和高可用)+haproxy + consul + mysql(MHA)+ nfs 对于传统的网络拓扑进行了调整、改造,加强了
                      网络安全性
改造2 项目合并,规模扩大 (服务器数量增加,运维难度增加,可视化/可观测性需求增加、集中化管理力度增加)
                 ——》+ EFK + zabbix (完善Zabbix 监控对象 包括监控指标等) + 新的需求,容器集群化

改造3 项目演变(这段时间来了一个大佬,牵头了改造方案的设计及落地)——》K8S 自建(私有云OpenStack)
                ——》 添加K8S集群 zabbix——》pro
                ——》 kubeadm 1.15 
                ——》 话术:k8s Pod资源、配置资源、安全机制、服务发现等
改造4: K8S 1.15-》升级1.18 再升级到1.21 ——》迁移上云

*以下问题请在60分钟内作答,请注意题目较多,挑选你擅长或有把握的题目进行作答 即可,允许查阅网上资料,但请不要复制粘贴。

1. 简述 HTTP 反向代理原理,并选择你熟悉的方法和工具,简要描述实现过程。

2. 假设 peer 双方在不同的 NAT 网络(一层)下,简述在何种情况下不能实现 P2P 连 接,如果知道原因可简述。

3. 一台 Linux 系统的 EFI 引导分区损坏无法开机,应该如何修复,请简述操作步骤。

4. Linux 系统中如何抓取程序的 Coredump,请简述需要用到的工具和操作步骤。

5. 电脑 A 通过路由器连接到网络中,但是发现无法访问接在该路由器LAN 口上的另一 台电脑 B, 但是电脑 B 却可以访问到外部的网络。请分析哪些原因可能导致这个问题, 并简述判断具体原因的操作步骤。

6. 写一个脚本,将 debian:bullseye 镜像中的 /etc/os-release 拷贝出来。

7. 简述CICD对于你的意义,如果有参与过生产环境搭建,请简述你所构建的一个管线。

8. 使用 ip 命令,如何将 10.0.0.0/24 的目的流量转向 network interface eth1。

8. 如何使用 systemd-networkd 配置如下静态 IP 地址, IP:192.168.1.151 子网掩 码: 255.255.192.0 网关: 192.168.50.1 9. 写一个脚本,删除两周以前构建的 docker 镜像。

10. 如果一个有一个 docker registry 使用了自签名的证书,怎样配置 Docker 和 containerd 信任这个 registry。

11. Ubuntu 系统盘未分区挂载,根目录只剩下空闲空间 10GB,此时需要导入一个 20GB 的 Docker 镜像,给你一块新的未分区磁盘,如何操作,请简述需要的工具和步骤。

12. 假设有一个已绑定 Pod 的 k8s PVC 容量即将用尽,PV 不支持在线扩容,如何在 保证数据安全的情况下扩容?

13. 简述负载均衡原理,一个有状态的服务在做负载均衡时需要考虑什么。

14. 简述数据库冷备、热备和多活所要解决的问题,以postgresql为例,简述双活恢 复的流程。

神州面试题 

1.k8s常见的部署方式?

admin和二进制部署,这两者的区别是什么

a .kubeadm
是一个工具,用于快速搭建kubernetes集群,目前应该是比较方便和推荐的,简单易用
kubeadm是Kubernetes 1.4开始新增的特性
kubeadm init 以及 kubeadm join 这两个命令可以快速创建 kubernetes 集群
b. minikube
一般用于本地开发、测试和学习,不能用于生产环境
是一个工具,minikube快速搭建一个运行在本地的单节点的Kubernetes
c. 二进制包
在官网下载相关的组件的二进制包,上面的两个是工具,可以快速搭建集群,也就是相当于用程序脚本帮我们装好了集群,前两者属于自动部署,简化部署操作,自动部署屏蔽了很多细节,使得对各个模块感知很少,遇到问题很难排查,如果手动安装,对kubernetes理解也会更全面。
目前生产环境的主流搭建方式,已在生产环境验证,kubeadm也可以搭建生产环境,不过kubeadm应该还没有被大规模在生产环境验证

2.k8s集群的相关组件

master和node两大组件

master组件:

ApiServer: 资源操作的唯一入口,接收用户输入的命令,提供认证、授权、API注册和发现等机制。
Scheduler: 负责集群资源调度,按照预定的调度策略将Pod调度到相应的node节点上。
Controller-Manager: 负责维护集群的状态,按照预选和优选策略,在node节点上创建pod。
Etcd:负责存储集群中各种资源对象的信息。

node组件:

Kubelet:负责维护容器的生命周期,apiserver的代理人,即通过控制docker,来创建、更新、销毁容器。
KubeProxy:负责提供集群内部的服务发现和负载均衡。
docker:负责节点上容器的各种操作。

Pod怎么 对外暴露服务:

1.通过service这个统一入 口/定义的访问策略对外暴露服务
K8S内部的Pod通讯是以一组私有地址进行通讯的,所以默认情况下无法直接为客户端(服务、用户)提供访问

2.可以通过service服务发现,把我们内部的pod资源暴露给客户端访问(以暴露一个Ip:端口的方式),
让客户端可以通过这个IP:端口的形式访问到K8s内部的多个pod(通常意义上是一个应用的副本集)

小结: service 作为一组Pod的统-一访问出入口(定义一组Pod的访问策略),以RR分流算法进行负载均衡,把Pod中的应用服务暴露出来给客户端访问service——>暴露方式是四层的

访问的方式是通过kube-proxy匹配iptables功能进行转发的(四层)
k8s官方默认提供了四层的代理/负载均衡方式,而我们可以借助于官方后续支持的ingres-nginx提供七层转发/负载均衡

1.**你对k8s使用过程中的感觉如何**:

有一点很麻烦的事是它没法定位ip地址,没法定位pod 的ip,我觉得用着比较麻烦,我以前公司的研发经理特地问过我这事,我给他解释了一圈,他大概知道了是我没法这么去做

2.**对k8s摈弃docker有什么看法**:

首先1.20+ 版本才会摒弃docker,同时,摒弃的不是docker的所有生态圈,而是部分功能,核心功能中的runt ime. 运行时环境对应的功能还是有的,其次我们公司之前使用的时1.15-1.18. 1.20+的包不是很好找,现在想使用1.20版本+的话需要自己去拉源,软件包这些的话得去国外去捞,国内还未必有,国内有的话你也未必敢用,你确定那是官方渠道出来的么?不一定啊,所以我之前也没有接触到1.20+的版本

3.**对k8s未来的发展怎么看**:

无非是作为底座然后上面去嵌套各种服务呗,本身K8S是容器集群的管理工具,同时,也是-一种资源管理器,而往后的发展,首先还是会和CI/CD,也就是devops +k8s二开紧密结合(git gitlab/
github、 jenkins) ,同时咱们大佬企业,现在所关心和发展的方向在于datavops(机器学习)和aivops(人工智能) +立体可视化的监控 这一 方面


3.k8s如何实现集群管理??

主要是由master管理,然后预选优选策略
Master节点:
kube-apiserver: k8s集群的统一入口,各个组件信息交互都要通过它。以HTTP API提供接口服务,所有对象资源的增删改查和监听操作都交给APIServer处理后再提交给Etcd存储。
kube-controller-manager:处理集群中常规后台任务,维持副本期望数目。一个资源对应一个控制器,而ControllerManager就是负责管理这些控制器的。
kube-scheduler:k8s集群的调度器,根据调度算法为Pod选择Node工作节点。
etcd:分布式键值存储系统,用于保持集群状态,持久化存储k8s集群所有重要信息。可以放在k8s集群内,也可以放在集群外,建议放在集群内方便管理。

Node节点
Kubelet:是Master在Node节点上的Agent,直接与容器引擎交互,管理本机运行容器的生命周期,比如创建容器、挂载数据卷、获取容器和节点状态等。kubelet将每个Pod转换成一组组容器。
Kube-proxy:实现Pod网络代理,维护网络规则,写入规则至IPTABLES、IPVS。负责Pod之间的通信和负载均衡,将指定的流量分发到后端正确的机器上。

3.1 K8S集群实现高可用

k8s的高可用,主要是实现Master节点的高可用。那么我们看看各个组件是如何解决高可用的。
k8s普通搭建出来只是单master节点,如果该节点挂掉,则整个集群都无法调度,K8s高可用集群是用多个master节点加负载均衡节点组成,
外层再接高可用分布式存储集群例如ceph集群,实现计算能力+存储能力的高可用,同时,etcd也可以独立出来用外部的etcd集群。

Kubelet、Kube-proxy:只工作在当前Node节点上,无需高可用。
etcd:etcd如果是放在集群内部的,在kubeadm1.5之后,对于多Master集群,一个Master节点加入集群后将自动实现集群化扩展。所以集群已经自动实现高可用,无需再人工干预。
kube-controller-manager:对于多Master集群,这个组件只会有一个正常工作,其它处于休眠挂起状态。当工作节点发生故障时才会唤醒另一个接管。所以集群已经自动实现高可用,无需再人工干预。
kube-scheduler:与kube-controller-manager情况一样,集群已经自动实现高可用,无需再人工干预。
kube-apiserver:每个Master节点的kube-apiserver都是独立的,没有竞争关系,访问哪个节点效果都是一样的。


4.规模是多大:三个master 五个node

5.k8s网络模式:fannel 和calico和canel
容器间的通信:同一个Pod内的多个容器间的通信,它们之间通过lo网卡进行通信
Pod之间的通信:通过Pod IP地址进行通信
Pod和Service之间的通信:Pod IP地址和Service IP进行通信,两者并不属于同一网络,实现方式是通过IPVS或iptables规则转发
Service和集群外部客户端的通信,实现方式:Ingress、NodePort、Loadbalance
k8s网络实现不是集群内部自己实现,而是依赖于第三方网络插件---(CNI:Container Network Interface)。

flannel、calico、canel等是目前比较流行的第三方网络插件。这三种的网络插件需要实现Pod网络方案的方式通常有以下几种:虚拟网桥、多路复用(MacVLAN)、硬件交换(SR-IOV)

Flannel是一种基于overlay网络的跨主机容器网络解决方案,也就是将TCP数据包封装在另一种网络包里面进行路由转发和通信。

工作原理:Flannel会为k8s集群中每个node端的host分配一个网段,Pod从这个网段中分配IP,这些IP可以在host间路由,Pod间无需使用nat和端口映射即可实现跨主机通信。
如host1被分配的网段为172.17.1.0/16,host2被分配的网段为172.17.2.0/16。已分配 的subnet、host的IP等网络配置会被存放在ETCD中。

Flannel数据包在主机间转发是由backend实现的,目前已经支持UDP、VxLAN、host-gw等多种backend。


6.你做k8s遇到过哪些棘手的问题?

Pod处于一个未就绪的状态,这种情况一般是就绪探针失败了,当就绪探针失败时,Pod就连接不到服务,并且不会有流量转发给他;去检查kubectl描述中的"事件"部分来识别错误。就行了

还有就是容器无法启动,你用Kubernetes status去查看的话,会爆一个BackOff的错误;他这个错误一般来说会有三种情况:应用程序中出现错误,阻止其启动、没有正确的配置容器、还有就是探针失败太多次了;
应该去下查看容器中的日志,去了解一下详细的失败原因。可以用我刚才说的kubectl logs <pod-name> --previous 去看

还有pod一直处于pending的状态,这个Pending 状态说明 Pod 还没有被调度到某个节点上,可以去看下 Events 事件
A.  Pending 挂起
POD 挂起状态通常会出现在应用重新部署,重启,或者scale up之后
POD挂起状态标识集群中没有工作节点有足够的资源能够满足运行该POD,kube-scheduler无法完成调度,只能一致等待,直到集群中有节点能满足POD的资源要求
通常有如下原因:
1.集群工作节点状态异常;
2.集群工作节点资源无法同时满足POD的cpu和 memory requst。我们需要评估并设置合理的CPU 和Memory Request 值,
并确认集群中工作节点能满足集群中所有应用的需求;如果应用的CPU,memory request 很高,就很可能集群中有足够的CPU和memory 但是因为碎片化而没有节点能满足需求
3.集群工作节点的kubenetes文件系统磁盘空间使用率高,我们需要关注主机节点磁盘空间使用率,清除不必要的日志或Docke容器,Docker镜像,最好能设置磁盘空间使用率的告警并及时处理
4.应用挂载了外部资源,如configmap但是资源不存在,这种情况下需要先创建好资源
5.应用配置了节点亲和性,这种情况下需要分析是否有节点满足应用的亲和性策略;


B.   ImagePullBakckOff 镜像拉取失败
这个错误是因为Kubernetes 无法拉取容器镜像所导致的。有四种常见原因

镜像名称不正确,如拼写错误、镜像不存在所定义的镜像的tag 不存在;
镜像属于一个私有仓库且Kubernetes没有权限拉取,可以通过授权并且在Kubernetes 中配置相应的credentials解决。
镜像是一个公网镜像,内网无法拉取

C.  NotReady 未就绪
Pod not in ready state
这个状态表示POD里面的应用已经启动了,但是Readiness探针探测到POD还未就绪(前提是POD配置了Readiness 探针,否则只要程序运行着,POD就是Ready状态)。如果Readiness 探针失败,POD就不会被添加到Service中,也不会有访问流量被转发到该Pod。Pod的Readiness 探针失败通常是因为探针配置不正确或者应用错误导致,需要通过 kubectl describe pod podname 查看分析原因。
常见原因如下:  
1.应用完全启动时间大于就绪探针等待时间,此情况下需要调整initialDelaySeconds;
2.如果就绪探针设置为httpGet,可能http url 指向的页面不存在。有可能是应用没有创建该页面,此种情况应该修改探针配置或者创建相应页面;
应用还没有启动完成,还没来得及创建该页面,此种情况应参考第一种原因。
3.应用程序错误,无法相应就绪探针,需要查看应用日志排查。

我还碰到过一个pod的无限重启:
他这个是 limt的资源足够了 是足以初始化pod的,但是它还不足以承载业务就达到硬限制的一个危险值,使pod处于非健康状态被他的检测机制捕获。杀死pod。
后由rs控制器生成新的pod,然后就会这样 无限重启


7.你用过redis和mysql吗?mysql主从复制原理【一主两从】
如何实现主从同步:【主从复制核心部分就是两个日志 三个线程】
1、首先client端将数据写入到master节点的数据库中,master节点会通知存储引擎提交事务,
同时会将数据以(基于行、基于sQL、基于混合)的方式保存在"二进制日志"中。
2、SLAVE节点会开启I/O线程,用于监听master的二进制日志的更新,一旦发生更新内容,则向master的dunp线程发出同步请求。
3、master的dump线程在接收到SLAVE的I/O请求后,会读取二进制日志文件中更新的数据,并发送给slave的I/O线程。
4、SLAVE的I/o线程接收到数据后,会保存在slave节点的中继日志中。
5、同时slave节点中的sQL线程,会读取中继日志中的数据,更新在本地的mysql数据库中。
6、最终完成的slave复制master数据,达到主从同步的效果。

8.dockerfile的主要命令?copy和add的区别?
FROM:指定基础镜像,必须为 Dockerfile中 的第一个命令
MAINTAINER:维护者信息
RUN:构建镜像时执行的命令,一个文件中可以包含多条 RUN 命令
由于 RUN 命令会生成一个镜像层,所以 RUN 并不是越多越好,需要合理使用,如果一个 RUN 中执行多个命令,可以使用 && 连接,如果命令过长,可以使用 \ 换行,
ADD:将本地文件添加到容器中,tar 类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似 wget,如果目的位置不存在,Docker 会自动创建所需要的目录结
COPY:功能类似ADD,但是是不会自动解压文件,也不能访问网络资源,就是不能解压,其他限制条件跟 ADD 一样
WORKDIR:指定工作目录,类似于 cd 命令,之后的命令都是基于此工作目录
LABEL:用于为镜像添加元数据
EXPOSE:指定暴露镜像的端口供主机做映射
VOLUME:添加卷,用于指定持久化目录
USER:指定运行容器时的用户名或 UID,后续的操作都会使用指定用户。使用USER指定用户时,可以使用用户名、UID或GID,或是两者的组合。当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户
CMD:构建容器后调用,也就是在容器启动时才进行调用,存在多个CMD时只有最后一个生效,也支持exec语法
ENTRYPOINT:配置容器,使其可执行化。配合CMD可省去"application",只使用参数


CMD和ENTRYPOINT的区别?

CMD和ENTRYPOINT同样作为容器启动时执行的命令,区别有以下几点:

CMD 的命令会被 docker run 的命令覆盖而 ENTRYPOINT 不会

如使用 CMD ["/bin/bash"] 或 ENTRYPOINT ["/bin/bash"] 后,再使用 docker run -ti image 启动容器,它会自动进入容器内部的交互终端,如同使用 docker run -ti image /bin/bash

但是如果启动镜像的命令为 docker run -ti image /bin/ps,使用 CMD 后面的命令就会被覆盖转而执行 bin/p s命令,而 ENTRYPOINT 的则不会,而是会把 docker run 后面的命令当做 ENTRYPOINT 执行命令的参数。

CMD 和 ENTRYPOINT 都存在时,CMD 的指令就变成了 ENTRYPOINT 的参数,并且此 CMD 提供的参数也会被 docker run 后面的命令覆盖


9.通过shell脚本编写过自动化运维的工具吗?
文件对比、日志分割、备份、监控、周计划

nginx日志分割的步骤:用哪些关键命令

10.之前用过elk,监控哪些东西?
收集项目中的日志,包括后期的管理,方便后期出错之后用于排查错误。

11.你之前在这家公司加班多吗、为什么离职?你家是哪里的?
你之前上家单位工资多少,期望薪资是多少?

你有没有什么想问的,干运维可能会加班你能接受吗


12.一:redis雪崩

redis雪崩是指redis在某个时间大量失效,突然造成数据库访问压力急剧增大,像雪崩一样,redis雪崩危害巨大,甚至有可能服务器宕机,给公司造成巨大的经济损失。

解决方案:设置超时时间的时候要设置随机值,不要设置固定值。

二: redis缓存穿透

缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求。由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。

在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。
如发起为id为“-1”的数据或id为特别大不存在的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大。

解决方案:

1.设置并发锁,防止请求大量请求数据库,如果获取到锁了,去数据库查询,如果没有,说明有其他线程在查询数据库,那么只需要重试一下就好了
2.设置拦截器,对于不存在得key,进行拦截

三:缓存击穿

缓存击穿是指缓存中没有但数据库中有的数据(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力。

解决方案:
1.设置热点数据永不过期
2.加互斥锁


13.探针

探针分为3种

livenessProbe(存活探针)∶判断容器是否正常运行,如果失败则杀掉容器(不是pod),再根据重启策略是否重启容器
readinessProbe(就绪探针)∶判断容器是否能够进入ready状态,探针失败则进入noready状态,并从service的endpoints中剔除此容器
startupProbe∶判断容器内的应用是否启动成功,在success状态前,其它探针都处于无效状态
2. 检查方式

检查方式分为3种

exec∶使用 command 字段设置命令,在容器中执行此命令,如果命令返回状态码为0,则认为探测成功
httpget∶通过访问指定端口和url路径执行http get访问。如果返回的http状态码为大于等于200且小于400则认为成功
tcpsocket∶通过tcp连接pod(IP)和指定端口,如果端口无误且tcp连接成功,则认为探测成功

探测结果

每次探测都将获得以下三种结果之一:
● 成功:容器通过了诊断
● 失败:容器未通过诊断
● 未知:诊断失败,因此不会采取任何行动

3. 常用的探针可选参数

常用的探针可选参数有4个

initialDelaySeconds∶ 容器启动多少秒后开始执行探测
periodSeconds∶探测的周期频率,每多少秒执行一次探测
failureThreshold∶探测失败后,允许再试几次
timeoutSeconds ∶ 探测等待超时的时间
 
4、重启策略
Pod在遇到故障之后“重启”的动作Pod在遇到故障之后“重启”的动作

Always:当容器终止退出后,总是“重启”容器,默认策略

OnFailure:当容器异常退出(退出状态码非0)时,重启容器

Never:当容器终止退出,从不“重启”容器。

(注意:k8s中不支持重启Pod资源,只有删除重建,重建)


14.常用负载均衡工具
Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件。

LVS:LVS(Linux Virtual Server),也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目。
使用LVS技术要达到的目标是:通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能、高可用的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。
LVS主要用来做四层负载均衡。

Nginx:Nginx(发音同engine x)是一个网页服务器,它能反向代理HTTP, HTTPS, SMTP, POP3, IMAP的协议链接,以及一个负载均衡器和一个HTTP缓存。
Nginx主要用来做七层负载均衡。

HAProxy:HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
Haproxy主要用来做七层负载均衡。


15.kubenerters中Request和Limit限制方式说明【限制资源方式:request和limit】
Request: 容器使用的最小资源需求,作为容器调度时资源分配的判断依赖。只有当节点上可分配资源量>=容器资源请求数时才允许将容器调度到该节点。但Request参数不限制容器的最大可使用资源。

Limit:容器能使用资源的资源的最大值,设置为0表示使用资源无上限。

Request能够保证Pod有足够的资源来运行,而Limit则是防止某个Pod无限制地使用资源,导致其他Pod崩溃。两者之间必须满足关系: 0<=Request<=Limit<=Infinity (如果Limit为0表示不对资源进行限制,
这时可以小于Request)

在腾讯云容器服务(CCS)中,可以在创建服务,在容器编辑栏中点击显示高级设置,在高级设置中进行CPU和Memory的Request和Limit设置。目前CPU支持设置Request和Limit,
用户可以根据业务的特点动态的调整Request和Limit的比例关系。Memory目前只支持设置Request,Limit必须强制等于Request,这样确保容器不会因为内存的使用量超过了
Request但没有超过Limit的情况下被意外的Kill掉。

16.GFS 分布式文件系统概述
1. GFS 简介
GFS(Gluster File System) 是一个可扩展、开源的分布式文件系统(可以很好的体现出弹性伸缩的特点),用于大型的、分布式的、对大量数据进行访问的应用,在传统的解决方案中,GFS 能够灵活的结合物理的,虚拟的和云资源去体现高可用和企业级的性能存储
GFS 由三个组件组成:
① 存储服务器(Brick Server)
② 客户端(不在本地)(且,有客户端,也会有服务端,这点类似于 NFS,但是更为复杂)
③ 存储网关(NFS/Samaba)
GFS 工作流程
① 客户端或应用程序通过 GlusterFS 的挂载点访问数据
② linux系统内核通过 VFS API 收到请求并处理
③ VFS 将数据递交给 FUSE 内核文件系统,并向系统注册一个实际的文件系统 FUSE,而 FUSE 文件系统则是将数据通过 /dev/fuse 设备文件递交给了 GlusterFS client 端。可以将 FUSE 文件系统理解为一个代理
④ GlusterFS client 收到数据后,client 根据配置文件的配置对数据进行处理
⑤ 经过 GlusterFS client 处理后,通过网络将数据传递至远端的 GlusterFS Server,并且将数据写入到服务器存储设备上
简单来说:应用程序访问本地挂载的目录进行查看修改等操作,服务器会通过内核交给文件系统进行处理,并且处理后的数据会通过网络传递给该挂载目录实际所在的源服务器中,源服务器会对数据进行存储

K8S 基础类

一、集群类问题

1、K8S组件有哪些(master和worker之中的组件)

2、K8S的Pod创建流程

2.1 你们K8S 怎么部署的,多少台master 多少台worker 多少Pod 

2.2 你们的ETCD 多少台

      :“/etc” 和 “distributed”(分布式)

2.2.1 ETCD中基操(增删改查包含ETCD中有多少类型/模块,怎么查看)

二、K8S中基础资源类概念

3、Pod概念 

3.1 Pod中有几种容器,分别是干啥的

3.1.1 Pod的生命周期

PS:延伸1:列举一个pod状态(pending),问怎么解决
    延伸2:pod状态: 0/1 RUNNING ——》readnessProbe 就绪探针的健康检查失败 
    
3.2 Pod 和 container之间区别

3.3 Pod中的网络模式是什么

4、Pod怎么暴露出来

4.1 service 有哪些类型,分别有什么用

4.2 service 和 ingress 有何区别 

5 控制器类型哪些,有什么区别

6 kube-proxy 模式哪些,有何区别,会不会写ipvs规则
(iptables的NAT规则)
iptables的规则会写 ,查询命令,记录3-5条规则怎么写就行 

7 configmap 和secret有何区别

7.1 configmap你们一般用来做什么 
① 配置文件---ingress 
② prometheus 
③ 应用的配置文件

7.2 secret 
① 定义加密的
② 账号密码
③ 和sa关联,保存token 凭证(一种加密的字符串类型)

8 pv pvc 有何区别
pv定义存储类的属性
pvc 申明匹配存储类和使用pv的动态存储

8.1 pv 有哪些状态(PV的生命周期是什么)

8.2 PVC 是干嘛的

9 探针 
   ①、直接问Pod怎么做健康检查
   ②、怎么做业务层面的监控
   答: prometheus 采集metrics-server(从kubelet,节点中pod事件、名称空间等资源) 和cadvisor(采集的容器资源信息)
        借助于探针来监控(健康检查)
9.1 探针哪些类型 

9.2 探针两种类型有何区别

9.3 探针的检测方式有哪些呢?有何区别 

10 资源限制

10.1(新) 你们怎么做资源限制,或者说你掌握的资源限制有哪些
答:resources(limit--上限资源 request--初始资源)
    resourceQuota: 
         ① 名称空间下的Pod数量
         ② 名称空间下允许给与的初始资源总量
         ③ 名称空间下允许分配的资源硬上限
    network-policy网络策略方向
         ① 基于名称空间的限制
         ② 基于IP地址段的限制 
         ③ 基于Pod_ip的限制
    RBAC 角色访问控制方向    
         ① Role/ClusterRole        角色(权限范围)
         ② RoleBinding/ClusterRoleBinding 角色绑定
         ③ user、group、serviceaccount(SA)主体

三、yml面试题

11 yml编写规范 
不支持tab
---分割
空格表示层级
 - 和: 后面加一个空格
支持#

12 有没有写过yml 
写过!!!!!!

追问:写过哪些yml
mysql-mha 主从 
redis 
kafka
prometheus

13 深圳面试官:yml怎么写的能不能给我讲一遍(难度:深????)

14 如果你在kubectl apply 发布的时候,报了一个语法错误,是哪个组件反馈出来的

15 我要查看指定标签的资源怎么看

16 我要查看指定污点怎么看

17 我要发布一个pod 怎么发布(命令层次)
 
18 报错怎么办 查看什么信息
kubectl logs/describe 

19 你们用的cni 是什么 

19.1 flannel 模式哪些,你们用的哪个,工作流程是什么

19.2 calico 模式有哪些,你们用哪种

19.3 calico flannel 有何区别 

19.4 flannel ——》node节点上的flannel1没了,怎么办(故障)

20 pod 访问combo
20.1 pod 内容容器之间怎么通讯
20.2 相同节点pod如何通讯
20.3 不同节点pod 如何通讯
20.4 跨名称空间pod如何通讯
20.5 跨K8集群pod如何通讯

21 RestartPolicy imagePullPolicy  NetworkPolicy 模式 

四、组合面试题:

22 你们怎么采集K8S日志,怎么“做的” (细节)
  
22 (8成会问到) Prometheus 怎么监控K8 

22.1 prometheus 采集哪些指标 怎么采集 

22.2 pro 怎么监控API 

23 K8S 你们集成了哪些服务

24 K8S + kafka 怎么做 kafka 用于干啥 (偏门)

25 你们K8S 怎么集成CI/CD 

25.1 JENKINS 怎么集成到K8S  


 


 

相关推荐

  1. 面试框框大饼

    2024-06-15 23:48:07       9 阅读
  2. 面试:介绍一下MVC框架

    2024-06-15 23:48:07       29 阅读
  3. 面试常问问题

    2024-06-15 23:48:07       24 阅读
  4. 面试:BIO、NIO、AIO的区别

    2024-06-15 23:48:07       37 阅读
  5. Python面试:什么是自省

    2024-06-15 23:48:07       6 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-15 23:48:07       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-15 23:48:07       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-15 23:48:07       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-15 23:48:07       18 阅读

热门阅读

  1. STM32-CAN

    STM32-CAN

    2024-06-15 23:48:07      11 阅读
  2. Html_Css问答集(2)

    2024-06-15 23:48:07       7 阅读
  3. 在面试中展示自己的系统架构设计能力

    2024-06-15 23:48:07       7 阅读
  4. 网络安全练气篇——OWASP TOP 10

    2024-06-15 23:48:07       8 阅读