公司现在上了一部分的业务至k8s,在项目改造中,每天都会遇到很多问题,好友找我出一份k8s面试题,参考了网上的一些,再加上自己公司遇到的一些问题,整理如下:

参考链接:http://yaoguais.github.io/article/golang/k8sinterview.html

1、理论篇

1.1 简要说下Kubernetes有哪些核心组件以及这些组件负责什么工作?

etcd:提供数据库服务保存了整个集群的状态
kube-apiserver:提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制
kube-controller-manager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等
cloud-controller-manager:是与底层云计算服务商交互的控制器
kub-scheduler:负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上
kubelet:负责维护容器的生命周期,同时也负责Volume和网络的管理
kube-proxy:负责为Service提供内部的服务发现和负载均衡,并维护网络规则
container-runtime:是负责管理运行容器的软件,比如docker

1.2 你对 Kubernetes 的负载均衡器有什么了解?

负载均衡器是暴露服务的最常见和标准方式之一。

根据工作环境使用两种类型的负载均衡器,即内部负载均衡器或外部负载均衡器。内部负载均衡器自动平衡负载并使用所需配置分配容器,而外部负载均衡器将流量从外部负载引导至后端容器。

1.3 经典pod的生命周期

Pod都处于以下几种状态之一,可通过查询Pod详情查看。

Pending 部署Pod事务已被集群受理,但当前容器镜像还未下载完。
Running 所有容器已被创建,并被部署到k8s节点。
Successed Pod成功退出,并不会被重启。
Failed Pod中有容器被终止。
Unknown 未知原因,如kube-apiserver无法与Pod进行通讯。
详细叙述如下: 首先拖取Pod内容器的镜像,选择某个Node节点并启动Pod。 监控Pod状态,若Pod终止则根据策略决定是否重新调度。 Pod退出,并根据策略决定是否重启。

1.4 详述kube-proxy原理

问题:详述kube-proxy原理,一个请求是如何经过层层转发落到某个pod上的整个过程。请求可能来自pod也可能来自外部。

kube-proxy部署在每个Node节点上,通过监听集群状态变更,并对本机iptables做修改,从而实现网络路由。 而其中的负载均衡,也是通过iptables的特性实现的。

另外我们需要了解k8s中的网络配置类型,有如下几种:

hostNetwork Pod使用宿主机上的网络,此时可能端口冲突。
hostPort 宿主机上的端口与Pod的目标端口映射。
NodePort 通过Service访问Pod,并给Service分配一个ClusterIP。

1.5 deployment/rs的区别

问题:deployment/rs有什么区别。其使用方式、使用条件和原理是什么。

deployment是rs的超集,提供更多的部署功能,如:回滚、暂停和重启、 版本记录、事件和状态查看、滚动升级和替换升级。

如果能使用deployment,则不应再使用rc和rs。

1.6 rc/rs实现原理

问题:rc/rs功能是怎么实现的。详述从API接收到一个创建rc/rs的请求,到最终在节点上创建pod的全过程,尽可能详细。另外,当一个pod失效时,kubernetes是如何发现并重启另一个pod的?

Replication Controller 可以保证Pod始终处于规定的副本数。

而当前推荐的做法是使用Deployment+ReplicaSet。

ReplicaSet 号称下一代的 Replication Controller,当前唯一区别是RS支持set-based selector。

RC是通过ReplicationManager监控RC和RC内Pod的状态,从而增删Pod,以实现维持特定副本数的功能。

RS也是大致相同。

2、命令篇

2.1 查看ops这个命名空间下的所有pod,并显示pod的IP地址

kubectl get pods -n ops -o wide

2.2 查看tech命名空间下的pod名称为tech-12ddde-fdfde的日志,并显示最后30行

kubectl logs tech-12ddde-fdfde -n tech|tail -n 30

2.3 怎么查看test的命名空间下pod名称为test-5f7f56bfb7-dw9pw的状态

kubectl describe pods test-5f7f56bfb7-dw9pw -n test

2.4 如何查看test命名空间下的所有endpoints

kubectl get ep -n test

2.5 如何列出所有 namespace 中的所有 pod

kubectl get pods --all-namespaces

2.6、如何查看test命名空间下的所有ingress

kubectl get ingress -n test

2.7、如何删除test命名空间下某个deploymemt,名称为gitlab

