前言:

到了如今年k8s已经是事实上的容器集群标准了,是时候展现我真正的祖传k8s实力了

吐槽:

我干嘛要知道这些,能用不就行了k8s真香

Kubernetes有哪些特性?

Kubernetes是自动化容器编排的开源平台,目标是让部署容器化的应用简单并且高效,提供了应用部署,规划,更新,维护的一种机制

Kubernetes一个核心的特点就是可以让容器按照用户的期望状态运行

Kubernetes有哪些核心组件这些组件负责什么工作?

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

Pod是什么?

在k8s中最小的管理元素不是容器而是Pod,Pod的上下文可以理解为多个linux命名空间的联合,包括PID命名空间同一个Pod中的容器可以互相看到PID、网络命名空间同一个Pod中的容器可以使用同一IP

为什么Kubernetes要设计Pod?

Pod中的容器可以共用Pod提供的基础设施

Pod的生命周期与管理器的生命周期的分离

调度和管理的易用性,解偶控制器和服务,后段管理器仅仅监控Pod

描述一下Pod的生命周期有哪些状态?

status 属性里面有一个phase字段记录了Pod的状态

正常情况下起一个新Pod的过程

Pending表示Pod已经被同意创建,正在等待kube-scheduler选择合适的节点创建,一般是在准备镜像

Running表示Pod中所有容器已经被创建,并且至少有一个容器正在运行或者是正在启动或者正在重启

Succeeded表示所有容器已经成功终止,且不会再启动

Failed表示Pod中所有容器都是非0状态退出

Unknown表示无法读取Pod状态通常是kube-controller-manager无法与Pod通信

怎么看Pod中的容器是否健康?

status 属性里面有一个conditions字段记录了容器状态

其中 type: Ready=True 表示Pod已经准备就绪,切已经加入了Service的负载均衡当中

type: ContainersReady=True表示所有Pod中所有容器都通过了健康检查(如有),并全部准备就绪

创建一个Pod会发生什么事?

1、客户端提交Pod的配置信息(可以是Deployment定义好的信息)到kube-apiserver,kube-apiserve会把Pod信息存储到ETCD当中

2、kube-scheduler 检测到Pod信息会开始调度

3、kube-scheduler 开始调度预选,主要是过滤掉不符合Pod要求的节点

4、kube-scheduler 开始调度调优,主要是会给节点打分以选择更加适合的节点

5、kube-scheduler 选择好节点后会把结果存储到ETCD

6、kubelet  根据调度结果执行Pod创建操作

删除一个Pod会发生什么事情?

kube-apiserver会接受到用户的删除指令,默认有30秒时间等待优雅退出,超过30秒会被标记为死亡状态

此时Pod的状态是Terminating,Kubelet看到Pod标记为Terminating开始了关闭Pod的工作

1、Pod从service的列表中被删除

2、如果该Pod定义了一个停止前的钩子,其会在pod内部被调用,停止钩子一般定义了如何优雅结束进程

3、进程被发送TERM信号(kill -14)

4、当超过优雅退出时间时,Pod中的所有进程都很被发送SIGKILL信号(kill -9)

kubernetes 常用的集群网络模型,有哪些特性?
Flanneld:
常用于OpenStack等云平台配合host-gw防止数据被多次封装,支持多种协议UDP、VxLAN、AWS VPC等,不支持Network Policy
Open vSwitch:
可以用于实现k8s多租户的网络隔离,支持多种隧道协议GRE、VxLAN、 IPsec
Contiv:
常用于面向应用的网络策略,甚至可以配合硬件设备使用比如Cisco-SDN,并且支持BGP、VxLAN等协议

k8s的Service是什么?

Pod每次重启或者从新部署IP地址都会产生变化,这使得Pod间通信和Pod与外部通信变得困难,这时候Pod就需要一个固定的入口这就是Service

每个Service都有一个clusterIP,clusterIP是固定的是外界访问Pod的唯一入口,Service背后通常绑定了一组相同配置的Pod,通过负载均衡的方式把外界请求分配的多个Pod

k8s是怎么进行服务注册的?

Pod启动后会加载当前环境所有Service信息,以便不同Pod根据Service名进行通信

k8s集群外流量怎么访问Pod?

可以通过Service的NodePort方式访问,会在所有节点监听同一个端口比如30000端口,访问节点30000端口的流量会被重定向到对应的Service上面

