zoukankan      html  css  js  c++  java
  • 运维面试题之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上面

  • 相关阅读:
    洛谷P2345 奶牛集会
    洛谷P3531 [POI2012]LIT-Letters
    codevs 4163 hzwer与逆序对
    各种读入方式速度比较
    洛谷P1420 最长连号
    TCPDump:捕获并记录特定协议 / 端口
    linux下抓取网页快照
    Pro Android 4 第五章 理解Intent
    UpdatePanel和jQuery不兼容
    RAC 11.2.0.4 安装 遇到 INS-06001
  • 原文地址:https://www.cnblogs.com/37yan/p/10730648.html
Copyright © 2011-2022 走看看