kubectl delete deploy gitlab -n test

2.8 如何缩减test命名空间下deployment名称为gitlab的副本数为1

kubectl scale deployment gitlab -n test --replicas=1

2.9 如何在不进入pod内查看命名空间为test,pod名称为test-5f7f56bfb7-dw9pw的hosts

kubectl exec -it test-5f7f56bfb7-dw9pw -n test -- cat /etc/hosts

2.10 如何设置节点test-node-10为不可调度以及如何取消不可调度

kubectl cordon test-node-10     #设置test-node-10为不可调度
kubectl uncordon test-node-10 #取消

3、考察实际生产经验(最重要)

3.1 某个pod启动的时候需要用到pod的名称,请问怎么获取pod的名称,简要写出对应的yaml配置(考察是否对k8s的Downward API有所了解)

env:
- name: test
valueFrom:
fieldRef:
fieldPath: metadata.name

3.2 某个pod需要配置某个内网服务的hosts,比如数据库的host,刑如:192.168.4.124 db.test.com,请问有什么方法可以解决,简要写出对应的yaml配置或其他解决办法

解决办法:搭建内部的dns,在coredns配置中配置内网dns的IP

要是内部没有dns的话,在yaml文件中配置hostAliases,刑如:

hostAliases:
- ip: "192.168.4.124"
hostnames:
- "db.test.com"

3.3 请用系统镜像为centos:latest制作一个jdk版本为1.8.142的基础镜像,请写出dockerfile(考察dockerfile的编写能力)

FROM centos:latest
ARG JDK_HOME=/root/jdk1.8.0_142
WORKDIR /root
ADD jdk-8u142-linux-x64.tar.gz /root
ENV JAVA_HOME=/root/jdk1.8.0_142
ENV PATH=$PATH:$JAVA_HOME/bin
CMD ["bash"]

3.4 假如某个pod有多个副本,如何让两个pod分布在不同的node节点上,请简要写出对应的yaml文件(考察是否对pod的亲和性有所了解)

affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- topologyKey: "kubernetes.io/hostname"
labelSelector:
matchLabels:
app: test

3.5 pod的日志如何收集,简要写出方案(考察是否真正有生产经验,日志收集是必须解决的一个难题)

每个公司的都不一样,下面三个链接可当做参考
https://jimmysong.io/kubernetes-handbook/practice/app-log-collection.html
https://www.jianshu.com/p/92a4c11e77ba
https://haojianxun.github.io/2018/12/21/kubernetes%E5%AE%B9%E5%99%A8%E6%97%A5%E5%BF%97%E6%94%B6%E9%9B%86%E6%96%B9%E6%A1%88/

3.6 谈下你对k8s集群监控的心得,口述

3.7 集群如何预防雪崩,简要写出必要的集群优化措施

1、为每个pod设置资源限制
2、设置Kubelet资源预留

3.8 集群怎么升级,证书过期怎么解决,简要说出做法

参考
https://googlebaba.io/post/2019/09/11-renew-ca-by-kubeadm/ #更新证书 https://jicki.me/kubernetes/2019/05/09/kubeadm-1.14.1/ #集群升级

3.9 etcd如何备份,简要写出命令

参考:https://www.bladewan.com/2019/01/31/etcd_backup/
export ETCDCTL_API=3
etcdctl --cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
snapshot save /data/test-k8s-snapshot.db

3.10 在以往的k8s运维中遇到过哪些问题,怎么解决的

