目录
#无状态应用部署(Deployment)有状态应用部署(StatefulSet)的区别
#简述Kubernetes中什么是Minikube、Kubectl、Kubelet?
#kubelet 监控 Node 节点资源使用是通过什么组件来实现的?
#什么是k8s
一个基于docker容器的云平台,K8S用于管理云平台中多个主机上的容器化的应用,Kubernetes是自动化容器操作的开源平台,这些操作包括容器编排,资源调度,弹性伸缩,均衡容灾,部署管理,服务发现等一系列功能。
#k8s的特性
Kubernetes的目标是让部署容器化的应用简单并且高效,Kubernetes提供了资源调度、部署管理、服务发现、扩容缩容、监控,维护等一整套功能。成为跨主机集群的自动部署、扩展以及运行应用程序容器的平台。
-自我修复
在节点故障时重新启动,替换,部署失败的容器,保证预期的副本数量;杀死健康检查失败的容器,并且在未准备好之前不会处理客户端请求,确保线上服务不中断。
-弹性伸缩
使用命令,UI或基于CPU使用情况进行自动快速地扩容缩容应用程序实例,保证业务高峰期时的高可用,当业务低峰时回收资源,减少成本
-自动部署和回滚
采用滚动更新策略更新应用,一次更新一个pod,而不是同时更新所有;若在更新时出现问题,将会滚更改,确保升级不影响业务运行
-机密和配置管理
管理机密数据和应用程序配置,不把敏感数据暴露在镜像里,提高敏感数据安全,并将常用数据配置存储在k8s中,方便应用程序使用
-存储编排
挂载外部存储系统,无论是本地还是公有云还是网络存储都作为集群资源一部分使用,提高存储灵活
-批处理
提供一次性任务,定时任务;满足批量数据处理和分析的场景。
#k8s组件有哪些
Master组件:
集群的控制平面,负责集群的决策
Kubectl:
客户端命令工具,整个操作系统的操作入口
apiserver-
集群的统一入口,各组件协调者,api提供了验证和授权
Etcd:
集群的状态存储,数据存储,服务发现和共享配置
Scheduler:
负责集群资源调度,按照预定的调度策略将pod调度到相应node节点
Controller-manager:
自动化控制中心,处理集群后台任务,实现弹性伸缩,动态扩容,滚动升级的核心
Node组件:工作负载节点,真正运行容器的机器
Kubelet:
负责维护容器的生命周期,即通过docker来管控pod,会按固定频率将节点状态上报给apiserver。
Proxy:
负责提供集群内部的服务发现,维护网络规则和负载均衡,做端口转发解决同意主机端口冲突问题。
Docker:
负责下载镜像和运行容器
Container:
运行服务和程序的载体,容器独立运行一个或一组应用,每个都是独立的
#Kubernetes核心概念
Controller:
控制器,通过它来实现对pod的管理,比如启动pod、停止pod、伸缩pod的数量等等;负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;其中分为:
Deployment:
无状态应用部署:提供了一种对 Pod 和 ReplicaSet 的管理方式
StatefulSet:
有状态应用部署:控制器;可以指定某个容器的删除更新等操作。
Replication Controller :
管理维护Replication Controller,确保预期的Pod副本数量
Service:
pod对外服务的统一入口,下面可以维护者同一类的多个pod
Label:
标签,用于对pod进行分类,
NameSpace:
命名空间,用来隔离pod的运行环境
Job:
一次性任务,运行完成后Pod销毁,不再重新启动新容器。还可以任务定时运行。
Cronjob:
定时任务,CronJob其实就是在Job的基础上加上了时间调度
Pod:
kubernetes的最小控制单元,容器都是运行在pod中的,一个pod中可以有1个或者多个容器
#简述master与node节点
Master:作为控制节点,对集群进行统一的调度和管理;比如所有的增加、删除、修改、查找容器都是在master上操作。
Worker Node:作为真正的工作节点,运行业务应用的容器;Node 由 Master 管理,Node 负责监控并汇报容器的状态,并根据 Master 的要求管理容器的生命周期。
#k8s中master与node组件的关系
Kubernetes的架构由一个master和多个node组成,master通过api提供服务,接受kubectl的请求来调度管理整个集群。 (kubectl:是 k8s 平台的一个管理命令。)
#node节点与proxy的关系
Kubernetes 是个管理平台,node上的 proxy 拥有提供真实服务公网 IP。客户端访问kubernetes 中提供的服务,是直接访问到 kube-proxy 上的。
#service与container(容器)的关系
service 则定义真实对外网提供的服务,一个 service 会对应后端运行的多个 container。没有service访问不到容器。
#comtroller manager在k8s中起到的作用
Controller Manager是Kubernetes所有资源对象的自动化控制中心,处理集群中常规后台任务,一个资源对应一个控制器,而Controller Manager就是负责管理这些控制器的。例如Replication controller (复制控制器)定义了有多少个 pod 或者容器需要运行,如果当前集群中运行的 pod 容器达不到配置的数量,replication controller 会调度容器在minion 上运行,保证集群中的 pod 数量。
#说出k8s集群三种IP
Node IP:Node节点的IP地址
Pod IP: Pod的IP地址
Cluster IP:Service的IP地址
#集群三种IP的作用
Node IP:
是K8s集群中节点的物理网卡IP地址,所有属于这个网络的服务器之间都能通过这个网络直接通信。这也表明K8s集群之外的节点访问K8s集群之内的某个节点或者TCP/IP服务的时候,必须通过Node IP进行通信
Pod IP:
是每个Pod的IP地址,他是Docker Engine根据docker0网桥的IP地址段进行分配的,通常是一个虚拟的二层网络。
Cluster IP:
结合Service Port组成一个具体的通信端口,单独的Cluster IP不具备通信的基础,并且他们属于Kubernetes集群这样一个封闭的空间。
#简述etcd及其特点
etcd是一个分布式,高可用,一致的key-value存储数据库,主要用于数据存储,共享配置和服务发现。
特点:完全复制-高可用-一致性-简单-安全-快速-可靠
#无状态应用部署(Deployment)有状态应用部署(StatefulSet)的区别
无状态应用部署:
提供了一种对 Pod 和 ReplicaSet 的管理方式,仅需描述好目标状态,Deployment controller 就会将 Pod 和ReplicaSet 的实际状态改变到目标状态。deployment 是用来管理无状态应用部署的,面向集群的管理,而不是面向一个不可变的个体。
有状态应用部署:
与无状态相同点是他们管理相同容器规范的Pod,不同的是,StatefulSet为pod创建一个持久的标识符,他可以在任何编排的时候得到相同的标识符。StatefulSet适用于具有以下特点的应用:
1,具有固定的网络标记(主机名)
2,具有持久化存储
3,需要按顺序部署和扩展
4,需要按顺序终止及删除
5,需要按顺序滚动更新
#简述Kubernetes和Docker的关系?
Docker是开源容器引擎,一种轻量级的虚拟化技术。k8s是容器管理工具,用来管理容器pod的集合,k8s可以实现容器集群的自动化部署,自动扩缩容,维护等功能。
#简述Kubernetes中什么是Minikube、Kubectl、Kubelet?
Minikube:可以在本机轻松运行一个单节点k8s集群的工具。
Kubectl:一个命令行工具,可以使用该工具对集群进行管理控制。
Kubelet:一个代理服务,在每个节点上运行并使从服务器与主服务器通信。
#kubelet的功能,作用是什么
部署在每个node节点上
- 节点管理。Kubelet启动时会想apiserver进行注册,定向的向apiserver汇报节点信息,资源状态等,这样master就知道node节点的资源状态。
- Pod管理。维护node节点上pod的生命周期,当kubelet监听到master下发给自己的任务时,kubelet就会通过crl插件调动pod。
- 容器健康检查。pod中可以定义启动探针、存活探针、就绪探针等,我们最常用的就是存活探针、就绪探针,kubelet 定期调用容器中的探针来检测容器是否存活,是否就绪,如果是存活探针,则会根据探测结果对检查失败的容器进行相应的重启策略;
- Metrics Server资源监控。在node节点上部署Metrics Server用于监控node,而kubelet则通过Metrics Server获取所在节点及容器的上的数据。
#api-server的端口
8080是http的端口,6443是https的端口
#简述proxy原理
是service的透明代理兼负载均衡,核心功能是将Service的访问转发到后端的多个Pod上,
优势:
1)为大型集群提供更好的扩展性和性能。采用哈希表的数据结构,更高效;
2)支持负载均衡算法;
3)支持服务器健康检查和连接重试;
4)可以动态修改ipset的集合;
#k8s数据持久化的方式有哪些
1,EmptyDir(空目录):没有指定要挂载宿主机上的某个目录,直接由Pod内保部映射到宿主机上。
2,Hostpath:将宿主机上已存在的目录或文件挂载到容器内部。类似于docker中的bind mount挂载方式;
3,PersistentVolume(简称PV):基于NFS服务的PV,也可以基于GFS的PV。它的作用是统一数据持久化目录,方便管理,PVC是向PV申请应用所需的容量大小,K8s集群中可能会有多个PV,PVC和PV若要关联,其定义的访问模式必须一致。
#kubelet 监控 Node 节点资源使用是通过什么组件来实现的?
用Metrics Server提供核心指标,包括Node、Pod的CPU和内存的使用。
#k8s共享存储的作用
Kubernetes对于有状态的容器应用或者对数据需要持久化的应用,因此需要更加可靠的存储来保存应用产生的重要数据,以便容器应用在重建之后仍然可以使用之前的数据。因此需要使用共享存储;
#使用k8s时可以采取哪些最佳安全措施
1,确保容器本身安全
2,锁定容器linux内核
3,基于角色的访问控制
4,保持网络安全
#k8s的负载均衡器
内部负载均衡器: 自动平衡负载并使用所需配置分配容器;
外部负载均衡器: 将流量从外部负载引导至后端容器;