MENU

TI

• 2020 年 08 月 19 日

一、linux

系统启动流程

内核的引导。
运行 init。
系统初始化。
建立终端 。
用户登录系统。

linux文件类型

文件属性文件类型
-常规文件,即file
d目录文件
bblock device 即块设备文件,如硬盘;支持以block为单位进行随机访问
ccharacter device 即字符设备文件,如键盘支持以character为单位进行线性访问
lsymbolic link 即符号链接文件,又称软链接文件
ppipe 即命名管道文件
ssocket 即套接字文件,用于实现两个进程进行通信

centos6和7怎么将源码安装的程序添加到开机自启动?

将程序可执行脚本加入/etc/rc.local文件中,文件和脚本都需要可执行权限
如果程序需普通用户启动,使用su -普通用户 -c即可

如何升级内核,目前最新版本号多少?

# rpm -import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
# yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
# yum -y --enablerepo=elrepo-kernel install kernel-ml.x86_64 kernel-ml-devel.x86_64 

为何du和df统计结果不一致?

用户删除了大量的文件被删除后,在文件系统目录中已经不可见了,所以du就不会再统计它。
然而如果此时还有运行的进程持有这个已经被删除的文件句柄,那么这个文件就不会真正在磁盘中被删除,分区超级块中的信息也就不会更改,df仍会统计这个被删除的文件。
可通过 lsof命令查询处于deleted状态的文件,被删除的文件在系统中被标记为deleted。如果系统有大量deleted状态的文件,会导致du和df统计结果不一致。

nginx日志访问量前十的ip怎么统计?

awk '{print $1}' access.log |sort | uniq -c | sort -n -r | head -10

如何删除/var/log/下.log结尾的30天前的日志?