运维面试题之k8s的更多相关文章

  1. Linux实战型企业运维工程师试题测评

    Linux实战型企业运维工程师试题答案 作者:尹正杰      最近在网上看到了一套有意思的面试题,我们一起来看一下这些题怎么破吧,哈哈~我先放在这里,有时间了一起来看看.多学点东西终究是没有坏处的! ...

  2. Linux运维面试题:请简要说明Linux系统在目标板上的启动过程?

    Linux运维面试题:请简要说明Linux系统在目标板上的启动过程? 该问题是Linux运维面试最常见的问题之一,问题答案如下: 1.用户打开PC的电源,BIOS开机自检,按BIOS中设置的启动设备( ...

  3. linux运维面试题

    一.有文件file1 1.查询file1 里面空行的所在行号 grep -n "^#" file1 or awk ‗{if($0~/^$/)print NR}‘ file or g ...

  4. linux上安装shell编辑器与linux运维面试题

    分两个部分 一.安装B-shell解释器 安装cygwin  Eclipse要找到安装的bin路径 https://cygwin.com 二.安装编辑器shellEd 下载可以得到一个:net.sou ...

  5. Linux实战型企业运维工程师试题

    1.如何通过Linux配置一个局域网或者IDC机房上网网关,请给出步骤及命令?答:上网网关配置(1)开启内核转发:sed -i 's#net.ipv4.ip_forward = 0#net.ipv4. ...

  6. linux运维面试题汇总一

    1.如何让history历史命令显示命令使用的具体时间? [root@node0 ~]# export HISTTIMEFORMAT='%F  %T ' [root@node0 ~]# history ...

  7. linux运维面试题1

    一.填空题 1. 在Linux 系统 中,以文件方式访问设备 . 2. Linux 内核引导时,从文件/etc/fstab中读取要加载的文件系统 . 3. Linux 文件系统中每个文件用indoe节 ...

  8. Linux 运维笔试题(一)

    试题:   1.说出下列服务对应的端口或者端口对应的服务 21  23  25  873  161  111  110  53  123  2049   2.文件atime,ctime,mtime的区 ...

  9. liunx运维面试题汇总二

    一.填空题:1. 在Linux系统中,以 文件 方式访问设备 .2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统. 3. Linux文件系统中每个文件用 i节点 来标识 ...

随机推荐

  1. pta编程总结3

    7-1 抓老鼠啊~亏了还是赚了? (20 分) 某地老鼠成灾,现悬赏抓老鼠,每抓到一只奖励10元,于是开始跟老鼠斗智斗勇:每天在墙角可选择以下三个操作:放置一个带有一块奶酪的捕鼠夹(T),或者放置一块 ...

  2. 14.并发与异步 - 2.任务Task -《果壳中的c#》

    线程是创建并发的底层工具,因此具有一定的局限性. 没有简单的方法可以从联合(Join)线程得到"返回值".因此必须创建一些共享域.当抛出一个异常时,捕捉和处理异常也是麻烦的. 线程 ...

  3. docker部署项目 <三>

    使用docker运行一个控制台项目,新建一个控制台测试项目 一.安装mono,直接在网易镜像中心找下载路径 docker pull hub.c..com/library/mono:latest 二.安 ...

  4. Javascript我学之二函数定义

    本文是金旭亮老师网易云课堂的课程笔记,记录下来,以供备忘 函数 几个要点:                 a).函数是javascript中的一等公民 (重要性)                 b ...

  5. 在.NET开发中的单元测试工具之(2)——xUnit.Net

    在上一篇<在.NET开发中的单元测试工具之(1)——NUnit>中讲述了如何使用NUnit在.NET开发中进行单元测试以及NUnit的一些缺点,今天将讲述如何使用xUnit.Net来进行单 ...

  6. docker - 容器lxc

    容器:是在用户空间进行隔离的组件叫做容器 常用的容器有lxc ----libcontainer---runc 需要隔离的资源有: Rootfs:每个容器对应的一个目录做为根目录 User: Hostn ...

  7. 洛古P1036 选数 题解

    [我是传送门] 这是一道很经典的深搜与回溯(难度一般) 可是就这个"普及-" 让本蒟蒻做了一晚上+半个上午(实际我不会深搜回溯,全靠框架+去重); 下面让我分享下本蒟蒻的(全排列+ ...

  8. P1341 无序字母对 欧拉回路

    题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 输入格式: 第一行输入一 ...

  9. Beta(5/7)

    鐵鍋燉腯鱻 项目:小鱼记账 团队成员 项目燃尽图 冲刺情况描述 站立式会议照片 各成员情况 团队成员 学号 姓名 git地址 博客地址 031602240 许郁杨 (组长) https://githu ...

  10. 我的 FPGA 学习历程(04)—— 练习 verilog 硬件描述语言

    这篇讲的是使用 verilog 硬件描述语言编写一个 3 - 8 译码器. 3 - 8 译码器是一个简单的组合逻辑,用于实现并转串,其输入输出关系如下: | 输入  |  输出  | -------- ...