文章目录
- 第一阶段
-
- 平常怎么处理故障,思路是什么样的
- 公网和私网分类以及范围,本机地址,网络地址,广播地址
- 交换机的工作原理
- ICMP是什么干什么用的,它有哪些命令
- TCP和UDP协议的区别
- tcp有哪些控制位,分别是什么意思
- 你是用过哪些Linux命令
- Linux 系统安全优化与内核优化
- IOS七层模型
- 三次握手与四次挥手
- lvm 逻辑卷创建过程
- raid 磁盘阵列
- 文本三剑客
- 防火墙iptables与fireward
- Linux系统资源查询命令
- Linux 引导过程
- shell 函数的创建方法
- 免交互的使用
- 你是用过哪些shell脚本
- Tcpdump抓包使用工具
- CPU过高怎么解决
- 什么是中间件?什么是 JDK
- 第二阶段
- 第三阶段
-
- Docker
- Ansible
- K8S
- K8S 二进制搭建
- K8S kubeadm搭建
- kubeadm 部署的K8S集群更新证书
- K8S 3种网络
- K8S 3种接口
- flannel 3种模式
- flannel UDP模式工作原理
- flannel VXLAN模式工作原理
- Calico IPIP模式工作原理
- Calico BGP模式工作原理(本质就是通过路由表来维护每个 Pod 的通信)
- flannel 和 calico 区别?
- 陈述式资源管理
- service 的 4 种类型:
- service 的端口:
- 如何获取资源配置清单文件模板(yaml配置文件)
- 一个pod能包含几个容器?
- pause容器的作用?
- Pod 的 3 种类型:
- Pod 的 3 种容器:
- Pod 的 3 种镜像拉取策略: spec.containers.imagePullPolicy
- Pod 的 3 种容器重启策略: spec.restartPolicy
- Pod 容器的资源限制
- Pod 容器的 3 种探针(健康检查)
- 探针的 3 种探测方式
- 探针参数:
- Pod 应用容器生命周期的启动动作和退出动作
- K8S是通过 List-Watch 机制实现每个组件的协作
- scheduler 的调度策略
- Pod 调度到指定的 Node节点
- 标签的管理操作
- 亲和性
- 如何判断是否在同一个拓扑域?
- 亲和性的策略
- 污点 taint
- 容忍 tolerations
- 不可调度
- 不可调度 + 驱逐
- Pod 的启动过程:
- Pod 生命周期的 5 种状态
- K8S 中的排障手段
- K8S 的 存储卷 volumes
- PV PVC
- 创建 PV 的方式(PV的类型):
- PV 的 4 种状态:
- 创建使用 静态PV
- 创建使用 动态PV
- pod的 5 种控制器:
- 有状态服务和无状态服务的区别
- configmap
- Secret资源的 4 种类型:
- 创建 Secret资源
- 使用 Secret资源
- 陈述式管理资源的方式 修改或添加 资源对象的配置
- K8S集群外的客户端应用访问K8S集群内部服务的方案
- ingress 的组成:
- ingress 的使用:
- ingress 的配置
- 基于 https 代理转发
- 基于 basic-auth 访问认证
- 基于 rewrite 重写访问路径
- pod 的自动伸缩
- K8S 的安全机制
- 如何授权让一个普通用户能够使用 kubectl 在 K8S 中具有操作资源权限?
- Helm 是K8S的软件包(Chart包)管理器
- Helm 的三大概念:
- Helm 仓库管理命令:
- chart包的关键组成:
- Prometheus
第一阶段
平常怎么处理故障,思路是什么样的
看故障现象根据经验就知道原因;
第一次碰到,先定位问题,故障不一定是我的问题,开发、测试、硬件、网络,也可能我的问题;如果问题在我,根据错误提示信息、系统日志、错误日志去分析问题。
系统问题可以用top看cpu、df看磁盘、uptime看负载、ps看进程、sar看流量。
应用程序就是看日志提示解决问题,如果是开发问题,可以通过邮件等方式,描述故障现象和定位过程发送给开发对接人和我的领导。
如果是网络问题,路由、交换机可以找网络工程师,可以抓包tcpdump;
如果是硬件问题,可以找厂商。
公网和私网分类以及范围,本机地址,网络地址,广播地址
公网
A:1.0.0.1~126.255.255.254/18
B:128.0.0.1~191.255.255.254/16
C:192.0.0.1~223.255.255.254/24
D:224.0.0.1~239.255.255.254
E:240.0.0.1~255.255.255.254
私网
10.0.0.0~10.255.255.255
172.16.0.0~172.31.255.255
192.168.0.0~192.168.255.255
其他
169.254.0.0~169.254.255.255 DHCP失效时分配的网址
127开头的都是本机 127.255.255.255除外 它是广播地址
224.0.0.18 VRRP协议交换机侦听此地址
交换机的工作原理
1)交换机开机时MAC地址表没有任何记录
2)源主机通过交换机发送数据帧给目标主机,交换机学习数据帧中的源MAC和对应接口标识并记录到MAC地址表中
3)如果交换机的MAC地址没有目的MAC地址所对应的接口记录,则会进行广播泛洪
4)只有拥有对应的MAC地址的主机才会进行回应响应
5)交换机会从目的主机回复的消息中学习到MAC地址和对应的接口标识并记录到MAC地址表中,之后两台主机可以通过交换机的MAC地址表进行单播通信
交换机通过MAC地址表的记录实现数据帧的转发,MAC地址表默认老化时间300S
ICMP是什么干什么用的,它有哪些命令
是一个错误侦测与回馈机制,发送错误和控制消息来探测节点的网络连通性
ping
pathping 例子:pathping www.baidu.com 跟踪数据包路径,计算机丢包情况
traceroute
TCP和UDP协议的区别
TCP UDP
可靠性 可靠 不可靠
连接性 面向连接 无连接
报文 面向字节流 面向报文(保留报文的边界)
效率 传输效率低 传输效率高
双工性 全双工 一对一、一对多、多对一、多对多
流量控制 有(滑动窗口) 无
拥塞控制 有(慢开始、拥塞避免、快重传、快恢复) 无
tcp有哪些控制位,分别是什么意思
URG 紧急位
ACK 确认位
PSH 急迫位
RST 重置位
SYN 同步(连接)位
FIN 断开位
你是用过哪些Linux命令
性能监控方面: free 查看内存 top 动态监控cpu 负载 等 df 查看磁盘使用 ps 查看进程 iostat 查看io
用户方面:useradd 创建用户 chmod 修改权限 chown 设置归属
查询方面: sed grep awk cat more less which whereis
Linux 系统安全优化与内核优化
安全优化: 设置防火墙规则 限制root 用户远程登录 设置历史命令条目及登录超时 chattr锁定文件 时间同步 配置yum更新源
内核系统优化:
sysctl.conf 文件中 net.ipv4.ip_forward 设置路由转发 net.ipv4.tcp tw recycle = 1 开启time-wait 快速回收 net.ipv4.ip_local_port_range = 1024 65000 设置外向连接端口范围 /etc/security/limits.conf nofile 设置文件最大打开数 nproc 设置最大进程数 rss 设置最大常驻集大小 menlock 锁定内存地址空间
经常使用shell脚本做什么
使用shell脚本进行重复性的操作
一键部署公司的业务服务
日志的监控和分割 备份 配置crontab -e 进行计划性任务
巡检
软连接与硬链接的区别
硬链接与源文件共享inode ,也就是说,他们都指向同一份数据,占用的磁盘空间也相同,删除一共硬链接并不影响源文件内容和其他硬链接,相当于给文件起了一共别名
软连接与源文件不仅inode不同,源文件删除了。软连接也就失效了,类似于一个快捷方式、
怎么查看文件
find 查找文件
locate 查找系统中已经建立的文件索引库
whereis 可以查找指定命令的二进制文件、源代码文件
which 查找命令所在的目录
IOS七层模型
- 物理层
- 数据链路层
- 网络层
- 传输层
- 会话层
- 表示层
- 应用层
三次握手与四次挥手
三次握手 : pc1 向 pc2 发送一个 SYN 报文,pc 回复一个 SYN + ACK 报文 pc1 再次发送一个ACK报文
四次挥手: pc1发送一个FIN / ACK 报文给pc2 (此时pc1客户端进入等待断开连接状态)
pc2接收到pc1发送的请求断开报文之后回复一个ACK报文进行确认
pc2紧接着发送一个FIN / ACK 报文给pc1(此时pc2客户端进入等待断开连接状态)
pc1收到后发送ACK报文进行确认 (此时pc1进入时间等待状态 60秒后默认结束)
lvm 逻辑卷创建过程
- 创建一个物理卷: pvcreate 设备名(可创建多个)
- 创建卷组 : vgcreate 卷组名 物理卷名
- 创建逻辑卷: lvcreate -L 容量大小 -n 逻辑卷名 卷组名
- 扩展卷组:先扩展物理卷 在使用 vgextend 卷组名 设备
- 扩展逻辑卷 : 随后使用 lvextend -L + 容量大小 /dev/卷组名/逻辑卷名
- 格式化 挂载使用·
磁盘配额
- 首先检查是否安装 xfsprogs 和 xfs_quota
- 以支持配额的方式进行挂载文件系统 mount -o usrquota,grpquota /dev/vgname1/lvname1 /opt 或者永久挂载/ dev / vgname1 / lvname1 / opt xfs defaults,usrquota, grpquota 0
- 对用户和组账号进行配额限制 xfs_quota -x -c 'limit -u bsoft-80M bhard-100M isoft=40 ihard=50 lisi’ /opt/
- 验证用户在限制目录下的使用
raid 磁盘阵列
raid 0 条带化存储 传输速率达到单个硬盘的N 倍 但它没有数据冗余
raid 1 镜像存储 实现数据冗余 但利用率为N/2
raid 5 N>=3 块盘组成 利用率 (N-1)/N (其中有一块是用来校验的)
raid 6 N>=4 块盘组成 (N-2)/ N (有两块盘用来校验)
raid 1 0 先做镜像 再做条带 利用率 N/2
文本三剑客
grep :
-i 不区分大小写
-v 取反
-n 显示行号
-r 递归过滤文件夹中的所有内容
-w 只显示全部字符的列
-l 列出文件内容符合指定的样式文件名称
sed :
-i 替换:s 对指定的内容进行替换
d 删除选定的行
a 在当前行的下面增加一行内容
i 在当前行的上面增加一行内容
c 替换选定行为指定内容
y 字符转换 转换前后的字符必须长度相同
awk:
FS 列分隔符
NF 当前处理行的字段个数
NR 当前处理行的序号
RS 行分隔符
防火墙iptables与fireward
四表:raw 表 mangle表 nat 表 filter 表
五链:INPUT 链 OUTPUT 链 FORWARD 链 PREROUTING 链 POSTROUTING 链
firewalld防火墙9大区域:trusted(信任区域) public (公共区域) home (家庭区域) internal (内部区域) work (工作区域) dmz(隔离区域) block (限制区域) drop (丢弃区域)
Linux系统资源查询命令
free 查看交换空间内存状态
cat /etc/redat-release ; cat /etc/*release ; cat /proc/version 查看当前系统版本
uname -r 查看内核版本
cat /proc/cpuinfo、sar、 lscpu 查看cpu 信息
vmstat 查看系统内存 、交换空间、io、cpu 信息
iostat 查看磁盘io性能
top 动态的查看当前进程信息 cpu负载信息 内存信息
uptime 、 w 显示系统运行时间,登入用户和cpu负载情况
cat /proc/meninfo 查看内存
ps -T top -H 查看线程
日志的八大等级
emerg 紧急
alert 警告
crit 严重
err 错误
warning 提醒
notice 注意
info 信息
debug 调式
Linux 引导过程
- 开机自检
- MBR引导
- Grup 菜单
- 加载linux内核
- init进程初始化
shell 函数的创建方法
函数名 () {
}
function 函数名 {
}
免交互的使用
EOF 进行免交互
EXPECT 进行免交互:
申明脚本解释器
2. swap 开启一个会话 3. expect 进行匹配 字符 4. send 代表输入字符 5. 结束符 expect eof
你是用过哪些shell脚本
Tcpdump抓包使用工具
-i : 指定 tcpdump 监听的网络接口
-s : 指定要监听的数据包的长度
-c : 指定要监听的数据包数量 ,达到数量后自动停止抓包
-w : 指定将监听到的数据包写入文件中保存
-n : 将每个监听到的数据包中的域名转换成 IP 地址后显示
CPU过高怎么解决
用 top 命令查看哪个进程 cpu 使用过高
再用 top -H -p 显示特定进程中的线程,锁定cpu使用过高的线程
看这个进程是否是业务进程,不是直接kill 掉即可
如何杀死僵尸进程
先用top 命令查看是否具有僵尸进程
再红色表示的地方,如果 zombie 大于0 表示服务器当前存在僵尸进程
ps -A -o stat,ppid,pid,cmd | grep -e ‘1’
什么是中间件?什么是 JDK
中间件
他是一种独立的系统软件或服务程序,分布式应用软件借助他在不同技术之间共享资源
中间件位于客户机/服务器的操作系统之上,管理计算机资源和网络通讯
JDK
是java开发工具包
他是一种用于构建再java平台上发布的应用程序,applet和组件的开发环境
什么是CDN
CDN 是内容分发网络,
工作原理: 将您源站的资源缓存到位于全球各地的CDN节点上,用户请求资源时,就近返回节点上缓存的资源,而不需要每个用户的请求都回你都源站获取,避免网络堵塞、缓解源站压力,保证用户访问资源的速度和体验
第二阶段
http
http 的版本
http 1.0 纯文本传输;http响应后会立即关闭TCP连接;支持http头部信息(比如http协议版本号,状态码等)
http/1.1:支持长连接(连接保持,持久连接)和管道机制(在一TCP连接中实现多个http请求和响应)
http/2.0:二进制传输;支持长连接和完全多路复用(在一个TCP连接中同时发送多个请求,且不用按照顺序一一对应);支持网页头部压缩,支持服务端主动推送
http/3.0:基于UDP协议的
http 响应状态码
200 一切正常
301 永久重定向
302 临时重定向
401 用户名/密码错误
403 拒绝访问
404 文件不存在
500 服务器内部错误
502 错误网关
503 服务不可用
504 网关超时
Nginx
Nginx 的常用模块有哪些?
gzip 压缩模块
rewrite 重写模块
upstream 负载均衡模块
proxy 代理模块
status 状态统计模块
ssl ssl模块加密http连接
auth_basic 认证模块
Nginx 的 session 不同步怎么办
可以采用 ip_hash 指令解决这个问题,如果客户已经访问了某个服务器,当客户再次访问时会通过hash算法,自动定位到该服务器。即每个访客固定访问一个后端服务器,可以有效解决session 的问题
其他方法: 采用 spring_session+redis ,把session放入到缓存中实现session共享
nginx的优化
配置文件优化:
- 配置网页压缩
- 隐藏版本号
- 设置缓存事件
- 设置工作进程数
- 设置连接保持
- 设置并发
- 防盗链
- 日志分割
系统内核级别优化:
/etc/security/limits.conf:
- 打开文件数 nofile
- 打开进程数 nproc
- 内存锁定不限制 memlock
- 最大常驻集 rss
/etc/sysctl.conf
- 开启 SYN cookies
- 允许将time-wait 重新应用于新的TCP连接
- 开启 TIME-WAIT sockets 快速回收
- 设置系统同时保持time wait 最大数量
- 发送keepalive探测包消息的频度
- 外向连接端口范围
Nginx如何实现动静分离
服务端接收来自客户端的请求中,既有静态资源也有动态资源,静态资源由Nginx提供服务,动态资源则由Nginx转发至后端服务器处理(tomcat);Nginx作为负载均衡器以及反向代理
在Nginx上配置反向代理(七层),在Http项里面先配置upstream+服务器地址池名称大括号{}里面配置地址池,server+后端服务器的IP:端口,可以配置权重或者负载均衡策略ip_hash
然后在server项中再配置location项匹配以.jsp结尾的动态页面则使用proxy_pass http://+服务器地址池名称进行转发,其他静态页面则交给Nginx出来处理
Nginx反向代理有哪些方式实现,有什么区别 ?如何配置
四层反向代理: 基于ip和端口进行转发
首先要加载stream 模块,stream 模块与http同级,所以一般配置在http上面,需要配置upstream服务器池和监听端口以及代理转发
先配置upstream+服务器地址池名称{}大括号里面定义地址池:server +后端服务器的IP以及端口,还可加上权重或者负载均衡策略
再配置server项,server{}大括号里面配置监听端口以及proxy_pass+服务器地址池名称进行转发
七层方向代理: 基于http、https、mail进行转发
要配置在http里面,来配置upstream服务器池与server项配置。先配置upstream+服务器地址池名称大括号{}里面配置地址池:server+后端服务器的IP:端口,可自定义权重或者负载均衡策略
再配置server项中的location项匹配以.jsp结尾的动态页面则使用proxy_pass http://+服务器地址池名称进行转发给后端服务器tomcat,其他静态页面则交给Nginx来处理
Nginx 负载均衡调度算法有哪些?
- 轮询
- 加权轮询
- 最少链接
- ip_hash
- url_hash
- fair
tomcat知识点
tomcat 三个端口号
- 8005 关闭tomcat通信端口
- 8080 http访问的端口号
- 8009 AJP协议访问端口 ,容器使用
tomcat 优化
配置文件优化: maxThreads (最大线程数) acceptcount (等待队列数) enablelookups (关闭dns反向解析) maxkeepaliverequests (连接保持最大请求数) connectiontimeout (连接超时时间) compression (开启网页压缩)
系统内核优化: /etc/security/limits.conf : 打开最大文件数 、打开最大进程数、锁定内存地址空间、rss 最大持久设置大小
/etc/sysctl.conf: 开启tcp连接中time-wait 快速回收、允许time-wait sockets 重新用于新的tcp连接、外向连接端口范围
JVM 优化: 设置堆内存初始值和堆内存最大值(一般为物理内存的1/2) 设置非堆内存和最大非堆内存(一般为物理内存的1/4)、
LVS
LVS、Nginx、Haproxy 有什么区别?
- LVS 可实现4层负载均衡,无法基于目录、url 转发,而Haproxy和nginx都可以实现4层和7层
- lvs其状态检测功能单一、而haproxy在监测方面功能更加丰富、强大、可支持端口、url 脚本等多种状态检测
- haproxy 功能强大、但整体性能低于4层的lvs负载均衡
- nginx 主要用于web服务器或缓存服务器
简述LVS三种模式 以及工作中使用哪种模式
NAT 地址转换
调度器会作为所有节点服务器的默认网关,也是客户机的访问入口和节点服务器返回响应消息的出口,也就是说调度器会承载双向数据的负载压力,可能会成为整个群集的性能瓶颈。
由于节点服务器都处于内网环境,使用私网IP地址,所以安全性尚可。
TUN IP隧道 IP Tunnel
调度器仅作为客户端的访问入口,节点服务器的响应消息是直接返回给客户端的,不经过调度器
由于节点服务器需要部署在不同位置的公网环境中,需要具有独立公网IP,调度器与节点服务器是通过专用的IP隧道实现相互通信的,因为IP隧道模式的成本较高、安全性较低,且IP隧道需要更多的封装和解封装过程,性能也会受到一定的影响
DR 直接路由 Direct Routing
调度器仅作为客户端的访问入口,节点服务器的响应消息是直接返回给客户端的,不经过调度器,节点服务器与调度器是部署在同一个局域网内,因此不需要建立专用的IP隧道。DR模式是企业的首选模式。
NAT模式配置注意点
客户端和节点服务器 的默认网关要指向 调度器的IP
调度器要设置 IP路由转发 和 SNAT 等 iptables 规则
调度器安装 ipvsadm 配置 虚拟服务器 和 真实节点服务器
DR模式配置注意点
节点服务器要在 lo:0 上配置VIP , 修改内核参数 arp_ignore = 1 arp_announce = 2 , 添加路由
调度器要在 ens33:0 上配置VIP , 修改内核参数关闭ip路由转发和重定向功能
调度器安装 ipvsadm 配置 虚拟服务器 和 真实节点服务器
keepalived
脑裂的原因,如何解决
什么是脑裂
- 相互之间失去了联系,都误以为对方挂掉了,两个节点像脑裂一样抢占资源 ,最终导致出现了两个master
都有哪些原因导致脑裂
- 链路出现了问题,导致无法正常通信
- 高可用服务器开启了防火墙从而阻挡了心跳消息的传输
- 高可用心跳网卡地址等信息配置不正确,导致发送心跳失败
解决方法
- 增加一条链路,作为备用链路
- 通过脚本的方式解决
- 通过第三方监控软件方式解决,既监控服务器状态,也监控网络流量
简述 keepalived 如何通过健康检查来实现高可用?
mysql
sql 语句
show databases; 查看数据库
show tables; 查看库中的表
desc 表名; 查看表的结构
create database 数据库名; 创建新的数据库
create table 表名 (字段1 数据类型, 字段2 数据类型) 创建新的表
drop table 表名; 删除表
drop database 数据库; 删除库
select 字段1,字段2 from 表名;查询表的记录
update 表名 set 字段名1=字段1;修改,更新数据表中的数据
delete from 表名 【where 条件表达式】; 删除指定数据
alter table 旧的表名 rename 新的表名 ; 修改表名
alter table 表名 add 字段 数据类型 default ‘默认值’ ;扩展表结构(增加字段)
ater table 表名 change 旧列名 新列名 数据类型 ;修改字段名
alter table 表名 drop 字段名; 删除字段
create user ‘用户名’@‘来源地址’ 【identified by ‘密码’】 ; 创建用户
select user(); 查看当前登录用户
DROP USER ‘用户名‘@’来源地址‘ 删除用户
SET PASSWORD = PASSWORD(‘abc123’); 修改当前用户密码
grant 权限列表 on 数据库名 . 表名 to ’用户名@来源地址‘; 给用户授权
show grants for ’用户名‘@’来源地址‘; 查看权限
revoke 权限 on 库名 . 表名 from ’用户‘@’来源地址‘; 撤销权限
mysql> create table if not exists 快餐 (
-> id int(4) zerofill primary key auto_increment,
-> name char(4) not null default'匿名',
-> phone varchar(11) unique key);
#if not exists:表示检测要创建的表是否已存在,如果不存在就继续创建
#int(4) zerofill:表示若数值不满4位数,则前面用“0”填充,例0001
#auto_increment:表示此字段为自增长字段,即每条记录自动递增1,默认从1开始递增;自增长字段数据不可以重复;自增长字段必须是主键;如添加的记录数据没有指定此字段的值且添加失败也会自动递增一次
#unique key:表示此字段唯一键约束,此字段数据不可以重复;一张表中只能有一个主键, 但是一张表中可以有多个唯一键
#not null:表示此字段不允许为NULL
克隆表
方法一:
create table ggb like mdl; #通过 LIKE 方法,复制 KY08 表结构生成 test01 表
insert into ggb select * from mdl;
#此方法能保证 新表的表结构、表数据 跟旧表都是一致的
方法二:
CREATE TABLE zzx (SELECT * from mdl);
#此方法创建的新表的表数据和旧表是一样的,但可能会出现新表的表结构和旧表的不一致
清空表数据
方法一:
delete from ggb;
#DELETE清空表后,返回的结果内有删除的记录条目;DELETE工作时是一行一行的删除记录数据的;如果表中有自增长字段,使用DELETE FROM 删除所有记录后,再次新添加的记录会从原来最大的记录 ID 后面继续自增写入记录。
方法二:
truncate table mdl;
#TRUNCATE 清空表后,没有返回被删除的条目;TRUNCATE 工作时是将表结构按原样重新建立,因此在速度上 TRUNCATE 会比 DELETE 清空表快;使用 TRUNCATE TABLE 清空表内数据后,ID 会从 1 开始重新记录。
Mysql 六大约束
primary key 主键约束
foreign key 外键约束
not null 非空约束
unique key 唯一键约束
default 默认值约束
auto_increment 自增约束
遗忘 root 密码的解决方法
vim /etc/my.cnf 添加 skip-grant-tables 使登录mysql不适用密码验证
登入数据库后 使用 update mysql.user set AUTHENTICATION_STRING = PASSWORD(‘abc123’) where user=‘root’;
flush privileges; 即可
索引的作用
索引的作用就是加快表的查询速度,同时对表的字段进行排序
索引的创建
create unique index 索引名 on 表名(列名); 直接创建唯一索引 alter table 表名 add index 索引名(列明); 修改表结构进行添加索引
create unique index 索引名 on 表名(列名); 直接创建唯一索引 ALTER TABLE 表名 ADD UNIQUE 索引名 (列名); 修改表结构创建唯一索引
ALTER TABLE 表名 ADD PRIMARY KEY (列名); 创建主键索引
mysql 事务的 ACID 特性与四种隔离
ACID : 原子性 一致性 隔离性 持久性
四种隔离: 提交读 不可提交读 可重复读 穿行读