设计的一些kubernetes面试题的更多相关文章

  1. 设计的一些kubernetes面试题目

    这几个月参与了几场面试,设计了多道面试题,觉得可以综合考察应聘人对kubernetes的掌握情况.在这里分享下,供应聘人自查以及其他面试官参考. 这些面试题的设计初衷并不是考察kubernetes的使 ...

  2. 我设计的ASP.NET笔试题,你会多少呢

    本笔试题考查范围包括面向对象基础.HTML.CSS.JS.EF.jQuery.SQL.编码思想.算法等范围. 第1题:接口和抽象类有何区别? 第2题:静态方法和实例方法有何区别? 第3题:什么是多态? ...

  3. Python自动化测试面试题-用例设计篇

    目录 Python自动化测试面试题-经验篇 Python自动化测试面试题-用例设计篇 Python自动化测试面试题-Linux篇 Python自动化测试面试题-MySQL篇 Python自动化测试面试 ...

  4. k8s入坑之路(7)kubernetes设计精髓List/Watch机制和Informer模块详解

    1.list-watch是什么 List-watch 是 K8S 统一的异步消息处理机制,保证了消息的实时性,可靠性,顺序性,性能等等,为声明式风格的API 奠定了良好的基础,它是优雅的通信方式,是 ...

  5. 基于Kubernetes 构建.NET Core 的技术体系

    很多公司技术支持岗位的工作,如配置域名,部署环境,修改复位配置,服务重启,扩容缩容,梳理和完善监控,根据开发的需要查找日志等工作,需要和开发进行大量的沟通,如什么是外网域名,什么是内网域名.A nam ...

  6. [Kubernetes]深入理解StatefulSet

    前面我写的一系列博客,如果你能够耐心看到这一篇,那你应该对一个概念就不是太陌生了:Deployment. 为什么提这个概念呢,这就要说到Deployment的一个不足了.Deployment不足以覆盖 ...

  7. mysql面试题集

    Mysql 的存储引擎,myisam和innodb的区别. 答: 1.MyISAM 是非事务的存储引擎,适合用于频繁查询的应用.表锁,不会出现死锁,适合小数据,小并发.5.6之前默认myisam 2. ...

  8. Java面试题(全)--视频系列

    此系列为面试笔试题的视频讲解,以下均为超链接,点击即可进入每个知识点的讲解. Java面试题01.面试的整体流程 Java面试题02.java的垮平台原理 Java面试题03.搭建一个java的开发环 ...

  9. (转)Linux运维MySQL必会面试题100道

    老男孩教育Linux运维班MySQL必会面试题100道 (1)基础笔试命令考察 (要求:每两个同学一组,一个口头考,一个上机实战作答,每5个题为一组,完成后换位) 1.开启MySQL服务 2.检测端口 ...

随机推荐

  1. [linux]查看进程占用内存

    1.top -p 进程ID PID:进程的ID USER:进程所有者 PR:进程的优先级别,越小越优先被执行 NInice:值 VIRT:进程占用的虚拟内存 RES:进程占用的物理内存 SHR:进程使 ...

  2. Microsoft.Owin 使用 文件服务

    添加引用: <package id="Microsoft.Owin" version="4.0.1" targetFramework="net4 ...

  3. 用go写一个简单的看门狗程序(WatchDog)

    简述 因为公司的一些小程序只是临时使用一下(不再维护更新),有的有一些bug会导致崩溃,但又不是很严重,崩溃了重新启动一下就好. 所以写了一个看门狗程序来监控程序,挂了(因为我这里并不关心程序的其他状 ...

  4. vue-devtools 获取到 vuex store 和 Vue 实例的?

    vue-devtools 获取到 vuex store 和 Vue 实例的? https://github.com/vuejs/vue-devtools       安装了 vue-devTools ...

  5. Kafka安装教程(详细过程)

    安装前期准备: 1,准备三个节点(根据自己需求决定) 2,三个节点上安装好zookeeper(也可以使用kafka自带的zookeeper) 3,关闭防火墙 chkconfig  iptables o ...

  6. postgre with递归查询组织路径

    with递归查询组织路径 SELECT r.id, (array_to_string( array( select name from ( with recursive rec as( select ...

  7. Java学习-059-Jsoup爬虫获取中国所有的三级行政区划数据(四),生成相应的 JSON 数据并输出

    还是直接上马,对应的源码如下所示: 生成的三级行政区划部分 JSON 数据如下所示:

  8. ES技巧

    2, 统计字段b的不同值的数量 {"size":0,"aggs":{"distinct_colors":{"cardinality ...

  9. Python 使用 win32com 模块对 word 文件进行操作

    what's the win32com 模块 win32com 模块主要为 Python 提供调用 windows 底层组件对 word .Excel.PPT 等进行操作的功能,只能在 Windows ...

  10. ThinkPHP 5.0.x、5.1.x、5.2.x 全版本远程命令执行漏洞

    ThinkPHP 5.0.x.5.1.x.5.2.x 全版本远程代码执行漏洞 作者:SoulCat. 来源:CSDN 原文:https://blog.csdn.net/csacs/article/de ...