互联网公司_运维工程师面试题

运维工程师面试题

一、Linux系统中文件删除不掉 如何排查解决?

1、权限问题
2、是否被进程占用 是不是句柄文件
lsof|grep delete
3、权限够 没有被进程占用 如何删除
查询该文件的inode号 通过删除inode号

二、找寻系统中某程序的安装路径?

1、可以利用whereis命令来查看软件的实际安装路径,语法为“whereis 软件名”,
2、利用“which 软件名”命令 可以查找软件的安装路径及可执行文件路径。
默认安装路径一般为/usr/local 或者 /opt目录下

三、shell脚本中 $@ 和 $*分别代表什么

∗ 和 *和 @都表示传递给参数或者脚本全部参数

1、当 ∗ 和 *和 @不加双引号时,两者没有任何区别,都表示将接收到的每一个参数当做每一份数据,每个参数之间用空格来分开

2、当 ∗ 和 *和 @加上双引号,则两者就存在一下区别

“$*” 表示将传入的多个参数从整体上当做一份数据,以"$1 $2 … $n"的形式输出所有参数

“$@” 表示仍然将传入的多个参数当做多份数据,空格区分,彼此之间独立,以"$1" “2 " … " 2" … “2”…"n” 的形式输出所有参数

四、k8s的组件和功能

【Master节点】
Master节点负责集群的管理,相关联的组件有ETCD数据库、Controller Manager、Scheduler、kube-apiserver。Master节点协调集群的各个活动,例如资源调度、动态伸缩、维护应用状态以及滚动更新等。

  1. ETCD数据库
    etcd数据是一个高可用的分布式键值数据库,可用于服务发现。etcd采用raft一致性算法,基于GO语言实现。由于raft算法采用多数投票机制,所以建议采用奇数个数节点。

  2. kube-apiserver
    k8s对外唯一的接口,提供http/https RESTfull API,即kubernetes API。所有的请求都通过这个接口进行通信。包括认证授权、数据校验以及集群状态更新。通过apiserver将集群状态信息持久化到ETCD中。默认端口为6443

  3. Controller Manager
    Controller Manager作为集群内部的管理控制中心,负责集群的Node,Pod副本,endpoint,namespace等的管理,当集群中的某个Node宕机,Controller Manager会及时发现此故障并快速修复,将集群恢复成预期的工作状态。
    Controller Manager包括Replication Controller,Node Controller,Namespace Controller,ServiceAccount Controller,Token Controller,Service Controller,endpoint Controller,ResourceQuata Controller

  4. Scheduler
    Scheduler的核心功能是监听apiserver来获取podSpec.NodeName为空的pod,然后为这个pod创建一个binding,指示这个pod创建在哪个节点上。然后把调度结果写到apiserver持久化到ETCD中。

【Node节点】
Node主要为应用程序提供运行环境,并接受Master管理,并按照Master要求进行对容器进行管理。主要组件包括kubelet、kube-proxy、CNI网络插件等。

  1. kubelet
    kubelet是node节点的agent,当Scheduler确定pod运行在某个节点上时,会将pod的具体配置信息(image,network,volume等)发送给节点的kubelet,kubelet会根据配置信息进行创建容器,并将容器运行结果报告给Master。另外,kubelet还会周期性的向Master报告pod以及node节点的运行状态。

  2. kube-proxy
    kube-proxy是k8s工作节点上的一个网络代理组件,它的作用是将发往service的流量负载均衡到正确的后端pod。kube-proxy监听API server中的service和endpoint的变化,并通过iptables或者IPVS创建不同的路由规则,以实现上述目的。

iptables模式,kube-proxy默认模式,当前模式下,kube-proxy监听service和endpoint的变化,当service创建时,kube-proxy在iptables中追加新的规则,对于service中的每一个endpoint,会在iptables中追加一条DNAT规则,将目的地址设置为真正提供服务的pod地址;再为service追加规则,设定动作为跳转到对应的endpoint规则上

ipvs模式,ipvs在INPUT阶段也是基于netfilter的hook功能,与iptables类似。但是转发规则是通过工作在内核空间下的hash表作为存储的数据结构。在这种模式下,只需要通过ipset来验证具体的请求是否满足某条规则。当service变化时,只需要更新ipset记录,不需要改变iptables规则链,因此可以保证iptables中的规则不会根据service的创建越来越多。同时,ipvs的性能也高于iptables,因为当service变化时,ipvs只需要对特定的hash表进行更新,而iptables则需要更新整个规则表。

  1. CNI网络插件
    CNI是k8s用于实现pod间相互通信的标准接口。常用的网络插件有flannel和calico
    kubernetes配置CNI网络插件后,其容器网络创建流程为:

kubernetes先创建pause容器生成对应的netns
CNI driver根据配置调用具体的网络插件(flannel或者calico)
CNI插件给pause容器配置具体的网络,pod中的其他容器都使用pause网络
当容器删除是,回收网络资源

五、pod的建立过程?

Pod是Kubernetes的基础单元,了解其创建的过程,更有助于理解系统的运作。

①用户通过kubectl或其他API客户端提交Pod Spec给API Server。

②API Server尝试将Pod对象的相关信息存储到etcd中,等待写入操作完成,API Server返回确认信息到客户端。

