八、K8s & Docker


Github地址

CSDN地址

八、K8s

8.0 什么是K8s
  • 它由 Google 于 2000 年设计和开发,后来于 2014 年捐赠给云原生计算基金会(CNCF)。
  • kubenetes 是一个容器编排工具。
  • 用于管理容器。
    类似 K8s的工具还有: docker swarm, Mesos, DC/OS.
8.1 K8s和docker 区别

Docker 用于构建 docker 镜像和创建容器,而 kubenetes 用于管理容器。

8.2 什么是自动化和编排
  • 用于执行单个任务的自动化。
  • 用于构建工作流的编排。
8.3 K8s 结构
  1. Master
  • Kube-ApiServer: 就像是kubernetes的入口或者kubernetes的前端,每一个请求都是先到达api-server的。
  • Scheduler: 它将通过检查 etcd 可用的服务来调度节点上的服务。
  • Control manager:
    • Node control manager: 通知节点是否已启动
    • Replication control manager: 维护当前状态和所需状态
    • EndPoint control manager: 它将为服务创建端点
    • Service Account control manager: 它将允许访问外部服务,如 s3、rds 等。
  • etcd --> 它包含有关主节点和节点的信息。它就像数据存储和键值对。
  1. Nodes
  • Kublet: kubelet 将确保 Pod 处于运行状态。
  • kube-Proxy: 它将处理与 pod 相关的网络,如 IP 地址。
  • Docker: docker 运行容器。
  1. run kubectl command
  • 当我们运行 kubectl 命令时,它将与 kube-apiserver 对话,api-server 将与 etcd 对话,etcd 将向 api-server 提供信息,然后服务器将与 kubelet 对话,kubelet 将与 Docker 对话并拉取图像并创建一个 pod。
8.4 Image 和 container 的区别
  • Docker 镜像是包含基本操作系统、应用服务和数据的模板
  • Docker 容器是镜像的副本,具有 CPU、内存、网络和存储等附加资源。
8.5 创建一个Pod的主要流程?

Kubernetes中创建一个Pod涉及多个组件之间联动,主要流程如下:

  • 1、客户端提交Pod的配置信息(可以是yaml文件定义的信息)到kube-apiserver。
  • 2、Apiserver收到指令后,通知给controller-manager创建一个资源对象。
  • 3、Controller-manager通过api-server将pod的配置信息存储到ETCD数据中心中。
  • 4、Kube-scheduler检测到pod信息会开始调度预选,会先过滤掉不符合Pod资源配置要求的节点,然后开始调度调优,主要是挑选出更适合运行pod的节点,然后将pod的资源配置单发送到node节点上的kubelet组件上。
  • 5、Kubelet根据scheduler发来的资源配置单运行pod,运行成功后,将pod的运行信息返回给scheduler,scheduler将返回的pod运行状况的信息存储到etcd数据中心。
8.6 K8s中Pod的重启策略?

Pod重启策略(RestartPolicy)应用于Pod内的所有容器,并且仅在Pod所处的Node上由kubelet进行判断和重启操作。当某个容器异常退出或者健康检查失败时,kubelet将根据RestartPolicy的设置来进行相应操作。

Pod的重启策略包括Always、OnFailure和Never,默认值为Always。

  • Always:当容器失效时,由kubelet自动重启该容器;
  • OnFailure:当容器终止运行且退出码不为0时,由kubelet自动重启该容器;
  • Never:不论容器运行状态如何,kubelet都不会重启该容器。

同时Pod的重启策略与控制方式关联,当前可用于管理Pod的控制器包括ReplicationController、Job、DaemonSet及直接管理kubelet管理(静态Pod)。

不同控制器的重启策略限制如下:

  • RC和DaemonSet:必须设置为Always,需要保证该容器持续运行;
  • Job:OnFailure或Never,确保容器执行完成后不再重启;
  • kubelet:在Pod失效时重启,不论将RestartPolicy设置为何值,也不会对Pod进行健康检查。
8.7 k8s 外部如何访问集群内的服务?

对于Kubernetes,集群外的客户端默认情况,无法通过Pod的IP地址或者Service的虚拟IP地址:虚拟端口号进行访问。通常可以通过以下方式进行访问Kubernetes集群内的服务:

  • 映射Pod到物理机:将Pod端口号映射到宿主机,即在Pod中采用hostPort方式,以使客户端应用能够通过物理机访问容器应用。
  • 映射Service到物理机:将Service端口号映射到宿主机,即在Service中采用nodePort方式,以使客户端应用能够通过物理机访问容器应用。
  • 映射Sercie到LoadBalancer:通过设置LoadBalancer映射到云服务商提供的LoadBalancer地址。这种用法仅用于在公有云服务提供商的云平台上设置Service的场景。
8.8 简述Kubernetes网络模型?

Kubernetes网络模型中每个Pod都拥有一个独立的IP地址,并假定所有Pod都在一个可以直接连通的、扁平的网络空间中。所以不管它们是否运行在同一个Node(宿主机)中,都要求它们可以直接通过对方的IP进行访问。设计这个原则的原因是,用户不需要额外考虑如何建立Pod之间的连接,也不需要考虑如何将容器端口映射到主机端口等问题。

同时为每个Pod都设置一个IP地址的模型使得同一个Pod内的不同容器会共享同一个网络命名空间,也就是同一个Linux网络协议栈。这就意味着同一个Pod内的容器可以通过localhost来连接对方的端口。

在Kubernetes的集群里,IP是以Pod为单位进行分配的。一个Pod内部的所有容器共享一个网络堆栈(相当于一个网络命名空间,它们的IP地址、网络设备、配置等都是共享的)。

参考1: 民工哥 - k8s 面试题总结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yexiaomola

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值