一、k8s是什么?

k8s用于自动部署、扩缩和管理容器化应用程序的开源系统。

Kubernetes,简称K8s,它是一个全新的基于容器技术的分布式架构领先方案,确切地说,Kubernetes是谷歌严格保密十几年的秘密武器Borg的一个开源版本。Borg是谷歌内部使用的大规模集群管理系统,负责对谷歌内部很多核心服务的调度和管理*,它基于容器技术,目的是实现资源管理的自动化,以及跨多个数据中心的资源利用率的最大化。

二、k8s与docker有什么关系?

简单的来说,k8s是管理docker的;

Kubernetes 使用 Docker 或其他容器运行时来管理容器的执行;

1.Docker 是一个容器运行时环境,而 Kubernetes 是一个全面的容器编排系统。

2.Docker 主要用于单个主机上的容器管理,而 Kubernetes 设计用于在多个主机上管理容器,并进行自动化运维。

3.Docker 主要通过 Dockerfile 和 docker-compose 来定义和配置容器,而 Kubernetes 使用 Pod、Deployment、Service 等概念来定义和管理容器。

4.Kubernetes 提供了服务发现、负载均衡、自动扩缩容等高级功能,而 Docker 这些功能需要借助其他工具或第三方插件实现。

三、 k8s的适用场景?

       (摘录于csdn:普修罗双战士)

           1.需要自动化部署、扩展和管理容器化应用程序的场景。
           2.需要保证容器应用程序的可靠性的场景。
           3.需要支持多种容器运行时的场景。
           4.需要易于使用和管理的容器编排平台的场景。

四、.K8S的优势有哪些?

   1.敏捷的应用程序创建和部署:与vm的镜像的使用相比,容器镜像的创建更加容易和高效。

   2.跨开发、测试和生产环境的一致性:开发、测试、生产不会由于安装环境原因带来问题;

   3.资源利用:效率高、密度大;

   4.自动部署和回滚:提供可靠和频繁的容器镜像构建和部署,并提供快速和轻松的版本升级和回滚策略;

    5.资源隔离

    6.故障恢复:k8s可以自动检测并替换故障容器,确保服务的可靠性;

    7.资源调度:k8s可以根据资源需求自动进行资源调度,确保每个应用程序都能获得足够的资源。

    8.服务部署和扩展:k8s 可以帮助开发者快速部署和扩展服务,实现自动化管理;

   9.网络管理:k8s可以帮助管理容器之间的网络通信,实现多哦个容器之间的沟通。

  五、简述k8s缺点及不足之处。

    1.安装部署比较困难;

     2.配置复杂;需要花费大量时间来编写和维护k8s的配置文件;

     3.运维成本高;

六、简述k8s架构

     k8s包括 master节点 和 node节点;

    master节点:

1.APIserver:  应用程序编程接口

 所有服务访问的同一入口。

集群控制中枢,各个模块间信息交 互需要经过Kube-APIServer,同时他也是集群管理、 资源配置、整个集群安全机制的入口。

Controller Manager 负责管理 Kubernetes 集群中的所有资源,包括 Pod、ReplicaSet、Deployment、Service 等。

常用命令:

查看接口:kubectl api- resources |grep xxx

           例:kubectl api- resources |grep job

2.Controller Manager:  控制器管理器:
   负责监控维护集群状态
3.Scheduler: 调度器

  集群的调度中心,它会根据指定一系列条 件,选择一个或一批最佳的节点,然后部署我们的 Pod;即:当运行了一个新的Pod之后,调度器会根据用户需求及node节点情况选择合适的node节点运行pod;

4.Etcd  键值数据库,

  保存一切集群的配置信息、状态信息以及元数据,

这包括但不限于:

 * 集群的配置:如API对象(Pod、Service、ConfigMap、Secret等)的状态和配置。
 * 节点信息:包括节点的状态和标识。
 * Pod和服务的状态:记录了集群中各个Pod和服务的当前状态。
 * 配置文件和网络信息:集群运行所需的配置文件和网络设置。

  node节点:

1.kubelet:

负责接收master节点上API  server指令,并在node节点上执行;