③API Server开始反映etcd中的状态变化。

④所有的Kubernetes组件通过"watch"机制跟踪检查API Server上的相关信息变动。

⑤kube-scheduler(调度器)通过其"watcher"检测到API Server创建了新的Pod对象但是没有绑定到任何工作节点。

⑥kube-scheduler为Pod对象挑选一个工作节点并将结果信息更新到API Server。

⑦调度结果新消息由API Server更新到etcd,并且API Server也开始反馈该Pod对象的调度结果。

⑧Pod被调度到目标工作节点上的kubelet尝试在当前节点上调用docker engine进行启动容器,并将容器的状态结果返回到API Server。

⑨API Server将Pod信息存储到etcd系统中。

⑩在etcd确认写入操作完成,API Server将确认信息发送到相关的kubelet。

六、域名监控 是否过期

Prometheus Blackbox域名SSL证书监控并设置AlertManager告警
blackbox exporter
blackbox exporter 是prometheus社区提供的黑盒监控解决方案,运行用户通过HTTP、HTTPS、DNS、TCP以及ICMP的方式对网络进行探测(主动监测主机与服务状态)。

HTTP 测试
定义 Request Header 信息
判断 Http status / Http Respones Header / Http Body 内容

TCP 测试
业务组件端口状态监听
应用层协议定义与监听

ICMP 测试
主机探活机制

POST 测试
接口联通性

SSL 证书过期时间

安装Blackbox exporter
Promethues 监控配置
Prometheus中配置–job

编辑Promethues配置文件

[root@prometheus ~]# cd /etc/prometheus/
[root@prometheus prometheus]# ls
alertmanager prometheus.yml prometheus.yml_bak_2022-06-20 rules
[root@prometheus prometheus]# vim prometheus.yml
添加下面的job_name

  • job_name: ‘blackbox_http_2xx’
    metrics_path: /probe
    params:
    module: [http_2xx] #配置get请求检测
    static_configs:
    • targets:
      • http://prometheus.io # Target to probe with http.
      • https://i4t.com # Target to probe with https.
      • https://ukx.cn
      • https://k.i4t.com
      • https://nas.frps.cn
      • https://esxi.frps.cn
      • https://rancher.frps.cn
      • https://jumpserver.frps.cn
      • https://frps.cn
      • https://imgkb.com
      • https://grafana.frps.cn
      • https://down.frps.cn
      • https://my.ukx.cn
      • https://linux.ukx.cn
        relabel_configs:
    • source_labels: [address]
      target_label: __param_target
    • source_labels: [__param_target]
      target_label: instance
    • target_label: address
      replacement: 10.0.24.13:9115 #blackbox地址和端口号
  • job_name: ‘blackbox_tcp_connect’ # 检测某些端口是否在线
    scrape_interval: 30s
    metrics_path: /probe
    params:
    module: [tcp_connect]
    static_configs:
    • targets:
      • dsm.frps.cn:9091
      • dsm.frps.cn:1998
      • dsm.frps.cn:1999
      • apiserver.frps.cn:8443
        relabel_configs:
    • source_labels: [address]
      target_label: __param_target
    • source_labels: [__param_target]
      target_label: instance
    • target_label: address
      replacement: 10.0.24.13:9115 # blackbox-exporter 服务所在的机器和端口
      重启Prometheus
      在这里插入图片描述
      参考:https://i4t.com/5578.html

七、开发不会自动部署 你如何将其自动部署到k8s中

使用gitlab的cicd 将其进行打包、构建、部署
搭建代码仓库gitlab 在开发调试机上部署gitlab-runner 配置好相关参数和权限
编写模板文件 gitlab-ci.yaml
一旦代码发生变化 自动打包 build镜像并推送到镜像仓库 deploy阶段 拉取最新的镜像 进行部署

如何实现自动化部署?

1、创建k8s集群

首先需要在一台服务器上创建k8s集群。可以使用minikube、kubeadm等工具来快速创建一个k8s集群。创建好集群后,需要在集群内创建一个namespace,用来部署自己的应用。

2、创建Gitlab项目

在Gitlab上创建一个新的项目。在项目中创建Gitlab CI/CD配置文件。这个文件告诉Gitlab如何进行CI/CD自动化部署。示例配置文件如下:
在这里插入图片描述
3、部署应用

在k8s集群中部署自己的应用。可以使用 kubectl create deployment来创建一个deployment对象。其中,需要指定镜像和容器名。示例如下:

kubectl create deployment $deployment_name --image=registry.gitlab.com/xxx/xxx:$CI_COMMIT_SHA -n $namespace

4、创建Service

创建Service对象,将deployment暴露给外部用户访问。示例如下:

kubectl expose deployment $deployment_name --type=LoadBlancer --port=80 --target-port=80 -n $namespace

这里我们使用的是一种基于LoadBalancer类型的Service,这将在集群外创建一个公共IP地址,供用户访问应用。

5、完成自动化部署

完成上述步骤后,每当有新代码被提交到Gitlab仓库中时,Gitlab就会根据CI/CD配置文件自动构建镜像并部署到k8s集群中。用户可以通过Service暴露的公共IP地址来访问应用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值