
<p id="105GTMJS">“机会总是留给有准备的人的”,从作者这一周的面试经历来看,Linux运维工程师必备的基础知识可谓是由点及面、由浅入深。尤其是在云原生潮流趋势下,我们需要持续拥抱新技术、新思想,而不是在自己的舒适区原地踏步。</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F0701%2Fd4db6869j00rebgvk00b1c000u000k0m.jpg&thumbnail=660x2147483647&quality=80&type=jpg"/><br/></p><p id="105GTMJU">因此希望有需求的人能够抓住2021年的尾巴,夯实当下Linux运维工程师岗位的知识点,为明年的升值加薪做好准备!</p><p id="105GTMK0"><strong>一、linux</strong></p><p id="105GTMK1"><strong>1.</strong><strong>linux系统启动流程</strong></p><p><ul><li id="105GTMUM">第一步:开机自检,加载BIO</li><li id="105GTMUN">第二步:读取MBR</li><li id="105GTMUO">第三步:Boot Loader grub引导菜单</li><li id="105GTMUP">第四步:加载kernel内核</li><li id="105GTMUQ">第五步:init进程依据inittab文件夹来设定运行级别</li><li id="105GTMUR">第六步:init进程执行rc.sysinit</li><li id="105GTMUS">第七步:启动内核模块</li><li id="105GTMUT">第八步:执行不同运行级别的脚本程序</li><li id="105GTMUU">第九步:执行/etc/rc.d/rc.lo<br/></li></ul></p><p id="105GTMK2"><strong>2.linux文件类型</strong></p><p id="105GTMK3">文件属性</p><p id="105GTMK4">文件类型</p><p id="105GTMK5">- :常规文件,即file</p><p id="105GTMK6">d :目录文件</p><p id="105GTMK7">b :block device 即块设备文件,如硬盘;支持以block为单位进行随机访问</p><p id="105GTMK8">c :character device 即字符设备文件,如键盘支持以character为单位进行线性访问</p><p id="105GTMK9">l :symbolic link 即符号链接文件,又称软链接文件</p><p id="105GTMKA">p :pipe 即命名管道文件</p><p id="105GTMKB">s :socket 即套接字文件,用于实现两个进程进行通信</p><p id="105GTMKD"><strong>3.centos6和7怎么将源码安装的程序添加到开机自启动?</strong></p><p><ul><li id="105GTMUV">通用方法:编辑/etc/rc.d/rc.local文件,在文件末尾添加启动服务命令</li><li id="105GTMV0">centos6</li><li id="105GTMV1">①进入到/etc/rc.d/init.d目录下;</li><li id="105GTMV2">②新建一个服务启动脚本,脚本中指定chkconfig参数;</li><li id="105GTMV3">③添加执行权限;</li><li id="105GTMV4">④执行chkconfig --add 添加服务自启动;</li><li id="105GTMV5">centos7</li><li id="105GTMV6">①进入到/usr/lib/systemd/system目录下;</li><li id="105GTMV7">②新建自定义服务文件,文件中包含[Unit] [Service] [Install]相关配置,然后添加下执行权限;</li><li id="105GTMV8">③执行systemctl enable 服务名称;</li></ul></p><p id="105GTMKF"><strong>4.</strong><strong>简述lvm,如何给使用lvm的/分区扩容?</strong></p><p><ul><li id="105GTMV9">功能:可以对磁盘进行动态管理。动态按需调整大小</li><li id="105GTMVA">概念:</li></ul></p><p id="105GTMKG">①PV - 物理卷:物理卷在逻辑卷管理中处于最底层,它可以是实际物理硬盘上的分区,也可以是整个物理硬盘,也可以是raid设备。<br/>②VG - 卷组:卷组建立在物理卷之上,一个卷组中至少要包括一个物理卷,在卷组建立之后可动态添加物理卷到卷组中。一个逻辑卷管理系统工程中可以只有一个卷组,也可以拥有多个卷组。<br/>③LV - 逻辑卷:逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展和缩小空间。系统中的多个逻辑卷可以属于同一个卷组,也可以属于不同的多个卷组。<br/></p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F0701%2F95936b7fj00rebgvi000kc000go00a0m.jpg&thumbnail=660x2147483647&quality=80&type=jpg"/><br/></p><p><ul><li id="105GTMVB">给/分区扩容步骤:</li></ul></p><p id="105GTMKI">①添加磁盘<br/>②使用fdisk命令对新增加的磁盘进行分区<br/>③分区完成后修改分区类型为lvm<br/>④使用pvcreate创建物理卷<br/>⑤使用vgextend命令将新增加的分区加入到根目录分区中<br/>⑥使用lvextend命令进行扩容<br/>⑦使用xfs_growfs调整卷分区大小</p><p id="105GTMKK"><strong>5.</strong><strong>为何du和df统计结果不一致?</strong></p><p><ul><li id="105GTMVC">用户删除了大量的文件被删除后,在文件系统目录中已经不可见了,所以du就不会再统计它。</li><li id="105GTMVD">然而如果此时还有运行的进程持有这个已经被删除的文件句柄,那么这个文件就不会真正在磁盘中被删除,分区超级块中的信息也就不会更改,df仍会统计这个被删除的文件。</li><li id="105GTMVE">可通过 lsof命令查询处于deleted状态的文件,被删除的文件在系统中被标记为deleted。如果系统有大量deleted状态的文件,会导致du和df统计结果不一致。</li></ul></p><p id="105GTMKM"><strong>6.</strong><strong>如何升级内核?</strong></p><p><ul><li id="105GTMVF">方法一</li></ul></p><p id="105GTMKN"># 添加第三方yum源进行下载安装。</p><p id="105GTMKO">Centos 6 YUM源:http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm</p><p id="105GTMKP">Centos 7 YUM源:http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm</p><p id="105GTMKQ"># 先导入elrepo的key,然后安装elrepo的yum源:</p><p id="105GTMKR">rpm -import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org</p><p id="105GTMKS">rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm</p><p id="105GTMKT"># 查看可用的内核相关包</p><p id="105GTMKU">yum --disablerepo="*" --enablerepo="elrepo-kernel" list available</p><p id="105GTMKV">yum -y --enablerepo=elrepo-kernel install</p><p><ul><li id="105GTMVG">方法二</li></ul></p><p id="105GTML1"># 通过下载kernel image的rpm包进行安装。</p><p id="105GTML2">官方 Centos 6: http://elrepo.org/linux/kernel/el6/x86_64/RPMS/</p><p id="105GTML3">官方 Centos 7: http://elrepo.org/linux/kernel/el7/x86_64/RPMS/</p><p id="105GTML4"># 获取下载链接进行下载安装即可</p><p id="105GTML5">wget https://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-lt-4.4.185-1.el7.elrepo.x86_64.rpm</p><p id="105GTML6">rpm -ivh kernel-lt-4.4.185-1.el7.elrepo.x86_64.rp</p><p id="105GTML7"># 查看默认启动顺序</p><p id="105GTML8">[root@localhost ~]# awk -F' '$1=="menuentry " {print $2}' /etc/grub2.cfg</p><p id="105GTML9">CentOS Linux (5.2.2-1.el7.elrepo.x86_64) 7 (Core)</p><p id="105GTMLA">CentOS Linux (4.4.182-1.el7.elrepo.x86_64) 7 (Core)</p><p id="105GTMLB">CentOS Linux (3.10.0-957.21.3.el7.x86_64) 7 (Core)</p><p id="105GTMLC">CentOS Linux (3.10.0-957.10.1.el7.x86_64) 7 (Core)</p><p id="105GTMLD">CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core)</p><p id="105GTMLE">CentOS Linux (0-rescue-e34fb4f1527b4f2d9fc75b77c016b6e7) 7 (Core)</p><p id="105GTMLF">由上面可以看出新内核(4.12.4)目前位置在0,原来的内核(3.10.0)目前位置在1</p><p id="105GTMLG"># 设置默认启动</p><p id="105GTMLH">[root@localhost ~]# grub2-set-default 0 // 0代表当前第一行,也就是4.12.4版本</p><p id="105GTMLI"># 重启验证</p><p id="105GTMLK"><strong>7.</strong><strong>nginx日志访问量前十的ip怎么统计?</strong></p><p id="105GTMLL">awk '{array[$1]++}END{for (ip in array)print ip,array[ip]}' access.log |sort -k2 -rn|head</p><p id="105GTMLN"><strong>8.</strong><strong>如何删除/var/log/下.log结尾的30天前的日志?</strong></p><p id="105GTMLO">find /var/log/ -type f -name .*.log -mtime 30|xargs rm -f</p><p id="105GTMLQ"><strong>9.</strong><strong>ansible有哪些模块?功能是什么?</strong></p><p id="105GTMLR">copy:拷贝文件到被控端</p><p id="105GTMLS">cron:定时任务</p><p id="105GTMLT">fetch:拷贝被控端文件到本地</p><p id="105GTMLU">file:文件模块</p><p id="105GTMLV">group:用户组模块</p><p id="105GTMM0">user:用户模块</p><p id="105GTMM1">hostname:主机名模块</p><p id="105GTMM2">script:脚本模块</p><p id="105GTMM3">service:服务启动模块</p><p id="105GTMM4">command:远程执行命令模块</p><p id="105GTMM5">shell:远程执行命令模块,command高级用法</p><p id="105GTMM6">yum:安装包组模块</p><p id="105GTMM7">setup:查看主机系统信息</p><p id="105GTMM9"><strong>10.</strong><strong>nginx为什么比apache快?</strong></p><p><ul><li id="105GTMVH">nginx采用epoll模型</li><li id="105GTMVI">apache采用select模型</li></ul></p><p id="105GTMMB"><strong>11. 四层负载和七层负载区别是什么?</strong></p><p><ul><li id="105GTMVJ">四层基于IP+端口进行转发</li><li id="105GTMVK">七层就是基于URL等应用层信息的负载均衡</li></ul></p><p id="105GTMMD"><strong>12. lvs有哪些工作模式?哪个性能高?</strong></p><p><ul><li id="105GTMVL">dr:直接路由模式,请求由 LVS 接受,由真实提供服务的服务器直接返回给用户,返回的时候不经过 LVS。(<strong>性能最高</strong></li></ul></p><p><ul><li id="105GTMVM">tun:隧道模式,客户端将访问vip报文发送给LVS服务器。LVS服务器将请求报文重新封装,发送给后端真实服务器。后端真实服务器将请求报文解封,在确认自身有vip之后进行请求处理。后端真实服务器在处理完数据请求后,直接响应客户端。</li></ul></p><p><ul><li id="105GTMVN">nat:网络报的进出都要经过 LVS 的处理。LVS 需要作为 RS 的网关。当包到达 LVS 时,LVS 做目标地址转换(DNAT),将目标 IP 改为 RS 的 IP。RS 接收到包以后,仿佛是客户端直接发给它的一样。RS 处理完,返回响应时,源 IP 是 RS IP,目标 IP 是客户端的 IP。这时 RS 的包通过网关(LVS)中转,LVS 会做源地址转换(SNAT),将包的源地址改为 VIP,这样,这个包对客户端看起来就仿佛是 LVS 直接返回给它的。客户端无法感知到后端 RS 的存在。</li></ul></p><p><ul><li id="105GTMVO">fullnat模式:fullnat模式和nat模式相似,但是与nat不同的是nat模式只做了两次地址转换,fullnat模式却做了四次。</li></ul></p><p id="105GTMMI"><strong>13. tomcat各个目录含义,如何修改端口,如何修改内存数?</strong></p><p><ul><li id="105GTMVP">bin 存放tomcat命令</li><li id="105GTMVQ">conf 存放tomcat配置文件</li><li id="105GTMVR">lib 存放tomcat运行需要加载的jar包</li><li id="105GTMVS">log 存在Tomcat运行产生的日志</li><li id="105GTMVT">temp 运行过程中产生的临时文件</li><li id="105GTMVU">webapps 站点目录</li><li id="105GTMVV">work 存放tomcat运行时的编译后的文件</li><li id="105GTN00">conf/server.xml 修改端口号</li><li id="105GTN01">bin/catalina.sh 修改jvm内存</li></ul></p><p id="105GTMMK"><strong>14. nginx反向代理时,如何使后端获取真正的访问来源ip?</strong></p><p id="105GTMML"># 在location配置段添加以下内容:</p><p id="105GTMMM">proxy_set_header Host $http_host;</p><p id="105GTMMN">proxy_set_header X-Real-IP $remote_addr;</p><p id="105GTMMO">proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;</p><p id="105GTMMP">proxy_set_header X-Forwarded-Proto $scheme;</p><p id="105GTMMR"><strong>15. nginx负载均衡算法有哪些?</strong></p><p><ul><li id="105GTN02">rr 轮训</li><li id="105GTN03">weight 加权轮训</li><li id="105GTN04">ip_hash 静态调度算法</li><li id="105GTN05">fair 动态调度算法</li><li id="105GTN06">url_hash url哈希</li><li id="105GTN07">leat_conn 最小连接数</li></ul></p><p id="105GTMMT"><strong>16. 如何进行压力测试?</strong></p><p id="105GTMMU">例如:模拟10个用户,对百度首页发起总共100次请求。</p><p id="105GTMMV"># 测试命令:</p><p id="105GTMN0">ab -n 100 -c 10 https://www.baidu.com/index.htm</p><p id="105GTMN1"><strong>17. curl命令如何发送https请求?如何查看response头信息?如何发送get和post表单信息?</strong></p><p><ul><li id="105GTN08">发送https请求:</li><li id="105GTN09">curl --tlsv1 'https://www.bitstamp.net/api/v2/transactions/btcusd/'</li><li id="105GTN0A">response头信息 :curl -I</li><li id="105GTN0B">get:curl 请求地址?key1=value1&key2=value2&key3=value3</li><li id="105GTN0C">post:curl -d “key1=value1&key2=value2&key3=value3”</li></ul></p><p id="105GTMN3"><strong>二、mysql</strong></p><p id="105GTMN4"><strong>1. 索引的为什么使查询加快?有啥缺点?</strong><br/></p><p id="105GTMN5">默认的方式是根据搜索条件进行全表扫描,遇到匹配条件的就加入搜索结果集合。如果我们对某一字段增加索引,查询时就会先去索引列表中一次定位到特定值的行数,大大减少遍历匹配的行数,所以能明显增加查询的速度<br/>缺点:</p><p><ul><li id="105GTN0D">创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加</li><li id="105GTN0E">索引需要占物理空间,除了数据表占用数据空间之外,每一个索引还要占用一定的物理空间,如果需要建立聚簇索引,那么需要占用的空间会更大</li><li id="105GTN0F">以表中的数据进行增、删、改的时候,索引也要动态的维护,这就降低了整数的维护速度</li></ul></p><p id="105GTMN7"><strong>2. sql语句左外连接 右外连接 内连接 全连接区别</strong></p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F0701%2F728cdb6aj00rebgvj00f3c000qu00l4m.jpg&thumbnail=660x2147483647&quality=80&type=jpg"/><br/></p><p id="105GTMNA"><strong>3. mysql数据备份方式,如何恢复?你们的备份策略是什么?</strong></p><p><ul><li id="105GTN0G">物理完全备份</li></ul></p><p id="105GTMNB">备份所有数据库文件:/var/lib/mysql/*</p><p id="105GTMNC">备份所有binlog文件: /var/lib/mysql/mysql-bin.*</p><p id="105GTMND">备份选项文件: /etc/my.cnf</p><p><ul><li id="105GTN0H">mysqldump逻辑备份</li></ul></p><p id="105GTMNE">mysqldump -uroot -p --all-databases > /backup/mysqldump/all.db</p><p><ul><li id="105GTN0I">物理备份恢复</li></ul></p><p id="105GTMNF">#先把原来的数据目录改名</p><p id="105GTMNG">mv /var/lib/mysql /var/lib/mysql.old</p><p id="105GTMNH">cp -a /backups/mysql /var/lib</p><p><ul><li id="105GTN0J">逻辑备份数据恢复</li></ul></p><p id="105GTMNI">mysql > use db_name</p><p id="105GTMNJ">mysql > source /backup/mysqldump/db_name.db</p><p id="105GTMNL"><strong>4. 如何配置数据库主从同步,实际工作中是否遇到数据不一致问题?如何解决?</strong><br/></p><p id="105GTMNM">为每个服务器配置唯一值的server-id</p><p><ul><li id="105GTN0K">主库</li></ul></p><p id="105GTMNN">开启binlog日志</p><p id="105GTMNO">创建主从复制用户</p><p id="105GTMNP">查看master的状态</p><p><ul><li id="105GTN0L">从库</li></ul></p><p id="105GTMNQ">change master to设置主库信息</p><p id="105GTMNR">start slave开始复制</p><p id="105GTMNT"><strong>5. mysql约束有哪些?</strong></p><p><ul><li id="105GTN0M">非空约束</li><li id="105GTN0N">唯一约束</li><li id="105GTN0O">主键约束</li><li id="105GTN0P">外键约束</li></ul></p><p id="105GTMNV"><strong>6. 二进制日志(binlog)用途?</strong></p><p id="105GTMO0">BINLOG记录数据库的变更过程。例如创建数据库、建表、修改表等DDL操作、以及数据表的相关DML操作,这些操作会导致数据库产生变化,开启binlog以后导致数据库产生变化的操作会按照时间顺序以“事件”的形式记录到binlog二进制文件中。</p><p id="105GTMO2"><strong>7. mysql数据引擎有哪些?</strong></p><p><ul><li id="105GTN0Q">常用的 myisam、innodb</li><li id="105GTN0R">区别:</li></ul></p><p id="105GTMO3">(1)InnoDB 支持事务,MyISAM 不支持,这一点是非常之重要。事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而 MyISAM就不可以了;<br/>(2)MyISAM 适合查询以及插入为主的应用,InnoDB 适合频繁修改以及涉及到安全性较高的应用;<br/>(3)InnoDB 支持外键,MyISAM 不支持;<br/>(4)MyISAM 是默认引擎,InnoDB 需要指定;<br/>(5)InnoDB 不支持 FULLTEXT 类型的索引;<br/>(6)InnoDB 中不保存表的行数,如 select count() from table 时,InnoDB;需要扫描一遍整个表来计算有多少行,但是 MyISAM 只要简单的读出保存好的行数即可。注意的是,当 count()语句包含 where 条件时 MyISAM 也需要扫描整个表;<br/>(7)对于自增长的字段,InnoDB 中必须包含只有该字段的索引,但是在 MyISAM表中可以和其他字段一起建立联合索引;<br/>(8)清空整个表时,InnoDB 是一行一行的删除,效率非常慢。MyISAM 则会重建表;<br/>(9)InnoDB 支持行锁(某些情况下还是锁整表,如 update table set a=1 where user like ‘%lee%’</p><p id="105GTMO5"><strong>8. 如何查询mysql数据库存放路径?</strong></p><p id="105GTMO6">mysql> show variables like 'datadir%';</p><p id="105GTMO8">| Variable_name | Value |</p><p id="105GTMOA">| datadir | /usr/local/mysql/data/ |</p><p id="105GTMOC">1 row in set (0.00 sec)</p><p id="105GTMOD"><strong>9. mysql数据库文件后缀名有哪些?用途什么?</strong></p><p><ul><li id="105GTN0S">myisam</li></ul></p><p id="105GTMOE">.frm文件:保护表的定义</p><p id="105GTMOF">.myd:保存表的数据</p><p id="105GTMOG">.myi:表的索引文件</p><p><ul><li id="105GTN0T">innodb</li></ul></p><p id="105GTMOH">.frm:保存表的定义</p><p id="105GTMOI">.ibd:表空间</p><p id="105GTMOK"><strong>10. 如何修改数据库用户的密码?</strong></p><p><ul><li id="105GTN0U">mysql8之前</li></ul></p><p id="105GTMOL">set password for 用户名@localhost = password('新密码');</p><p id="105GTMOM">mysqladmin -u用户名 -p旧密码 password 新密码</p><p id="105GTMON">update user set password=password('123') where user='root' and host='localhost';</p><p><ul><li id="105GTN0V">mysql8之后</li></ul></p><p id="105GTMOO"># mysql8初始对密码要求高,简单的字符串不让改。先改成:MyNewPass@123;</p><p id="105GTMOP">alter user 'root'@'localhost' identified by 'MyNewPass@123';</p><p id="105GTMOQ"># 降低密码难度</p><p id="105GTMOR">set global validate_password.policy=0;</p><p id="105GTMOS">set global validate_password.length=4;</p><p id="105GTMOT"># 修改成简易密码</p><p id="105GTMOU">alter user 'root'@'localhost'IDENTIFIED BY '1111';</p><p id="105GTMP0"><strong>11. 如何修改用户权限?如何查看?</strong></p><p><ul><li id="105GTN10">授权:</li></ul></p><p id="105GTMP1">grant all on *.* to user@'%' identified by 'passwd'</p><p><ul><li id="105GTN11">查看权限</li></ul></p><p id="105GTMP2">show grants for user@'%';</p><p id="105GTMP4"><strong>三、nosql</strong></p><p id="105GTMP5"><strong>1. redis数据持久化有哪些方式?</strong><br/></p><p><ul><li id="105GTN12">rdb</li><li id="105GTN13">aof</li></ul></p><p id="105GTMP7"><strong>2. redis集群方案有哪些?</strong></p><p><ul><li id="105GTN14">官方cluster方案</li><li id="105GTN15">twemproxy代理方案</li><li id="105GTN16">哨兵模式</li><li id="105GTN17">codis<br/>客户端分片</li></ul></p><p id="105GTMP8"><strong>3. redis如何进行数据备份与恢复?</strong></p><p><ul><li id="105GTN18">备份</li></ul></p><p id="105GTMP9">redis 127.0.0.1:6379> SAVE</p><p id="105GTMPA">创建 redis 备份文件也可以使用命令 BGSAVE,该命令在后台执行。</p><p><ul><li id="105GTN19">还原</li></ul></p><p id="105GTMPB">只需将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可</p><p id="105GTMPC">redis 127.0.0.1:6379> CONFIG GET dir</p><p id="105GTMPE"><strong>4. MongoDB如何进行数据备份?</strong></p><p id="105GTMPF">mongoexport / mongoimport</p><p id="105GTMPG">mongodump / mongorestore</p><p id="105GTMPI"><strong>5. kafka为何比redis rabbitmq快?</strong></p><p><blockquote id="105GTN5S">https://www.zhihu.com/question/22480085<br/></blockquote></p><p id="105GTMPL"><strong>四、docker</strong></p><p id="105GTMPM"><strong>1. dockerfile有哪些关键字?用途是什么?</strong></p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F0701%2F4450cc88j00rebgvj0062c000n300b2m.jpg&thumbnail=660x2147483647&quality=80&type=jpg"/><br/></p><p id="105GTMPP"><strong>2. 如何减小dockerfile生成镜像体积?</strong></p><p><ul><li id="105GTN1A">尽量选取满足需求但较小的基础系统镜像,例如大部分时候可以选择debian:wheezy或debian:jessie镜像,仅有不足百兆大小;</li><li id="105GTN1B">清理编译生成文件、安装包的缓存等临时文件;</li><li id="105GTN1C">安装各个软件时候要指定准确的版本号,并避免引入不需要的依赖;</li><li id="105GTN1D">从安全角度考虑,应用要尽量使用系统的库和依赖;</li><li id="105GTN1E">如果安装应用时候需要配置一些特殊的环境变量,在安装后要还原不需要保持的变量值;</li></ul></p><p id="105GTMPR"><strong>3. dockerfile中CMD与ENTRYPOINT区别是什么?</strong></p><p><ul><li id="105GTN1F">CMD 和 ENTRYPOINT 指令都是用来指定容器启动时运行的命令。</li><li id="105GTN1G">指定 ENTRYPOINT 指令为 exec 模式时,CMD指定的参数会作为参数添加到 ENTRYPOINT 指定命令的参数列表中。</li></ul></p><p id="105GTMPT"><strong>4. dockerfile中COPY和ADD区别是什么?</strong></p><p><ul><li id="105GTN1H">COPY指令和ADD指令都可以将主机上的资源复制或加入到容器镜像中</li><li id="105GTN1I">区别是ADD可以从 远程URL中的资源不会被解压缩。</li><li id="105GTN1J">如果是本地的压缩包ADD进去会被解压缩</li></ul></p><p id="105GTMPU"><strong>5. docker的cs架构组件有哪些?</strong></p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F0701%2F1dd21665j00rebgvi001gc000nq00pym.jpg&thumbnail=660x2147483647&quality=80&type=jpg"/><br/></p><p id="105GTMQ1"><strong>6. docker网络类型有哪些?</strong></p><p><ul><li id="105GTN1K">host模式</li><li id="105GTN1L">container模式</li><li id="105GTN1M">none模式</li><li id="105GTN1N">bridge模式</li></ul></p><p id="105GTMQ3"><strong>7. 如何配置docker远程访问?</strong></p><p><ul><li id="105GTN1O">vim /lib/systemd/system/docker.service</li><li id="105GTN1P">在ExecStart=后添加配置,注意,需要先空格后,再输入 -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock</li></ul></p><p id="105GTMQ5"><strong>8. docker核心namespace CGroups 联合文件系统功能是什么?</strong></p><p><ul><li id="105GTN1Q">namespace:资源隔离</li><li id="105GTN1R">cgroup:资源控制</li><li id="105GTN1S">联合文件系统:支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下</li></ul></p><p id="105GTMQ7"><strong>9. 命令相关:导入导出镜像,进入容器,设置重启容器策略,查看镜像环境变量,查看容器占用资源</strong></p><p><ul><li id="105GTN1T">导入镜像 docker load -i xx.tar</li><li id="105GTN1U">导出镜像docker save -o xx.tar image_name</li><li id="105GTN1V">进入容器docker exec -it 容器命令 /bin/bash</li><li id="105GTN20">设置容器重启策略启动时 --restart选项</li><li id="105GTN21">查看容器环境变量 docker exec {containerID} env</li><li id="105GTN22">查看容器资源占用docker stats test2</li></ul></p><p id="105GTMQ9"><strong>10. 构建镜像有哪些方式?</strong></p><p><ul><li id="105GTN23">dockerfile</li><li id="105GTN24">容器提交为镜像</li></ul></p><p id="105GTMQB"><strong>11. docker和vmware虚拟化区别?</strong></p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F0701%2F6eddee4dj00rebgvj004hc000h000cxm.jpg&thumbnail=660x2147483647&quality=80&type=jpg"/><br/></p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F0701%2Fdadcf793j00rebgvj003jc000gu007vm.jpg&thumbnail=660x2147483647&quality=80&type=jpg"/><br/></p><p id="105GTMQG"><strong>五、kubernetes</strong></p><p id="105GTMQH"><strong>1. k8s的集群组件有哪些?功能是什么?</strong></p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F0701%2Fdc300108j00rebgvj000xc000lv00f8m.jpg&thumbnail=660x2147483647&quality=80&type=jpg"/><br/></p><p id="105GTMQL"><strong>2. kubectl命令相关:如何修改副本数,如何滚动更新和回滚,如何查看pod的详细信息,如何进入pod交互?</strong></p><p><ul><li id="105GTN25">修改副本数</li></ul></p><p id="105GTMQM">kubectl scale deployment redis --replicas=3</p><p><ul><li id="105GTN26">活动更新</li></ul></p><p id="105GTMQN">kubectl set image deployments myapp-deploy myapp=myapp:v2</p><p><ul><li id="105GTN27">回滚</li></ul></p><p id="105GTMQO">kubectl rollout undo deployments myapp-deploy</p><p><ul><li id="105GTN28">查看pod详细信息</li></ul></p><p id="105GTMQP">kubectl describe pods/></p><p id="105GTM">name</p><p><ul><li id="105GTN29">进入pod交互</li></ul></p><p id="105GTMQR">kubectl exec -it -c bash</p><p id="105GTMQS"><strong>3. etcd数据如何备份?</strong></p><p><ul><li id="105GTN2A">etcdctl --endpoints=“https://192.168.32.129:2379,https://192.168.32.130:2379,192.168.32.128:2379” --cacert=/etc/kubernetes/cert/ca.pem --key=/etc/etcd/cert/etcd-key.pem --cert=/etc/etcd/cert/etcd.pem snapshot save snashot1.db</li><li id="105GTN2B">Snapshot saved at snashot1.db</li></ul></p><p id="105GTMQU"><strong>4. k8s控制器有哪些?</strong></p><p><ul><li id="105GTN2C">副本集(ReplicaSet)</li><li id="105GTN2D">部署(Deployment)</li><li id="105GTN2E">状态集(StatefulSet)</li><li id="105GTN2F">Daemon集(DaemonSet)</li><li id="105GTN2G">一次任务(Job)</li><li id="105GTN2H">计划任务(CronJob)</li><li id="105GTN2I">有状态集(StatefulSet)</li></ul></p><p id="105GTMR0"><strong>5. 哪些是集群级别的资源?</strong></p><p><ul><li id="105GTN2J">Namespace</li><li id="105GTN2K">Node</li><li id="105GTN2L">Role</li><li id="105GTN2M">ClusterRole</li><li id="105GTN2N">RoleBinding</li><li id="105GTN2O">ClusterRoleBinding</li></ul></p><p id="105GTMR2"><strong>6. pod状态有哪些?</strong></p><p><ul><li id="105GTN2P">Pending 等待中</li><li id="105GTN2Q">Running 运行中</li><li id="105GTN2R">Succeeded 正常终止</li><li id="105GTN2S">Failed 异常停止</li><li id="105GTN2T">Unkonwn 未知状态</li></ul></p><p id="105GTMR3"><strong>7. pod创建过程是什么?</strong></p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F0701%2F945133d9j00rebgvi0013c000ly00ekm.jpg&thumbnail=660x2147483647&quality=80&type=jpg"/><br/></p><p id="105GTMR7"><strong>8. pod重启策略有哪些?</strong></p><p id="105GTMR8">Pod的重启策略有3种,默认值为Always。</p><p><ul><li id="105GTN2U">Always :容器失效时,kubelet 自动重启该容器;</li><li id="105GTN2V">OnFailure :容器终止运行且退出码不为0时重启;</li><li id="105GTN30">Never :不论状态为何, kubelet 都不重启该容器</li></ul></p><p id="105GTMRA"><strong>9. 资源探针有哪些?</strong></p><p><ul><li id="105GTN31">ExecAction:在容器中执行一个命令,并根据其返回的状态码进行诊断的操作称为Exec探测,状态码为0表示成功,否则即为不健康状态。</li><li id="105GTN32">TCPSocketAction:通过与容器的某TCP端口尝试建立连接进行诊断,端口能够成功打开即为正常,否则为不健康状态。</li><li id="105GTN33">HTTPGetAction:通过向容器IP地址的某指定端口的指定path发起HTTP GET请求进行诊断,响应码为2xx或3xx时即为成功,否则为失败。</li></ul></p><p id="105GTMRC"><strong>10. requests和limits用途是什么?</strong></p><p><ul><li id="105GTN34">“requests”属性定义其请求的确保可用值,即容器运行可能用不到这些额度的资源,但用到时必须要确保有如此多的资源可用</li><li id="105GTN35">”limits”属性则用于限制资源可用的最大值,即硬限制</li></ul></p><p id="105GTMRE"><strong>11. kubeconfig文件包含什么内容,用途是什么?</strong></p><p id="105GTMRF">包含集群参数(CA证书、API Server地址),客户端参数(上面生成的证书和私钥),集群context 信息(集群名称、用户名)。</p><p id="105GTMRH"><strong>12. RBAC中role和clusterrole区别,rolebinding和 clusterrolebinding区别?</strong></p><p><ul><li id="105GTN36">Role 可以定义在一个 namespace 中,如果想要跨 namespace则可以创建ClusterRole,ClusterRole 具有与 Role相同的权限角色控制能力,不同的是 ClusterRole 是集群级别的</li><li id="105GTN37">RoleBinding 适用于某个命名空间内授权,而 ClusterRoleBinding 适用于集群范围内的授权</li></ul></p><p id="105GTMRJ"><strong>13. ipvs为啥比iptables效率高?</strong></p><p id="105GTMRK">IPVS模式与iptables同样基于Netfilter,但是ipvs采用的hash表,iptables采用一条条的规则列表。iptables又是为了防火墙设计的,集群数量越多iptables规则就越多,而iptables规则是从上到下匹配,所以效率就越是低下。因此当service数量达到一定规模时,hash查表的速度优势就会显现出来,从而提高service的服务性能</p><p id="105GTMRM"><strong>14. sc pv pvc用途,容器挂载存储整个流程是什么?</strong></p><p><ul><li id="105GTN38">PVC:Pod 想要使用的持久化存储的属性,比如存储的大小、读写权限等。</li><li id="105GTN39">PV :具体的 Volume 的属性,比如 Volume 的类型、挂载目录、远程存储服务器地址等。</li><li id="105GTN3A">StorageClass:充当 PV 的模板。并且,只有同属于一个 StorageClass 的 PV 和 PVC,才可以绑定在一起。当然,StorageClass 的另一个重要作用,是指定 PV 的 Provisioner(存储插件)。这时候,如果你的存储插件支持 Dynamic Provisioning 的话,Kubernetes 就可以自动为你创建 PV 了。</li></ul></p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F0701%2Fcf754b44j00rebgvj0014c000qv00ivm.jpg&thumbnail=660x2147483647&quality=80&type=jpg"/><br/></p><p id="105GTMRQ"><strong>15. nginx ingress的原</strong><strong>理本质是</strong><strong>什么?</strong></p><p><ul><li id="105GTN3B">ngress controller通过和kubernetes api交互,动态的去感知集群中ingress规则变化,</li><li id="105GTN3C">然后读取它,按照自定义的规则,规则就是写明了哪个域名对应哪个service,生成一段nginx配置,</li><li id="105GTN3D">再写到nginx-ingress-controller的pod里,这个Ingress<br/>controller的pod里运行着一个Nginx服务,控制器会把生成的nginx配置写入/etc/nginx.conf文件中,</li><li id="105GTN3E">然后reload一下使配置生效。以此达到域名分配置和动态更新的问题。</li></ul></p><p id="105GTMRS"><strong>16. 描述不同node上的Pod之间的通信流程</strong></p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F0701%2Fae97cbf1j00rebgvk00bsc000u000i8m.jpg&thumbnail=660x2147483647&quality=80&type=jpg"/><br/></p><p id="105GTMS1"><strong>17. k8s集群节点需要关机维护,需要怎么操作</strong></p><p><ul><li id="105GTN3F">进行pod驱逐:kubelet drain</li><li id="105GTN3G">检查node上是否无pod运行,切被驱逐的pod已经在其他节点运行正常</li><li id="105GTN3H">关机维护</li><li id="105GTN3I">开机启动相关服务(注意启动顺序)</li><li id="105GTN3J">解除node节点不可调度:kubectl uncordon node</li><li id="105GTN3K">创建测试pod,并使用节点标签测试节点可以被正常调度</li></ul></p><p id="105GTMS3"><strong>18. canal和flannel区别</strong></p><p><ul><li id="105GTN3L">Flannel(简单、使用居多):基于Vxlan技术(叠加网络+二层隧道),不支持网络策略</li><li id="105GTN3M">Calico(较复杂,使用率少于Flannel):也可以支持隧道网络,但是是三层隧道(IPIP),支持网络策略</li><li id="105GTN3N">Calico项目既能够独立地为Kubernetes集群提供网络解决方案和网络策略,也能与flannel结合在一起,由flannel提供网络解决方案,而Calico此时仅用于提供网络策略。</li></ul></p><p id="105GTMS6"><strong>六、prometheus</strong></p><p id="105GTMS8"><strong>1. prometheus对比zabbix有哪些优势?</strong><br/></p><p><blockquote id="105GTN5T">https://blog.csdn.net/wangyiyungw/article/details/85774969<br/></blockquote></p><p id="105GTMSA"><strong>2. prometheus组件有哪些,功能是什么?</strong></p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F0701%2F86922a80j00rebgvj001hc000j600crm.jpg&thumbnail=660x2147483647&quality=80&type=jpg"/><br/></p><p id="105GTMSD"><strong>3. 指标类型有哪些?</strong></p><p><ul><li id="105GTN3O">Counter(计数器)</li><li id="105GTN3P">Guage(仪表盘)</li><li id="105GTN3Q">Histogram(直方图)</li><li id="105GTN3R">Summary(摘要)</li></ul></p><p id="105GTMSE"><strong>4. 在应对上千节点监控时,如何保障性能</strong></p><p><ul><li id="105GTN3S">降低采集频率</li><li id="105GTN3T">缩小历史数据保存天数,</li><li id="105GTN3U">使用集群联邦和远程存储</li></ul></p><p id="105GTMSF"><strong>5. 简述从添加节点监控到grafana成图的整个流程</strong></p><p><ul><li id="105GTN3V">被监控节点安装exporter</li><li id="105GTN40">prometheus服务端添加监控项</li><li id="105GTN41">查看prometheus web界面——status——targets</li><li id="105GTN42">grafana创建图表</li></ul></p><p id="105GTMSG"><strong>6. 在工作中用到了哪些exporter</strong></p><p><ul><li id="105GTN43">node-exporter监控linux主机</li><li id="105GTN44">cAdvisor监控容器</li><li id="105GTN45">MySQLD Exporter监控mysql</li><li id="105GTN46">Blackbox Exporter网络探测</li><li id="105GTN47">Pushgateway采集自定义指标监控</li><li id="105GTN48">process exporter进程监控</li></ul></p><p id="105GTMSI"><strong>七、ELK</strong></p><p id="105GTMSJ"><strong>1. Elasticsearch的数据如何备份与恢复?</strong><br/></p><p><blockquote id="105GTN5U">https://www.cnblogs.com/tcy1/p/13492361.html<br/>https://blog.csdn.net/moxiaomomo/article/details/78401400?locationNum=8&fps=1<br/></blockquote></p><p id="105GTMSL"><strong>2. 你们项目中使用的logstash过滤器插件是什么?实现哪些功能?</strong></p><p><ul><li id="105GTN49">date 日期解析</li><li id="105GTN4A">grok 正则匹配解析</li><li id="105GTN4B">overwrite 写某个字段</li><li id="105GTN4C">dissect 分隔符解析</li><li id="105GTN4D">mutate 对字段做处理</li><li id="105GTN4E">json 解析</li><li id="105GTN4F">geoip 地理位置解析</li><li id="105GTN4G">ruby 修改logstash event</li></ul></p><p id="105GTMSN"><strong>3. 是否用到了filebeat的内置module?用了哪些?</strong></p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F0701%2Ff7bbed40j00rebgvj0019c000i600bbm.jpg&thumbnail=660x2147483647&quality=80&type=jpg"/><br/></p><p id="105GTMSQ"><strong>4. elasticsearch分片副本是什么?你们配置的参数是多少?</strong></p><p><blockquote id="105GTN5V">https://juejin.cn/post/6844903862088777736<br/></blockquote></p><p id="105GTMST"><strong>八、运维开发</strong></p><p id="105GTMSU"><strong>1. 备份系统中所有容器镜像</strong><br/></p><p id="105GTMSV">#备份镜像列表</p><p id="105GTMT0">docker images|awk 'NR>1{print $1":"$2}'|sort > images.list。</p><p id="105GTMT1">#导出所有镜像为当前目录下文件:</p><p id="105GTMT2">while read img; do</p><p id="105GTMT3">echo $img</p><p id="105GTMT4">file="${img///-}"</p><p id="105GTMT5">sudo docker save --output $file.tar $img</p><p id="105GTMT6">done < images.list</p><p id="105GTMT7">#将本地镜像文件导入为Docker镜像:</p><p id="105GTMT8">while read img; do</p><p id="105GTMT9">echo $img</p><p id="105GTMTA">file="${img///-}"</p><p id="105GTMTB">docker load < $file.tar</p><p id="105GTMTC">done < images.list</p><p id="105GTMTE"><strong>2. 编写脚本,定时备份某个库,然后压缩,发送异机</strong></p><p><ul><li id="105GTN4H">公共部分定义函数,如获取时间戳,配置报警接口</li><li id="105GTN4I">多使用if判断是否存在异常并处理,如数据库大,检测任务是否完成。检测生成文件大小是否是空文件</li></ul></p><p id="105GTMTF"><strong>3. 批量获取所有主机的系统信息</strong></p><p><ul><li id="105GTN4J">使用python的paramiko库,ssh登陆主机执行查询操作</li><li id="105GTN4K">使用shell脚本批量ssh登陆主机并执行命令</li><li id="105GTN4L">使用ansible的setup模块获取主机信息</li><li id="105GTN4M">prometheus的node_exporter收集主机资源信息</li></ul></p><p id="105GTMTH"><strong>4. django的mtv模式流程</strong></p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F0701%2F19c3a14cj00rebgvi0012c000rk00bym.jpg&thumbnail=660x2147483647&quality=80&type=jpg"/><br/></p><p id="105GTMTL"><strong>5. python如何导出、导入环境依赖包</strong></p><p><ul><li id="105GTN4N">导出环境</li></ul></p><p id="105GTMTM">pip freeze >> requirements.txt</p><p><ul><li id="105GTN4O">导入环境</li></ul></p><p id="105GTMTN">pip install -r requirement.txt</p><p id="105GTMTP"><strong>6. python创建,进入,退出,查看虚拟环境</strong></p><p><ul><li id="105GTN4P">安装软件包</li></ul></p><p id="105GTMTQ">pip3 install virtualenv</p><p><ul><li id="105GTN4Q">检测安装是否成功</li></ul></p><p id="105GTMTR">virtualenv --version</p><p><ul><li id="105GTN4R">创建虚拟环境</li><li id="105GTN4S">cd到要创建虚拟环境的目录</li></ul></p><p id="105GTMTS">cd github/test/venv/</p><p><ul><li id="105GTN4T">创建虚拟环境</li></ul></p><p id="105GTMTT">virtualenv test</p><p><ul><li id="105GTN4U">激活虚拟环境</li></ul></p><p id="105GTMTU">source test/bin/activate(activate路径)</p><p><ul><li id="105GTN4V">退出虚拟环境</li></ul></p><p id="105GTMTV">deactivate</p><p id="105GTMU1"><strong>7. flask和django区别,应用场景</strong></p><p><ul><li id="105GTN50">Django功能大而全,Flask只包含基本的配置 Django的一站式解决的思路,能让开发者不用在开发之前就在选择应用的基础设施上花费大量时间。Django有模板,表单,路由,认证,基本的数据库管理等等内建功能。与之相反,Flask只是一个内核,默认依赖于两个外部库:Jinja2 模板引擎和 Werkzeug WSGI 工具集,其他很多功能都是以扩展的形式进行嵌入使用。</li><li id="105GTN51">Flask 比 Django 更灵活 用Flask来构建应用之前,选择组件的时候会给开发者带来更多的灵活性 ,可能有的应用场景不适合使用一个标准的ORM(Object-Relational Mapping 对象关联映射),或者需要与不同的工作流和模板系统交互。</li></ul></p><p id="105GTMU3"><strong>8. 列举常用的git命令</strong></p><p><ul><li id="105GTN52">$ git init</li><li id="105GTN53">$ git config</li><li id="105GTN54">$ git add</li><li id="105GTN55">$ git commit</li><li id="105GTN56">$ git branch</li><li id="105GTN57">$ git checkout</li><li id="105GTN58">$ git tag</li><li id="105GTN59">$ git push</li><li id="105GTN5A">$ git status</li><li id="105GTN5B">$ git log</li></ul></p><p id="105GTMU5"><strong>9. git gitlab jenkins的CICD流程如何配置</strong></p><p><ul><li id="105GTN5C">开发者git提交代码至gitlab仓库</li><li id="105GTN5D">jenkins从gitlab拉取代码,触发镜像构建</li><li id="105GTN5E">镜像上传至harbor私有仓库</li><li id="105GTN5F">镜像下载至执行机器</li><li id="105GTN5G">镜像运行</li></ul></p><p id="105GTMU7"><strong>九、日常工作</strong></p><p id="105GTMU9"><strong>1. 在日常工作中遇到了什么棘手的问题,如何排查</strong></p><p><ul><li id="105GTN5H">redis弱口令导致中挖矿病毒,排查,优化</li><li id="105GTN5I">k8s中开发的程序在用户上传文件时开启进程,未及时关闭,导致节点超出最大进程数</li></ul></p><p id="105GTMUB"><strong>2. 日常故障处理流程</strong></p><p><ul><li id="105GTN5J">查看报警内容,快速定位大致故障主机,服务,影响范围</li><li id="105GTN5K">告知运维经理故障,并开始排查</li><li id="105GTN5L">如果需要修改配置文件,重启服务器等操作,告知相关开发人员</li><li id="105GTN5M">完成故障处理</li></ul></p><p id="105GTMUD"><strong>3. 修改线上业务配置文件流程</strong></p><p><ul><li id="105GTN5N">先告知运维经理和业务相关开发人员</li><li id="105GTN5O">在测试环境测试,并备份之前的配置文件</li><li id="105GTN5P">测试无误后修改生产环境配置</li><li id="105GTN5Q">观察生产环境是否正常,是否有报警</li><li id="105GTN5R">完成配置文件更改</li></ul></p><p id="105GTMUE"><strong>4. 业务pv多少?集群规模多少?怎么保障业务高可用?</strong></p><p id="105GTMUG"><strong>十、开放性问题</strong></p><p id="105GTMUI"><strong>1. 你认为初级运维工程师和高级运维工程师的区别?</strong><br/></p><p id="105GTMUJ"><strong>2. 你认为未来运维发展方向?</strong></p><p><blockquote id="105GTN60"><strong>来源:</strong>https://mp.weixin..com/s/uihP6Nmw4wV28QhXHZK-jg<br/></blockquote></p>
讯享网

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/203798.html