find /var/log/*.log -type f  -mtime +30 -exec rm -rf {} \; 

ansible有哪些模块?功能是什么?

模块功能
copy拷贝文件到被控端
cron定时任务
fetch拷贝被控端文件到本地
file文件模块
group用户组模块
user用户模块
hostname主机名模块
script脚本模块
service服务启动模块
command远程执行命令模块
shell远程执行命令模块,command高级用法
yum安装包组模块
setup查看主机系统信息

nginx为什么比apache快?

这得益于Nginx使用了最新的epoll(Linux 2.6内核)和kqueue(freebsd)网络I/O模型,而Apache则使用的是传统的select模型。

目前Linux下能够承受高并发访问的Squid、Memcached都采用的是epoll网络I/O模型。

处理大量的连接的读写,Apache所采用的select网络I/O模型非常低效。


下面用一个比喻来解析Apache采用的select模型和Nginx采用的epoll模型进行之间的区别:

假设你在大学读书,住的宿舍楼有很多间房间,你的朋友要来找你。

select版宿管大妈就会带着你的朋友挨个房间去找,直到找到你为止。

而epoll版宿管大妈会先记下每位同学的房间号,

你的朋友来时,只需告诉你的朋友你住在哪个房间即可,不用亲自带着你的朋友满大楼找人。

如果来了10000个人,都要找自己住这栋楼的同学时,select版和epoll版宿管大妈,谁的效率更高,不言自明。

同理,在高并发服务器中,轮询I/O是最耗时间的操作之一,select和epoll的性能谁的性能更高,同样十分明了。

四层负载和七层负载区别是什么?

所谓四层就是基于IP+端口的负载均衡;七层就是基于URL等应用层信息的负载均衡

lvs有哪些工作模式?哪个性能高?

LVS 三种工作模式原理、以及优缺点比较

  • NAT模式(VS-NAT)

原理:网络报的进出都要经过 LVS 的处理。LVS 需要作为 RS 的网关。当包到达 LVS 时,LVS 做目标地址转换(DNAT),将目标 IP 改为 RS 的 IP。RS 接收到包以后,仿佛是客户端直接发给它的一样。RS 处理完,返回响应时,源 IP 是 RS IP,目标 IP 是客户端的 IP。这时 RS 的包通过网关(LVS)中转,LVS 会做源地址转换(SNAT),将包的源地址改为 VIP,这样,这个包对客户端看起来就仿佛是 LVS 直接返回给它的。客户端无法感知到后端 RS 的存在。

  • IP隧道模式(VS-TUN)

原理:客户端将访问vip报文发送给LVS服务器。LVS服务器将请求报文重新封装,发送给后端真实服务器。后端真实服务器将请求报文解封,在确认自身有vip之后进行请求处理。后端真实服务器在处理完数据请求后,直接响应客户端

  • 直接路由模式(VS-DR)

原理:直接路由模式,请求由 LVS 接受,由真实提供服务的服务器直接返回给用户,返回的时候不经过 LVS。(性能最高)

lvs nginx haproxy keeplived区别,优缺点?

lvs

1、抗负载能力强、工作在第4层仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的;无流量,同时保证了均衡器IO的性能不会受到大流量的影响;
2、工作稳定,自身有完整的双机热备方案,如LVS+Keepalived和LVS+Heartbeat;
3、应用范围比较广,可以对所有应用做负载均衡;
4、配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西,所以并不需要太多接触,大大减少了人为出错的几率
1、软件本身不支持正则处理,不能做动静分离,这就凸显了Nginx/HAProxy+Keepalived的优势。
2、如果网站应用比较庞大,LVS/DR+Keepalived就比较复杂了,特别是后面有Windows Server应用的机器,实施及配置还有维护

Nginx

1、工作在OSI第7层,可以针对http应用做一些分流的策略。比如针对域名、目录结构。它的正则比HAProxy更为强大和灵活;
2、Nginx对网络的依赖非常小,理论上能ping通就就能进行负载功能,这个也是它的优势所在;
3、Nginx安装和配置比较简单,测试起来比较方便;
4、可以承担高的负载压力且稳定,一般能支撑超过几万次的并发量;
5、Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点;
6、Nginx不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器。LNMP现在也是非常流行的web环境,大有和LAMP环境分庭抗礼之势,Nginx在处理静态页面、特别是抗高并发方面相对apache有优势;
7、Nginx现在作为Web反向加速缓存越来越成熟了,速度比传统的Squid服务器更快,有需求的朋友可以考虑用其作为反向代理加速器;
1、Nginx不支持url来检测。
2、Nginx仅能支持http和Email,这个它的弱势。
3、Nginx的Session的保持,Cookie的引导能力相对欠缺。

Haproxy

1、HAProxy是支持虚拟主机的,可以工作在4、7层(支持多网段);
2、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作;
3、支持url检测后端的服务器;
4、它跟LVS一样,本身仅仅就只是一款负载均衡软件;单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的;
5、HAProxy可以对Mysql读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,不过在后端的MySQL slaves数量超过10台时性能不如LVS;
6、HAProxy的算法较多,达到8种;

三者对比

LVS: 是基于四层的转发
HAproxy: 是基于四层和七层的转发,是专业的代理服务器
Nginx: 是WEB服务器,缓存服务器,又是反向代理服务器,可以做七层的转发

区别: LVS由于是基于四层的转发所以只能做端口的转发
而基于URL的、基于目录的这种转发LVS就做不了

工作选择

HAproxy和Nginx由于可以做七层的转发,所以URL和目录的转发都可以做
在很大并发量的时候我们就要选择LVS,像中小型公司的话并发量没那么大
选择HAproxy或者Nginx足已,由于HAproxy由是专业的代理服务器
配置简单,所以中小型企业推荐使用HAproxy

如下url地址,各个部分的含义

https://www.baidu.com/s?word=123&ie=utf-8

https: 使用https加密协议访问
www.baidu.com/s: 请求地址
?word&ie=utf-8: get请求的参数,多个参数&连接

tomcat各个目录含义,如何修改端口,如何修改内存数?

bin 存放tomcat命令
conf 存放tomcat配置文件
lib 存放tomcat运行需要加载的jar包
log 存在Tomcat运行产生的日志
temp 运行过程中产生的临时文件
webapps 站点目录
work 存放tomcat运行时的编译后的文件
conf/server.xml 修改端口号
bin/catalina.sh 修改jvm内存

nginx负载均衡算法有哪些?

rr 轮训
weight 加权轮训
ip_hash 静态调度算法
fair 动态调度算法
url_hash url哈希
leat_conn 最小连接数

如何进行压力测试?

例如:模拟10个用户,对百度首页发起总共100次请求。
测试命令: ab -n 100 -c 10 https://www.baidu.com/index.htm

curl命令如何发送https请求?如何查看response头信息?如何发送get和post表单信息?

发送https请求:curl —tlsv1 ‘https://www.bitstamp.net/api/v2/transactions/btcusd/‘
response头信息 :curl -I
get:curl 请求地址?key1=value1&key2=value2&key3=value3
post: curl -d “key1=value1&key2=value2&key3=value3”

二、Mysql

主从复制原理描述:


为每个服务器配置唯一值的server-id
主库
开启binlog日志
创建主从复制用户
查看master的状态

从库
change master to设置主库信息
start slave开始复制

1.change master to 时,ip pot user password binlog position写入到master.info进行记录
2. start slave 时,从库会启动IO线程和SQL线程
3.IO_T,读取master.info信息,获取主库信息连接主库
4. 主库会生成一个准备binlog DUMP线程,来响应从库
5. IO_T根据master.info记录的binlog文件名和position号,请求主库DUMP最新日志
6. DUMP线程检查主库的binlog日志,如果有新的,TP(传送)给从从库的IO_T
7. IO_T将收到的日志存储到了TCP/IP 缓存,立即返回ACK给主库 ,主库工作完成
8.IO_T将缓存中的数据,存储到relay-log日志文件,更新master.info文件binlog 文件名和postion,IO_T工作完成
9.SQL_T读取relay-log.info文件,获取到上次执行到的relay-log的位置,作为起点,回放relay-log
10.SQL_T回放完成之后,会更新relay-log.info文件。
11. relay-log会有自动清理的功能。
细节:(5.5版本之后)
1.主库一旦有新的日志生成,会发送“信号”给binlog dump ,IO线程再请求

mysql增删改查

insert #插入  #info  #values
INSERT INTO 表名(字段名1,字段名2,…) VALUES(值1,值2,…)

delete #删除  #from  #where
DELETE FROM 表名 [WHERE 条件表达式

update #修改  #set  #where
UPDATE 表名 SET 字段名1=值1,[ ,字段名2=值2,…] [ WHERE 条件表达式 ]

select #读取  #from
SELECT 字段名1,字段名2,… FROM 表名

mysql数据备份方式,如何恢复?你们的备份策略是什么?

物理完全备份
备份所有数据库文件:/var/lib/mysql/
备份所有binlog文件: /var/lib/mysql/mysql-bin.
备份选项文件: /etc/my.cnf
mysqldump逻辑备份
mysqldump -uroot -p —all-databases > /backup/mysqldump/all.db
物理备份恢复
mv /var/lib/mysql /var/lib/mysql.old #先把原来的数据目录改名
cp -a /backups/mysql /var/lib
逻辑备份数据恢复
mysql > use db_name
mysql > source /backup/mysqldump/db_name.db

四、docker

dockerfile有哪些关键字?用途是什么?

FROM 构建镜像是基于哪个镜像
MAINTAINER 镜像维护者信息
RUN 构建镜像时运行的Shell命令
COPY 拷贝文件或者目录到镜像中
ENV 设置环境变量
USER 为RUN,CMD和ENTERYPOINT执行命令指定运行用户
EXPOSE 声明容器运行的服务端口
HEALTHCHECK 容器中服务健康检查
WORKDIR 为RUN,CMD,ENTRTYPOINT,COPY和ADD设置工作目录
ENTRYPOINT 运行容器时执行,如果有多个ENTRYPOINT指令,最后一个生效
CMD 运行容器时执行,如果有多个CMD指令,最后一个生效

如何减小dockerfile生成镜像体积?

采用Alpine镜像 该镜像非常小,仅几M
能使用&&就不要使用两个RUN
distroless驱除容器中所有不必要的东西

dockerfile中CMD与ENTRYPOINT区别是什么?

CMD 和 ENTRYPOINT 指令都是用来指定容器启动时运行的命令。
指定 ENTRYPOINT 指令为 exec 模式时,CMD指定的参数会作为参数添加到 ENTRYPOINT 指定命令的参数列表中。

dockerfile中COPY和ADD区别是什么?

COPY指令和ADD指令都可以将主机上的资源复制或加入到容器镜像中

区别是ADD可以从 远程URL中的资源不会被解压缩。
如果是本地的压缩包ADD进去会被解压缩

docker的cs架构组件有哪些?

Docker CLI(docker),Dockerd,Containerd,Containerd-shim,RunC

docker网络类型有哪些?

host模式       #用于跟主机共享网络
container模式  #用于跟容器共享一个网络
none模式       #用于不需要网络的时候
bridge模式     #用于不用网段需要做桥接

如何配置docker远程访问?

修改 docker 配置文件

/etc/docker/daemon.json
{
  "hosts" : ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"]
}

docker核心namespace CGroups 联合文件系统功能是什么?

namespace:资源隔离
cgroup:资源控制
联合文件系统:支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下

命令相关:导入导出镜像,进入容器,设置重启容器策略,查看镜像环境变量,查看容器占用资源

导入镜像 docker load -i xx.tar
导出镜像docker save -o xx.tar image_name
进入容器docker exec -it 容器命令 /bin/bash
设置容器重启策略启动时 —restart选项
查看容器环境变量 docker exec {containerID} env
查看容器资源占用docker stats test2

构建镜像有哪些方式?

dockerfile
容器提交为镜像

五、kubernetes

k8s的集群组件有哪些?功能是什么?

master节点主要由apiserver、controller-manager和scheduler三个组件,以及一个用于集群状态存储的etcd存储服务组成,而每个node节点则主要包含kubelet、kube-proxy及容器引擎等组件。此外,完整的集群服务还依赖于一些附加组件,如kubedns等。
node节点主要有kube-proxy跟kubelet组件。

kubectl命令相关:如何修改副本数,如何滚动更新和回滚,如何查看pod的详细信息,如何进入pod交互?

修改副本数 kubectl scale deployment redis —replicas=3
活动更新kubectl set image deployments myapp-deploy myapp=myapp:v2
回滚kubectl rollout undo deployments myapp-deploy
查看pod详细信息kubectl describe pods/
进入pod交互kubectl exec -it -c bash

etcd数据如何备份?

使用etcd自带的备份快照工具备份!
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
Snapshot saved at snashot1.db

k8s控制器有哪些?

副本集(ReplicaSet)
部署(Deployment)
状态集(StatefulSet)
Daemon集(DaemonSet)
一次任务(Job)
计划任务(CronJob)

哪些是集群级别的资源?

Namespace、Node、Role、ClusterRole、RoleBinding、ClusterRoleBinding

pod状态有哪些?

Pending         等待中
Running         运行中
Succeeded       正常终止
Failed          异常停止
Unkonwn         未知状态

pod创建过程是什么?


step.1
kubectl 向 k8s api server 发起一个 create pod 请求 (即我们使用 Kubectl 敲一个 create pod 命令) 。
step.2
k8s api server 接收到 pod 创建请求后,不会去直接创建 pod;而是生成一个包含创建信息的 yaml。
step.3
apiserver 将刚才的 yaml 信息写入 etcd 数据库。到此为止仅仅是在 etcd 中添加了一条记录, 还没有任何的实质性进展。
step.4
scheduler 查看 k8s api ,类似于通知机制。
首先判断:pod.spec.Node == null?
若为 null,表示这个 Pod 请求是新来的,需要创建;因此先进行调度计算,找到最 “闲” 的 node。
然后将信息在 etcd 数据库中更新分配结果:pod.spec.Node = nodeA (设置一个具体的节点)
ps: 同样上述操作的各种信息也要写到 etcd 数据库中中。
step.5
kubelet 通过监测 etcd 数据库 (即不停地看 etcd 中的记录),发现 k8s api server 中有了个新的 Node;
如果这条记录中的 Node 与自己的编号相同 (即这个 Pod 由 scheduler 分配给自己了);
则调用 node 中的 docker api,创建 container。

pod重启策略有哪些?

Pod的重启策略有3种,默认值为Always。

always:当容器退出时,总是重启容器,默认策略
onfailure:当容器异常退出(退出状态码非0)时,重启容器
nerver:当容器退出时,从不重启容器

资源探针有哪些?

ExecAction:在容器中执行一个命令,并根据其返回的状态码进行诊断的操作称为Exec探测,状态码为0表示成功,否则即为不健康状态。

TCPSocketAction:通过与容器的某TCP端口尝试建立连接进行诊断,端口能够成功打开即为正常,否则为不健康状态。

HTTPGetAction:通过向容器IP地址的某指定端口的指定path发起HTTP GET请求进行诊断,响应码为2xx或3xx时即为成功,否则为失败。

requests和limits用途是什么?

最小分配资源,最大分配资源。限定业务容器使用资源的大小

kubeconfig文件包含什么内容,用途是什么?

ca证书、apiserver地址等,链接apiserver的授权文件

RBAC中role和clusterrole区别,rolebinding和 clusterrolebinding区别?

Role 可以定义在一个 namespace 中,如果想要跨 namespace则可以创建ClusterRole,ClusterRole 具有与 Role相同的权限角色控制能力,不同的是 ClusterRole 是集群级别的
rolebinding对特定名称空间下的资源进行绑定授权
clusterrole则是属于对整个集群资源的绑定授权

ipvs为啥比iptables效率高?

IPVS模式与iptables同样基于Netfilter,但是ipvs采用的hash表,iptables采用一条条的规则列表。iptables又是为了防火墙设计的,集群数量越多iptables规则就越多,而iptables规则是从上到下匹配,所以效率就越是低下。因此当service数量达到一定规模时,hash查表的速度优势就会显现出来,从而提高service的服务性能

sc pv pvc用途,容器挂载存储整个流程是什么?

创建pv,创建pvc关联PV,创建pod关联去申请PVC。

PVC:Pod 想要使用的持久化存储的属性,比如存储的大小、读写权限等。
PV :具体的 Volume 的属性,比如 Volume 的类型、挂载目录、远程存储服务器地址等。
StorageClass:充当 PV 的模板。并且,只有同属于一个 StorageClass 的 PV 和 PVC,才可以绑定在一起。当然,StorageClass 的另一个重要作用,是指定 PV 的 Provisioner(存储插件)。这时候,如果你的存储插件支持 Dynamic Provisioning 的话,Kubernetes 就可以自动为你创建 PV 了。

nginx ingress的原理本质是什么?


ngress controller 通过和 kubernetes api 交互,动态的去感知集群中 ingress 规则变化,然后读取它,按照自定义的规则,规则就是写明了哪个域名对应哪个 service,生成一段 nginx 配置,再写到 nginx-ingress-controller 的 pod 里,这个 Ingress controller 的 pod 里运行着一个 Nginx 服务,控制器会把生成的 nginx 配置写入 /etc/nginx.conf 文件中,然后 reload 一下使配置生效。以此达到域名分配置和动态更新的问题。


Service工作流程


1.kube-proxy会周期性的从apiserver请求集群中创建的有那些service,根据这些service会对每一台机器上创建对应的规则

2.pod由kubelet管理,kubelet会和kube-proxy一样,也会去请求管理节点的apiserver,会从apiserver感知分配到我当前节点有那些pod,然后获取到这些pod在本地告知容器引擎帮他拉起对应的容器


k8s集群节点需要关机维护,需要怎么操作

打污点,驱除pod
检查node上是否无pod运行,切被驱逐的pod已经在其他节点运行正常
关机维护
开机启动相关服务
解除node节点不可调度

canal和flannel区别

Flannel(简单、使用居多):基于Vxlan技术(叠加网络+二层隧道),不支持网络策略
Calico(较复杂,使用率少于Flannel):也可以支持隧道网络,但是是三层隧道(IPIP),支持网络策略
Calico项目既能够独立地为Kubernetes集群提供网络解决方案和网络策略,也能与flannel结合在一起,由flannel提供网络解决方案,而Calico此时仅用于提供网络策略。

六、ELK

Elasticsearch的数据如何备份与恢复?

https://www.bococ.cn/elasticsearch/40.html

你们项目中使用的logstash过滤器插件是什么?实现哪些功能?

date 日期解析
grok 正则匹配解析
overwrite 写某个字段
dissect 分隔符解析
mutate 对字段做处理
json 解析
geoip 地理位置解析
ruby 修改logstash event

elasticsearch分片副本是什么?你们配置的参数是多少?

一般设置分片不超过节点数的3倍,因为考虑到node数量,一般一个节点有时候就是一台物理机,如果分片数过多,大大超过了节点数,很可能会导致一个节点上存在多个分片,一旦该节点故障,即使保持了1个以上的副本,同样有可能会导致数据丢失,集群无法恢复

七、运维开发

CI/CD流程

  • 编写代码
  • 测试
  • 编写 Dockerfile
  • 构建打包 Docker 镜像
  • 推送 Docker 镜像到仓库
  • 编写 Kubernetes YAML 文件
  • 更改 YAML 文件中 Docker 镜像 TAG
  • 利用 kubectl 工具部署应用

第一步,clone 代码 第二步,进行测试,如果测试通过了才继续下面的任务 第三步,由于 Dockerfile 基本上都是放入源码中进行管理的,所以我们这里就是直接构建 Docker 镜像了 第四步,镜像打包完成,就应该推送到镜像仓库中吧 第五步,镜像推送完成,是不是需要更改 YAML 文件中的镜像 TAG 为这次镜像的 TAG 第六步,万事俱备,只差最后一步,使用 kubectl 命令行工具进行部署了


Clone 代码 -> 单元测试 -> Golang 编译打包 -> Docker 镜像构建/推送 -> Kubectl 部署服务。
① 开发人员提交代码到gitlab
② 手动执行jenkins构建(或者gitlab钩子触发jenkins执行构建),下载最新版本的代码,代码里面包含Dockerfile
③ jenkins执行shell脚本:mvn编译生成jar文件。通过docker build 指令打包成镜像
④ 上传构建好的镜像push到harbor镜像仓库
⑤ jenkins远程到k8s master节点,更新service镜像地址,达到更升级容器的目的(也就是更新代码版本)

备份系统中所有容器镜像

编写脚本,定时备份某个库,然后压缩,发送异机

1.(注意:①公共部分定义函数,如获取时间戳,配置报警接口②异常处理,如数据库大,检测任务是否完成。检测生成文件大小是否是空文件)
2.批量获取所有主机的系统信息
3.t config
1git gitlab jenkins 的 CICD 流程如何配置

编写脚本,定时备份某个库,然后压缩,发送异机

公共部分定义函数,如获取时间戳,配置报警接口
多使用if判断是否存在异常并处理,如数据库大,检测任务是否完成。检测生成文件大小是否是空文件

批量获取所有主机的系统信息

使用python的paramiko库,ssh登陆主机执行查询操作
使用shell脚本批量ssh登陆主机并执行命令
使用ansible的setup模块获取主机信息
prometheus的node_exporter收集主机资源信息

python如何导出、导入环境依赖包

导出环境

pip freeze >> requirements.txt

导入环境

pip install -r requirement.txt

python创建,进入,退出,查看虚拟环境

安装软件包

pip3 install virtualenv

检测安装是否成功

virtualenv --version

创建虚拟环境
cd到要创建虚拟环境的目录

cd github/test/venv/

创建虚拟环境

virtualenv test
  • 激活虚拟环境
source test/bin/activate(activate路径)
  • 退出虚拟环境
deactivate

flask和django区别,应用场景

Django功能大而全,Flask只包含基本的配置 Django的一站式解决的思路,能让开发者不用在开发之前就在选择应用的基础设施上花费大量时间。Django有模板,表单,路由,认证,基本的数据库管理等等内建功能。与之相反,Flask只是一个内核,默认依赖于两个外部库: Jinja2 模板引擎和 Werkzeug WSGI 工具集,其他很多功能都是以扩展的形式进行嵌入使用。

Flask 比 Django 更灵活 用Flask来构建应用之前,选择组件的时候会给开发者带来更多的灵活性 ,可能有的应用场景不适合使用一个标准的ORM(Object-Relational Mapping 对象关联映射),或者需要与不同的工作流和模板系统交互。

列举常用的git命令

$ git init
$ git config
$ git add
$ git commit
$ git branch
$ git checkout
$ git tag
$ git push
$ git status
$ git log

git gitlab jenkins的CICD流程如何配置

开发者git提交代码至gitlab仓库
jenkins从gitlab拉取代码,触发镜像构建
镜像上传至harbor私有仓库
镜像下载至执行机器
镜像运行

八、日常工作

在日常工作中遇到了什么棘手的问题,如何排查

redis弱口令导致中挖矿病毒,排查,优化

k8s中开发的程序在用户上传文件时开启进程,未及时关闭,导致节点超出最大进程数

CDN 文件 http, 莫名负载增高,es 日志文件莫名达到十几个 G,内存溢出。莫名机器故障重启。

日常故障处理流程

 查看报警内容,快速定位大致故障主机,服务,影响范围
 告知运维经理故障,并开始排查
 如果需要修改配置文件,重启服务器等操作,告知相关开发人员
 完成故障处理

修改线上业务配置文件流程

 先告知运维经理和业务相关开发人员
 在测试环境测试,并备份之前的配置文件
 测试无误后修改生产环境配置
 观察生产环境是否正常,是否有报警
 完成配置文件更改

业务pv多少?集群规模多少?怎么保障业务高可用?

国内 8w, 海外 2w , 国内 26(20),海外 10。微服务架构

九、开放性问题

你认为初级运维工程师和高级运维工程师的区别?

(初级干活的,会操作,顺利完成领导安排的任务。高级优化架构,研究如何避免问题,研究新技术并引用)

你认为未来运维发展方向

(自动化,智能化)
添加新评论