负责监听节点上的Pod的状态,同时上报节 点和节点上面Pod的状态,负责和Master节点通信, 并管理节点上面的Pod。

2.kube-proxy:

负责Pod之间的通信和负载均衡,将指 定的流量分发到正确的机器上。查看Kube-proxy工 作模式:curl 127.0.0.1:10249/proxyMode

  • ipvs模式

  • iptables模式

  master和node集群间通信

Kubernetes 集群通过 Master 节点和 Node 节点之间的通信来工作。Master 节点通过 API Server 向 Node 节点发送指令,Node 节点通过 Kubelet 执行这些指令

  七、简单介绍k8s中deployment和statefulset的区别?

   1.deployment: 用来部署无状态的服务;特点:产生的Pod是无序的,IP是随机的,每次重启会发生变化;具有创建副本的功能,快速扩容、缩容、回滚;

  2. statefulset: 用来部署有状态的服务;特点:创建的Pod都有自己的标识,故障时,它只能被拥有同一个标识的新pod取代;

  八、 有状态的服务和无状态的服务有什么区别?

         k8s中,StatefulSet 是为了解决有状态服务的问题而设计的资源控制器。StatefulSet可以管理有状态服务。 前面我们讲到了Deployment、DaemonSet都只适合用来跑无状态的服务pod。

        怎么理解有状态和无状态服务呢?

  • 无状态服务:

    • 最典型的是WEB服务器的每次http请求,它的每次请求都是全新的,和之前的没有关系;
    • pod都是随机名称,IP每次发生重启也是变化的;
    • 当一个pod因为某些原来被删除掉的时候,K8s会启动一个新的pod来代替它;
    • 无状态服务因为相互之前都是独立的,很适合用横向扩充来增加服务的资源量。
  • 有状态服务:

    • 用网游服务器来举例比较恰当了,每个用户的登陆请求,服务端都是先根据这个用户之前注册过的帐号密码等信息来判断这次登陆请求是否正常;
    • 在K8s上运行的有状态服务的pod,都会被给予一个独立的固定名称;
    • 当有状态服务的pod删除时,K8s会启动一个和先前一模一样名称的pod来代替它。

九、如何对Pod健康状态诊断?

    *  Startup(启动探测):探测容器是否正常运行

  • Liveness(存活性探测):判断容器是否处于runnning状态,根据重启策略决定是否重启容器

  • Readiness(就绪性检测):判断容器是否准备就绪并对外提供服务,将容器设置为不可用,不接受service转发的请求

 十、简单说一下RC和RS?

   RC(ReplicationController)

是kubernetes系统中的核心概念之一。RC是Kubernetes集群实现
Pod资源对象自动化管理的基础。

简单来说,RC其实是定义了一个期望的场景,RC有以下特点: 1、组成:定义了Pod副本的期望状态:包括数量,筛选标签和模板 Pod期待的副本数量(replicas). 永远筛选目标Pod的标签选择器(Label Selector) Pod数量不满足预期值,自动创建Pod时候用到的模板(template) 2、意义:自动监控Pod运行的副本数目符合预期,保证Pod高可用的核心组件,常用于Pod的生命周期管理

主要作用:

主要的作用就是用来确保容器应用的副本数始终保持在用户定义的副本数 。即如果有容器异常退出,会自动创建新的 Pod 来替代;而如果异常多出来的容器也会自动回收(已经成为过去时)。

 

  RS(ReplicaSet)

Kubernetes 官方建议使用 RS(ReplicaSet ) 替代 RC (ReplicationController ) 进行部署,RS 跟 RC 没有本质的不同,只是名字不一样,并且 RS 支持集合式的 selector。

RS和RC两者功能上没有太大的区别,只不过是表现形式上不一样:
   RC中的Label Selector是基于等式的
   RS中的Label Selector是基于集合的
因为集合的特点,这就使得Replica Set的功能更强大。
RS实验演示

查看pod的信息

查看pod标签

kubectl   get  pod  --show-labels

修改标签名:

将原来的标签名:tier=myweb  修改为: tier=my-nginx

 kubectl label pod myweb-rkqjz tier=my-nginx --overwrite=True 

删除标签

kubectl  delete  rs  --all

十一、K8S有几种安装方式,简介这些安装方式的优缺点。

官方文档参考:

 来源:k8s官方文档 安装工具 | Kubernetes

kind
kind 让你能够在本地计算机上运行 Kubernetes。 使用这个工具需要你安装 Docker 或者 Podman。

kind 的 Quick Start 页面展示开始使用 kind 所需要完成的操作。

查看 kind 的快速入门指南

minikube
与 kind 类似,minikube 是一个工具, 能让你在本地运行 Kubernetes。 minikube 在你的个人计算机(包括 Windows、macOS 和 Linux PC)上运行一个一体化(all-in-one) 或多节点的本地 Kubernetes 集群,以便你来尝试 Kubernetes 或者开展每天的开发工作。

如果你关注如何安装此工具,可以按官方的 Get Started!指南操作。

查看 minikube 快速入门指南

当你拥有了可工作的 minikube 时, 就可以用它来运行示例应用了。

kubeadm
你可以使用 kubeadm 工具来创建和管理 Kubernetes 集群。 该工具能够执行必要的动作并用一种用户友好的方式启动一个可用的、安全的集群。

安装 kubeadm 展示了如何安装 kubeadm 的过程。一旦安装了 kubeadm, 你就可以使用它来创建一个集群。

百度:

常用方式:
  1. 二进制方式安装:直接下载、部署二进制文件来安装Kubernetes。                                             优点:二进制安装便于熟悉k8s的各个组件,对学习k8s是有好处的; 便于排错;                   缺点:安装比较费劲;
  2. kubeadm方式安装:是官方提供的用于快速安装k8s集群的工具,将k8s的各个组件都安装在docker之上,以容器的方式运行。
  3. minikube:作为单机运行的Kubernetes集群,直接使用官网感受一下,点击launch terminal,浏览器下发会弹出命令界面。

  4. yum安装                                                                                                                                         优点:安装快速;                                                                                                                      缺点:所有软件的依赖不能自己指定;不易排错;

其余安装方式:
  1. 容器化方式安装:使用容器来部署Kubernetes集群,如使用Docker等容器技术。
  2. 云平台提供的方式:云提供商如AWSAzure等提供了快速安装Kubernetes的解决方案。
  3. kubeadm:官方推荐方案,也在大力发展。小问题比较多,扩展还是需要配合其它方案一起做。
  4. kops:非常早就存在的一个项目,也是目前最靠谱的部署方案,但由于与各云平台整合度非常高,所以也不是很推荐。
  5. 手动部署(二进制):完全看喜好,推荐大家都尝试一遍,成功与不成功不要紧,最主要的是了解一下Kubernetes的组件。
  6. Rancher:如果团队不大,还是比较推荐的。
  7. Kubespray:最推荐的方案有kops的集成度(还差一些,但是该有的都有了),升级方便。

十二、如何调度pod?

k8s提供了四大类调度方式:

  • 自动调度:运行在哪个节点上完全由Scheduler经过一系列的算法计算得出
  • 定向调度:NodeName(根据节点名调度)、NodeSelector(根据标签调度)
  • 亲和性调度:NodeAffinity(节点亲和性)、PodAffinity(Pod亲和性)、PodAntiAffinity(Pod反亲和性)
  • 污点(容忍)调度:Taints(node声明有污点)、Toleration(Pod声明容忍污点)

十三、pod生命周期有哪些状态?

   pod在整个生命周期的过程中总会处于以下几个状态:

  • Pending:创建了pod资源并存入etcd中,但尚未完成调度。

  • ContainerCreating:Pod 的调度完成,被分配到指定 Node 上。处于容器创建的过程中。通常是在拉取镜像的过程中。

  • Running:Pod 包含的所有容器都已经成功创建,并且成功运行起来。

  • Succeeded:Pod中的所有容器都已经成功终止并且不会被重启

  • Failed:所有容器都已经终止,但至少有一个容器终止失败,也就是说容器返回了非0值的退出状态或已经被系统终止。

  • Unknown:因为某些原因无法取得 Pod 的状态。这种情况通常是因为与 Pod 所在主机通信失败。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