河北建设工程信息网站企业在阿里做网站是什么意思
- 作者: 五速梦信息网
- 时间: 2026年03月21日 10:55
当前位置: 首页 > news >正文
河北建设工程信息网站,企业在阿里做网站是什么意思,静态网站制作模板,wordpress无显示评论框1、简述etcd及其特点etcd是CoreOS团队发起的开源项目#xff0c;是一个管理配置信息和服务发现#xff08;service discovery#xff09;的项目#xff0c;它的目标是构建一个高可用的分布式键值#xff08;key-value#xff09;数据库#xff0c;基于Go语言实现。特点是一个管理配置信息和服务发现service discovery的项目它的目标是构建一个高可用的分布式键值key-value数据库基于Go语言实现。特点简单支持REST风格的HTTPJSON API安全支持HTTPS方式的访问快速支持并发1k/s的写操作可靠支持分布式结构基于Raft的一致性算法Raft是一套通过选举主节点来实现分布式系统一致性的算法。2、简述etcd适应的场景etcd基于其优秀的特点可广泛的应用于以下场景服务发现Service Discovery服务发现主要解决在同一个分布式集群中的进程或服务要如何才能找到对方并建立连接。本质上来说服务发现就是想要了解集群中是否有进程在监听UDP或TCP端口并且通过名字就可以查找和连接。消息发布与订阅在分布式系统中最适用的一种组件间通信方式就是消息发布与订阅。即构建一个配置共享中心数据提供者在这个配置中心发布消息而消息使用者则订阅他们关心的主题一旦主题有消息发布就会实时通知订阅者。通过这种方式可以做到分布式系统配置的集中式管理与动态更新。应用中用到的一些配置信息放到etcd上进行集中管理。负载均衡在分布式系统中为了保证服务的高可用以及数据的一致性通常都会把数据和服务部署多份以此达到对等服务即使其中的某一个服务失效了也不影响使用。etcd本身分布式架构存储的信息访问支持负载均衡。etcd集群化以后每个etcd的核心节点都可以处理用户的请求。所以把数据量小但是访问频繁的消息数据直接存储到etcd中也可以实现负载均衡的效果。分布式通知与协调与消息发布和订阅类似都用到了etcd中的Watcher机制通过注册与异步通知机制实现分布式环境下不同系统之间的通知与协调从而对数据变更做到实时处理。分布式锁因为etcd使用Raft算法保持了数据的强一致性某次操作存储到集群中的值必然是全局一致的所以很容易实现分布式锁。锁服务有两种使用方式一是保持独占二是控制时序。集群监控与Leader竞选通过etcd来进行监控实现起来非常简单并且实时性强。3、简述什么是KubernetesKubernetes是一个全新的基于容器技术的分布式系统支撑平台。是Google开源的容器集群管理系统谷歌内部Borg。在Docker技术的基础上为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能提高了大规模容器集群管理的便捷性。并且具有完备的集群管理能力多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和发现机制、內建智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制以及多粒度的资源配额管理能力。4、简述Kubernetes和Docker的关系Docker提供容器的生命周期管理和Docker镜像构建运行时容器。它的主要优点是将将软件/应用程序运行所需的设置和依赖项打包到一个容器中从而实现了可移植性等优点。Kubernetes用于关联和编排在多个主机上运行的容器。5、简述Minikube、Kubectl、Kubelet分别是什么Minikube是一种可以在本地轻松运行一个单节点Kubernetes群集的工具。Kubectl是一个命令行工具可以使用该工具控制Kubernetes集群管理器如检查群集资源创建、删除和更新组件查看应用程序。Kubelet是一个代理服务它在每个节点上运行并使从服务器与主服务器通信。6、简述Kubernetes常见的部署方式常见的Kubernetes部署方式有kubeadm也是推荐的一种部署方式二进制minikube在本地轻松运行一个单节点Kubernetes群集的工具。7、简述Kubernetes如何实现集群管理在集群管理方面Kubernetes将集群中的机器划分为一个Master节点和一群工作节点Node。其中在Master节点运行着集群管理相关的一组进程kube-apiserver、kube-controller-manager和kube-scheduler这些进程实现了整个集群的资源管理、Pod调度、弹性伸缩、安全控制、系统监控和纠错等管理能力并且都是全自动完成的。8、简述Kubernetes的优势、适应场景及其特点Kubernetes作为一个完备的分布式系统支撑平台其主要优势容器编排轻量级开源弹性伸缩负载均衡Kubernetes常见场景快速部署应用快速扩展应用无缝对接新的应用功能节省资源优化硬件资源的使用Kubernetes相关特点可移植支持公有云、私有云、混合云、多重云multi-cloud。可扩展: 模块化,、插件化、可挂载、可组合。自动化: 自动部署、自动重启、自动复制、自动伸缩/扩展。9、简述Kubernetes的缺点或当前的不足之处Kubernetes当前存在的缺点不足如下安装过程和配置相对困难复杂。管理服务相对繁琐。运行和编译需要很多时间。它比其他替代品更昂贵。对于简单的应用程序来说可能不需要涉及Kubernetes即可满足。10、简述Kubernetes相关基础概念MasterKubernetes集群的管理节点负责管理集群提供集群的资源数据访问入口。拥有etcd存储服务可选运行Api Server进程Controller Manager服务进程及Scheduler服务进程。NodeworkerNodeworker是Kubernetes集群架构中运行Pod的服务节点是Kubernetes集群操作的单元用来承载被分配Pod的运行是Pod运行的宿主机。运行Docker Eninge服务守护进程kunelet及负载均衡器kube-proxy。Pod运行于Node节点上若干相关容器的组合。Pod内包含的容器运行在同一宿主机上使用相同的网络命名空间、IP地址和端口能够通过localhost进行通信。Pod是Kubernetes进行创建、调度和管理的最小单位它提供了比容器更高层次的抽象使得部署和管理更加灵活。一个Pod可以包含一个容器或者多个相关容器。LabelKubernetes中的Label实质是一系列的Key/Value键值对其中key与value可自定义。Label可以附加到各种资源对象上如Node、Pod、Service、RC等。一个资源对象可以定义任意数量的Label同一个Label也可以被添加到任意数量的资源对象上去。Kubernetes通过Label Selector标签选择器查询和筛选资源对象。Replication ControllerReplication Controller用来管理Pod的副本保证集群中存在指定数量的Pod副本。集群中副本的数量大于指定数量则会停止指定数量之外的多余容器数量。反之则会启动少于指定数量个数的容器保证数量不变。Replication Controller是实现弹性伸缩、动态扩容和滚动升级的核心。DeploymentDeployment在内部使用了RS来实现目的Deployment相当于RC的一次升级其最大的特色为可以随时获知当前Pod的部署进度。HPAHorizontal Pod AutoscalerPod的横向自动扩容也是Kubernetes的一种资源通过追踪分析RC控制的所有Pod目标的负载变化情况来确定是否需要针对性的调整Pod副本数量。ServiceService定义了Pod的逻辑集合和访问该集合的策略是真实服务的抽象。Service提供了一个统一的服务访问入口以及服务代理和发现机制关联多个相同Label的Pod用户不需要了解后台Pod是如何运行。VolumeVolume是Pod中能够被多个容器访问的共享目录Kubernetes中的Volume是定义在Pod上可以被一个或多个Pod中的容器挂载到某个目录下。NamespaceNamespace用于实现多租户的资源隔离可将集群内部的资源对象分配到不同的Namespace中形成逻辑上的不同项目、小组或用户组便于不同的Namespace在共享使用整个集群的资源的同时还能被分别管理。11、简述Kubernetes集群相关组件Kubernetes Master控制组件调度管理整个系统集群包含如下组件Kubernetes API Server作为Kubernetes系统的入口其封装了核心对象的增删改查操作以RESTful API接口方式提供给外部客户和内部组件调用集群内各个功能模块之间数据交互和通信的中心枢纽。Kubernetes Scheduler为新建立的Pod进行节点Node选择即分配机器负责集群的资源调度。Kubernetes Controller负责执行各种控制器目前已经提供了很多控制器来保证Kubernetes的正常运行。Replication Controller管理维护Replication Controller关联Replication Controller和Pod保证Replication Controller定义的副本数量与实际运行Pod数量一致。Node Controller管理维护Node定期检查Node的健康状态标识出失效|未失效的Node节点。Namespace Controller管理维护Namespace定期清理无效的Namespace包括Namesapce下的API对象比如Pod、Service等。Service Controller管理维护Service提供负载以及服务代理。EndPoints Controller管理维护Endpoints关联Service和Pod创建Endpoints为Service的后端当Pod发生变化时实时更新Endpoints。Service Account Controller管理维护Service Account为每个Namespace创建默认的Service Account同时为Service Account创建Service Account Secret。Persistent Volume Controller管理维护Persistent Volume和Persistent Volume Claim为新的Persistent Volume Claim分配Persistent Volume进行绑定为释放的Persistent Volume执行清理回收。Daemon Set Controller管理维护Daemon Set负责创建Daemon Pod保证指定的Node上正常的运行Daemon Pod。Deployment Controller管理维护Deployment关联Deployment和Replication Controller保证运行指定数量的Pod。当Deployment更新时控制实现Replication Controller和Pod的更新。Job Controller管理维护Job为Jod创建一次性任务Pod保证完成Job指定完成的任务数目Pod Autoscaler Controller实现Pod的自动伸缩定时获取监控数据进行策略匹配当满足条件时执行Pod的伸缩动作。12、简述Kubernetes RC的机制Replication Controller用来管理Pod的副本保证集群中存在指定数量的Pod副本。当定义了RC并提交至Kubernetes集群中之后Master节点上的Controller Manager组件获悉并同时巡检系统中当前存活的目标Pod并确保目标Pod实例的数量刚好等于此RC的期望值若存在过多的Pod副本在运行系统会停止一些Pod反之则自动创建一些Pod。13、简述Kubernetes Replica Set和Replication Controller之间有什么区别Replica Set和Replication Controller类似都是确保在任何给定时间运行指定数量的Pod副本。不同之处在于RS使用基于集合的选择器而Replication Controller使用基于权限的选择器。14、简述kube-proxy的作用kube-proxy运行在所有节点上它监听apiserver中service和endpoint的变化情况创建路由规则以提供服务IP和负载均衡功能。简单理解此进程是Service的透明代理兼负载均衡器其核心功能是将到某个Service的访问请求转发到后端的多个Pod实例上。15、简述kube-proxy iptables的原理Kubernetes从1.2版本开始将iptables作为kube-proxy的默认模式。iptables模式下的kube-proxy不再起到Proxy的作用其核心功能通过API Server的Watch接口实时跟踪Service与Endpoint的变更信息并更新对应的iptables规则Client的请求流量则通过iptables的NAT机制“直接路由”到目标Pod。16、简述kube-proxy ipvs的原理IPVS在Kubernetes1.11中升级为GA稳定版。IPVS则专门用于高性能负载均衡并使用更高效的数据结构Hash表允许几乎无限的规模扩张因此被kube-proxy采纳为最新模式。在IPVS模式下使用iptables的扩展ipset而不是直接调用iptables来生成规则链。iptables规则链是一个线性的数据结构ipset则引入了带索引的数据结构因此当规则很多时也可以很高效地查找和匹配。可以将ipset简单理解为一个IP段的集合这个集合的内容可以是IP地址、IP网段、端口等iptables可以直接添加规则对这个“可变的集合”进行操作这样做的好处在于可以大大减少iptables规则的数量从而减少性能损耗。17、简述kube-proxy ipvs和iptables的异同iptables与IPVS都是基于Netfilter实现的但因为定位不同二者有着本质的差别iptables是为防火墙而设计的IPVS则专门用于高性能负载均衡并使用更高效的数据结构Hash表允许几乎无限的规模扩张。与iptables相比IPVS拥有以下明显优势为大型集群提供了更好的可扩展性和性能支持比iptables更复杂的复制均衡算法最小负载、最少连接、加权等支持服务器健康检查和连接重试等功能可以动态修改ipset的集合即使iptables的规则正在使用这个集合。18、简述Kubernetes中什么是静态Pod静态Pod是由kubelet进行管理的仅存在于特定Node的Pod上他们不能通过API Server进行管理无法与ReplicationController、Deployment或者DaemonSet进行关联并且kubelet无法对他们进行健康检查。静态Pod总是由kubelet进行创建并且总是在kubelet所在的Node上运行。19、简述Kubernetes中Pod可能位于的状态PendingAPI Server已经创建该Pod且Pod内还有一个或多个容器的镜像没有创建包括正在下载镜像的过程。RunningPod内所有容器均已创建且至少有一个容器处于运行状态、正在启动状态或正在重启状态。SucceededPod内所有容器均成功执行退出且不会重启。FailedPod内所有容器均已退出但至少有一个容器退出为失败状态。Unknown由于某种原因无法获取该Pod状态可能由于网络通信不畅导致。20、简述Kubernetes创建一个Pod的主要流程Kubernetes中创建一个Pod涉及多个组件之间联动主要流程如下客户端提交Pod的配置信息可以是yaml文件定义的信息到kube-apiserver。Apiserver收到指令后通知给controller-manager创建一个资源对象。Controller-manager通过api-server将Pod的配置信息存储到etcd数据中心中。Kube-scheduler检测到Pod信息会开始调度预选会先过滤掉不符合Pod资源配置要求的节点然后开始调度调优主要是挑选出更适合运行Pod的节点然后将Pod的资源配置单发送到Node节点上的kubelet组件上。Kubelet根据scheduler发来的资源配置单运行Pod运行成功后将Pod的运行信息返回给schedulerscheduler将返回的Pod运行状况的信息存储到etcd数据中心。21、简述Kubernetes中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需要保证该容器持续运行JobOnFailure或Never确保容器执行完成后不再重启kubelet在Pod失效时重启不论将RestartPolicy设置为何值也不会对Pod进行健康检查。22、简述Kubernetes中Pod的健康检查方式对Pod的健康检查可以通过两类探针来检查LivenessProbe和ReadinessProbe。LivenessProbe探针用于判断容器是否存活running状态如果LivenessProbe探针探测到容器不健康则kubelet将杀掉该容器并根据容器的重启策略做相应处理。若一个容器不包含LivenessProbe探针kubelet认为该容器的LivenessProbe探针返回值用于是“Success”。ReadineeProbe探针用于判断容器是否启动完成ready状态。如果ReadinessProbe探针探测到失败则Pod的状态将被修改。Endpoint Controller将从Service的Endpoint中删除包含该容器所在Pod的Eenpoint。startupProbe探针启动检查机制应用一些启动缓慢的业务避免业务长时间启动而被上面两类探针kill掉。23、简述Kubernetes Pod的LivenessProbe探针的常见方式kubelet定期执行LivenessProbe探针来诊断容器的健康状态通常有以下三种方式ExecAction在容器内执行一个命令若返回码为0则表明容器健康。TCPSocketAction通过容器的IP地址和端口号执行TCP检查若能建立TCP连接则表明容器健康。HTTPGetAction通过容器的IP地址、端口号及路径调用HTTP Get方法若响应的状态码大于等于200且小于400则表明容器健康。24、简述Kubernetes Pod的常见调度方式Kubernetes中Pod通常是容器的载体主要有如下常见调度方式Deployment或RC该调度策略主要功能就是自动部署一个容器应用的多份副本以及持续监控副本的数量在集群内始终维持用户指定的副本数量。NodeSelector定向调度当需要手动指定将Pod调度到特定Node上可以通过Node的标签Label和Pod的nodeSelector属性相匹配。NodeAffinity亲和性调度亲和性调度机制极大的扩展了Pod的调度能力目前有两种节点亲和力表达requiredDuringSchedulingIgnoredDuringExecution硬规则必须满足指定的规则调度器才可以调度Pod至Node上类似nodeSelector语法不同。preferredDuringSchedulingIgnoredDuringExecution软规则优先调度至满足的Node的节点但不强求多个优先级规则还可以设置权重值。Taints和Tolerations污点和容忍Taint使Node拒绝特定Pod运行Toleration为Pod的属性表示Pod能容忍运行标注了Taint的Node。25、简述Kubernetes初始化容器init containerinit container的运行方式与应用容器不同它们必须先于应用容器执行完成当设置了多个init container时将按顺序逐个运行并且只有前一个init container运行成功后才能运行后一个init container。当所有init container都成功运行后Kubernetes才会初始化Pod的各种信息并开始创建和运行应用容器。26、简述Kubernetes deployment升级过程初始创建Deployment时系统创建了一个ReplicaSet并按用户的需求创建了对应数量的Pod副本。当更新Deployment时系统创建了一个新的ReplicaSet并将其副本数量扩展到1然后将旧ReplicaSet缩减为2。之后系统继续按照相同的更新策略对新旧两个ReplicaSet进行逐个调整。最后新的ReplicaSet运行了对应个新版本Pod副本旧的ReplicaSet副本数量则缩减为0。27、简述Kubernetes deployment升级策略在Deployment的定义中可以通过spec.strategy指定Pod更新的策略目前支持两种策略Recreate重建和RollingUpdate滚动更新默认值为RollingUpdate。Recreate设置spec.strategy.typeRecreate表示Deployment在更新Pod时会先杀掉所有正在运行的Pod然后创建新的Pod。RollingUpdate设置spec.strategy.typeRollingUpdate表示Deployment会以滚动更新的方式来逐个更新Pod。同时可以通过设置spec.strategy.rollingUpdate下的两个参数maxUnavailable和maxSurge来控制滚动更新的过程。28、简述Kubernetes DaemonSet类型的资源特性DaemonSet资源对象会在每个Kubernetes集群中的节点上运行并且每个节点只能运行一个Pod这是它和Deployment资源对象的最大也是唯一的区别。因此在定义yaml文件中不支持定义replicas。它的一般使用场景如下在去做每个节点的日志收集工作。监控每个节点的的运行状态。29、简述Kubernetes自动扩容机制Kubernetes使用Horizontal Pod AutoscalerHPA的控制器实现基于CPU使用率进行自动Pod扩缩容的功能。HPA控制器周期性地监测目标Pod的资源性能指标并与HPA资源对象中的扩缩容条件进行对比在满足条件时对Pod副本数量进行调整。Kubernetes中的某个Metrics ServerHeapster或自定义Metrics Server持续采集所有Pod副本的指标数据。HPA控制器通过Metrics Server的APIHeapster的API或聚合API获取这些数据基于用户定义的扩缩容规则进行计算得到目标Pod副本数量。当目标Pod副本数量与当前副本数量不同时HPA控制器就向Pod的副本控制器Deployment、RC或ReplicaSet发起scale操作调整Pod的副本数量完成扩缩容操作。30、简述Kubernetes Service类型通过创建Service可以为一组具有相同功能的容器应用提供一个统一的入口地址并且将请求负载分发到后端的各个容器应用上。其主要类型有ClusterIP虚拟的服务IP地址该地址用于Kubernetes集群内部的Pod访问在Node上kube-proxy通过设置的iptables规则进行转发NodePort使用宿主机的端口使能够访问各Node的外部客户端通过Node的IP地址和端口号就能访问服务LoadBalancer使用外接负载均衡器完成到服务的负载分发需要在spec.status.loadBalancer字段指定外部负载均衡器的IP地址通常用于公有云。31、简述Kubernetes Service分发后端的策略Service负载分发的策略有RoundRobin和SessionAffinityRoundRobin默认为轮询模式即轮询将请求转发到后端的各个Pod上。SessionAffinity基于客户端IP地址进行会话保持的模式即第1次将某个客户端发起的请求转发到后端的某个Pod上之后从相同的客户端发起的请求都将被转发到后端相同的Pod上。32、简述Kubernetes Headless Service在某些应用场景中若需要人为指定负载均衡器不使用Service提供的默认负载均衡的功能或者应用程序希望知道属于同组服务的其他实例。Kubernetes提供了Headless Service来实现这种功能即不为Service设置ClusterIP入口IP地址仅通过Label Selector将后端的Pod列表返回给调用的客户端。33、简述Kubernetes外部如何访问集群内的服务对于Kubernetes集群外的客户端默认情况无法通过Pod的IP地址或者Service的虚拟IP地址虚拟端口号进行访问。通常可以通过以下方式进行访问Kubernetes集群内的服务映射Pod到物理机将Pod端口号映射到宿主机即在Pod中采用hostPort方式以使客户端应用能够通过物理机访问容器应用。映射Service到物理机将Service端口号映射到宿主机即在Service中采用nodePort方式以使客户端应用能够通过物理机访问容器应用。映射Sercie到LoadBalancer通过设置LoadBalancer映射到云服务商提供的LoadBalancer地址。这种用法仅用于在公有云服务提供商的云平台上设置Service的场景。34、简述Kubernetes ingressKubernetes的Ingress资源对象用于将不同URL的访问请求转发到后端不同的Service以实现HTTP层的业务路由机制。Kubernetes使用了Ingress策略和Ingress Controller两者结合并实现了一个完整的Ingress负载均衡器。使用Ingress进行负载分发时Ingress Controller基于Ingress规则将客户端请求直接转发到Service对应的后端EndpointPod上从而跳过kube-proxy的转发功能kube-proxy不再起作用全过程为ingress controller ingress 规则 —- services。同时当Ingress Controller提供的是对外服务则实际上实现的是边缘路由器的功能。35、简述Kubernetes镜像的下载策略Kubernetes的镜像下载策略有三种Always、Never、IFNotPresent。Always镜像标签为latest时总是从指定的仓库中获取镜像。Never禁止从仓库中下载镜像也就是说只能使用本地镜像。IfNotPresent仅当本地没有对应镜像时才从目标仓库中下载。默认的镜像下载策略是当镜像标签是latest时默认策略是Always当镜像标签是自定义时也就是标签不是latest那么默认策略是IfNotPresent。36、简述Kubernetes的负载均衡器负载均衡器是暴露服务的最常见和标准方式之一。根据工作环境使用两种类型的负载均衡器即内部负载均衡器或外部负载均衡器。内部负载均衡器自动平衡负载并使用所需配置分配容器而外部负载均衡器将流量从外部负载引导至后端容器。37、简述Kubernetes各模块如何与API Server通信Kubernetes API Server作为集群的核心负责集群各功能模块之间的通信。集群内的各个功能模块通过API Server将信息存入etcd当需要获取和操作这些数据时则通过API Server提供的REST接口用GET、LIST或WATCH方法来实现从而实现各模块之间的信息交互。如kubelet进程与API Server的交互每个Node上的kubelet每隔一个时间周期就会调用一次API Server的REST接口报告自身状态API Server在接收到这些信息后会将节点状态信息更新到etcd中。如kube-controller-manager进程与API Server的交互kube-controller-manager中的Node Controller模块通过API Server提供的Watch接口实时监控Node的信息并做相应处理。如kube-scheduler进程与API Server的交互Scheduler通过API Server的Watch接口监听到新建Pod副本的信息后会检索所有符合该Pod要求的Node列表开始执行Pod调度逻辑在调度成功后将Pod绑定到目标节点上。38、简述Kubernetes Scheduler作用及实现原理Kubernetes Scheduler是负责Pod调度的重要功能模块Kubernetes Scheduler在整个系统中承担了“承上启下”的重要功能“承上”是指它负责接收Controller Manager创建的新Pod为其调度至目标Node“启下”是指调度完成后目标Node上的kubelet服务进程接管后继工作负责Pod接下来生命周期。Kubernetes Scheduler的作用是将待调度的PodAPI新创建的Pod、Controller Manager为补足副本而创建的Pod等按照特定的调度算法和调度策略绑定Binding到集群中某个合适的Node上并将绑定信息写入etcd中。在整个调度过程中涉及三个对象分别是待调度Pod列表、可用Node列表以及调度算法和策略。Kubernetes Scheduler通过调度算法调度为待调度Pod列表中的每个Pod从Node列表中选择一个最适合的Node来实现Pod的调度。随后目标节点上的kubelet通过API Server监听到Kubernetes Scheduler产生的Pod绑定事件然后获取对应的Pod清单下载Image镜像并启动容器。39、简述Kubernetes Scheduler使用哪两种算法将Pod绑定到worker节点Kubernetes Scheduler根据如下两种调度算法将 Pod 绑定到最合适的工作节点预选Predicates输入是所有节点输出是满足预选条件的节点。kube-scheduler根据预选策略过滤掉不满足策略的Nodes。如果某节点的资源不足或者不满足预选策略的条件则无法通过预选。如“Node的label必须与Pod的Selector一致”。优选Priorities输入是预选阶段筛选出的节点优选会根据优先策略为通过预选的Nodes进行打分排名选择得分最高的Node。例如资源越富裕、负载越小的Node可能具有越高的排名。40、简述Kubernetes kubelet的作用在Kubernetes集群中在每个Node又称Worker上都会启动一个kubelet服务进程。该进程用于处理Master下发到本节点的任务管理Pod及Pod中的容器。每个kubelet进程都会在API Server上注册节点自身的信息定期向Master汇报节点资源的使用情况并通过cAdvisor监控容器和节点资源。41、简述Kubernetes kubelet监控Worker节点资源是使用什么组件来实现的kubelet使用cAdvisor对worker节点资源进行监控。在Kubernetes系统中cAdvisor已被默认集成到kubelet组件内当kubelet服务启动时它会自动启动cAdvisor服务然后cAdvisor会实时采集所在节点的性能指标及在节点上运行的容器的性能指标。42、简述Kubernetes如何保证集群的安全性Kubernetes通过一系列机制来实现集群的安全控制主要有如下不同的维度基础设施方面保证容器与其所在宿主机的隔离权限方面最小权限原则合理限制所有组件的权限确保组件只执行它被授权的行为通过限制单个组件的能力来限制它的权限范围。用户权限划分普通用户和管理员的角色。集群方面API Server的认证授权Kubernetes集群中所有资源的访问和变更都是通过Kubernetes API Server来实现的因此需要建议采用更安全的HTTPS或Token来识别和认证客户端身份Authentication以及随后访问权限的授权Authorization环节。API Server的授权管理通过授权策略来决定一个API调用是否合法。对合法用户进行授权并且随后在用户访问时进行鉴权建议采用更安全的RBAC方式来提升集群安全授权。敏感数据引入Secret机制对于集群敏感数据建议使用Secret方式进行保护。AdmissionControl准入机制对kubernetes api的请求过程中顺序为先经过认证 授权然后执行准入操作最后对目标对象进行操作。43、简述Kubernetes准入机制在对集群进行请求时每个准入控制代码都按照一定顺序执行。如果有一个准入控制拒绝了此次请求那么整个请求的结果将会立即返回并提示用户相应的error信息。准入控制AdmissionControl准入控制本质上为一段准入代码在对kubernetes api的请求过程中顺序为先经过认证 授权然后执行准入操作最后对目标对象进行操作。常用组件控制代码如下AlwaysAdmit允许所有请求AlwaysDeny禁止所有请求多用于测试环境。ServiceAccount它将serviceAccounts实现了自动化它会辅助serviceAccount做一些事情比如如果pod没有serviceAccount属性它会自动添加一个default并确保pod的serviceAccount始终存在。LimitRanger观察所有的请求确保没有违反已经定义好的约束条件这些条件定义在namespace中LimitRange对象中。NamespaceExists观察所有的请求如果请求尝试创建一个不存在的namespace则这个请求被拒绝。44、简述Kubernetes RBAC及其特点优势RBAC是基于角色的访问控制是一种基于个人用户的角色来管理对计算机或网络资源的访问的方法。相对于其他授权模式RBAC具有如下优势对集群中的资源和非资源权限均有完整的覆盖。整个RBAC完全由几个API对象完成 同其他API对象一样 可以用kubectl或API进行操作。可以在运行时进行调整无须重新启动API Server。45、简述Kubernetes Secret作用Secret对象主要作用是保管私密数据比如密码、OAuth Tokens、SSH Keys等信息。将这些私密信息放在Secret对象中比直接放在Pod或Docker Image中更安全也更便于使用和分发。46、简述Kubernetes Secret有哪些使用方式创建完secret之后可通过如下三种方式使用在创建Pod时通过为Pod指定Service Account来自动使用该Secret。通过挂载该Secret到Pod来使用它。在Docker镜像下载时使用通过指定Pod的spc.ImagePullSecrets来引用它。47、简述Kubernetes PodSecurityPolicy机制Kubernetes PodSecurityPolicy是为了更精细地控制Pod对资源的使用方式以及提升安全策略。在开启PodSecurityPolicy准入控制器后Kubernetes默认不允许创建任何Pod需要创建PodSecurityPolicy策略和相应的RBAC授权策略Authorizing PoliciesPod才能创建成功。48、简述Kubernetes PodSecurityPolicy机制能实现哪些安全策略在PodSecurityPolicy对象中可以设置不同字段来控制Pod运行时的各种安全策略常见的有特权模式privileged是否允许Pod以特权模式运行。宿主机资源控制Pod对宿主机资源的控制如hostPID是否允许Pod共享宿主机的进程空间。用户和组设置运行容器的用户ID范围或组范围。提升权限AllowPrivilegeEscalation设置容器内的子进程是否可以提升权限通常在设置非root用户MustRunAsNonRoot时进行设置。SELinux进行SELinux的相关配置。49、简述Kubernetes网络模型Kubernetes网络模型中每个Pod都拥有一个独立的IP地址并假定所有Pod都在一个可以直接连通的、扁平的网络空间中。所以不管它们是否运行在同一个Node宿主机中都要求它们可以直接通过对方的IP进行访问。设计这个原则的原因是用户不需要额外考虑如何建立Pod之间的连接也不需要考虑如何将容器端口映射到主机端口等问题。同时为每个Pod都设置一个IP地址的模型使得同一个Pod内的不同容器会共享同一个网络命名空间也就是同一个Linux网络协议栈。这就意味着同一个Pod内的容器可以通过localhost来连接对方的端口。在Kubernetes的集群里IP是以Pod为单位进行分配的。一个Pod内部的所有容器共享一个网络堆栈相当于一个网络命名空间它们的IP地址、网络设备、配置等都是共享的。50、简述Kubernetes CNI模型CNI提供了一种应用容器的插件化网络解决方案定义对容器网络进行操作和配置的规范通过插件的形式对CNI接口进行实现。CNI仅关注在创建容器时分配网络资源和在销毁容器时删除网络资源。在CNI模型中只涉及两个概念容器和网络。容器Container是拥有独立Linux网络命名空间的环境例如使用Docker或rkt创建的容器。容器需要拥有自己的Linux网络命名空间这是加入网络的必要条件。网络Network表示可以互连的一组实体这些实体拥有各自独立、唯一的IP地址可以是容器、物理机或者其他网络设备比如路由器等。对容器网络的设置和操作都通过插件Plugin进行具体实现CNI插件包括两种类型CNI Plugin和IPAMIP Address ManagementPlugin。CNI Plugin负责为容器配置网络资源IPAM Plugin负责对容器的IP地址进行分配和管理。IPAM Plugin作为CNI Plugin的一部分与CNI Plugin协同工作。51、简述Kubernetes网络策略为实现细粒度的容器间网络访问隔离策略Kubernetes引入Network Policy。Network Policy的主要功能是对Pod间的网络通信进行限制和准入控制设置允许访问或禁止访问的客户端Pod列表。Network Policy定义网络策略配合策略控制器Policy Controller进行策略的实现。52、简述Kubernetes网络策略原理Network Policy的工作原理主要为policy controller需要实现一个API Listener监听用户设置的Network Policy定义并将网络访问规则通过各Node的Agent进行实际设置Agent则需要通过CNI网络插件实现。53、简述Kubernetes中flannel的作用Flannel可以用于Kubernetes底层网络的实现主要作用有它能协助Kubernetes给每一个Node上的Docker容器都分配互相不冲突的IP地址。它能在这些IP地址之间建立一个覆盖网络Overlay Network通过这个覆盖网络将数据包原封不动地传递到目标容器内。54、简述Kubernetes Calico网络组件实现原理Calico是一个基于BGP的纯三层的网络方案与OpenStack、Kubernetes、AWS、GCE等云平台都能够良好地集成。Calico在每个计算节点都利用Linux Kernel实现了一个高效的vRouter来负责数据转发。每个vRouter都通过BGP协议把在本节点上运行的容器的路由信息向整个Calico网络广播并自动设置到达其他节点的路由转发规则。Calico保证所有容器之间的数据流量都是通过IP路由的方式完成互联互通的。Calico节点组网时可以直接利用数据中心的网络结构L2或者L3不需要额外的NAT、隧道或者Overlay Network没有额外的封包解包能够节约CPU运算提高网络效率。55、简述Kubernetes共享存储的作用Kubernetes对于有状态的容器应用或者对数据需要持久化的应用因此需要更加可靠的存储来保存应用产生的重要数据以便容器应用在重建之后仍然可以使用之前的数据。因此需要使用共享存储。56、简述Kubernetes数据持久化的方式有哪些Kubernetes通过数据持久化来持久化保存重要数据常见的方式有EmptyDir空目录没有指定要挂载宿主机上的某个目录直接由Pod内保部映射到宿主机上。类似于docker中的manager volume。场景只需要临时将数据保存在磁盘上比如在合并/排序算法中作为两个容器的共享存储。特性同个pod里面的不同容器共享同一个持久化目录当pod节点删除时volume的数据也会被删除。emptyDir的数据持久化的生命周期和使用的pod一致一般是作为临时存储使用。Hostpath将宿主机上已存在的目录或文件挂载到容器内部。类似于docker中的bind mount挂载方式。特性增加了Pod与节点之间的耦合。PersistentVolume简称PV如基于NFS服务的PV也可以基于GFS的PV。它的作用是统一数据持久化目录方便管理。57、简述Kubernetes PV和PVCPV是对底层网络共享存储的抽象将共享存储定义为一种“资源”。PVC则是用户对存储资源的一个“申请”。58、简述Kubernetes PV生命周期内的阶段某个PV在生命周期中可能处于以下4个阶段Phaes之一。Available可用状态还未与某个PVC绑定。Bound已与某个PVC绑定。Released绑定的PVC已经删除资源已释放但没有被集群回收。Failed自动资源回收失败。59、简述Kubernetes所支持的存储供应模式Kubernetes支持两种资源的存储供应模式静态模式Static和动态模式Dynamic。静态模式集群管理员手工创建许多PV在定义PV时需要将后端存储的特性进行设置。动态模式集群管理员无须手工创建PV而是通过StorageClass的设置对后端存储进行描述标记为某种类型。此时要求PVC对存储的类型进行声明系统将自动完成PV的创建及与PVC的绑定。60、简述Kubernetes CSI模型Kubernetes CSI是Kubernetes推出与容器对接的存储接口标准存储提供方只需要基于标准接口进行存储插件的实现就能使用Kubernetes的原生存储机制为容器提供存储服务。CSI使得存储提供方的代码能和Kubernetes代码彻底解耦部署也与Kubernetes核心组件分离显然存储插件的开发由提供方自行维护就能为Kubernetes用户提供更多的存储功能也更加安全可靠。CSI包括CSI Controller和CSI NodeCSI Controller的主要功能是提供存储服务视角对存储资源和存储卷进行管理和操作。CSI Node的主要功能是对主机Node上的Volume进行管理和操作。61、简述Kubernetes Worker节点加入集群的过程通常需要对Worker节点进行扩容从而将应用系统进行水平扩展。主要过程如下在该Node上安装Docker、kubelet和kube-proxy服务然后配置kubelet和kubeproxy的启动参数将Master URL指定为当前Kubernetes集群Master的地址最后启动这些服务通过kubelet默认的自动注册机制新的Worker将会自动加入现有的Kubernetes集群中Kubernetes Master在接受了新Worker的注册之后会自动将其纳入当前集群的调度范围。62、简述Kubernetes Pod如何实现对节点的资源控制Kubernetes集群里的节点提供的资源主要是计算资源计算资源是可计量的能被申请、分配和使用的基础资源。当前Kubernetes集群中的计算资源主要包括CPU、GPU及Memory。CPU与Memory是被Pod使用的因此在配置Pod时可以通过参数CPU Request及Memory Request为其中的每个容器指定所需使用的CPU与Memory量Kubernetes会根据Request的值去查找有足够资源的Node来调度此Pod。通常一个程序所使用的CPU与Memory是一个动态的量确切地说是一个范围跟它的负载密切相关负载增加时CPU和Memory的使用量也会增加。63、简述Kubernetes Requests和Limits如何影响Pod的调度当一个Pod创建成功时Kubernetes调度器Scheduler会为该Pod选择一个节点来执行。对于每种计算资源CPU和Memory而言每个节点都有一个能用于运行Pod的最大容量值。调度器在调度时首先要确保调度后该节点上所有Pod的CPU和内存的Requests总和不超过该节点能提供给Pod使用的CPU和Memory的最大容量值。64、简述Kubernetes Metric Service在Kubernetes从1.10版本后采用Metrics Server作为默认的性能数据采集和监控主要用于提供核心指标Core Metrics包括Node、Pod的CPU和内存使用指标。对其他自定义指标Custom Metrics的监控则由Prometheus等组件来完成。65、简述Kubernetes中如何使用EFK实现日志的统一管理在Kubernetes集群环境中通常一个完整的应用或服务涉及组件过多建议对日志系统进行集中化管理通常采用EFK实现。EFK是 Elasticsearch、Fluentd 和 Kibana 的组合其各组件功能如下Elasticsearch是一个搜索引擎负责存储日志并提供查询接口Fluentd负责从 Kubernetes 搜集日志每个Node节点上面的Fluentd监控并收集该节点上面的系统日志并将处理过后的日志信息发送给ElasticsearchKibana提供了一个 Web GUI用户可以浏览和搜索存储在 Elasticsearch 中的日志。通过在每台Node上部署一个以DaemonSet方式运行的Fluentd来收集每台Node上的日志。Fluentd将Docker日志目录/var/lib/docker/containers和/var/log目录挂载到Pod中然后Pod会在Node节点的/var/log/pods目录中创建新的目录可以区别不同的容器日志输出该目录下有一个日志文件链接到/var/lib/docker/contianers目录下的容器日志输出。66、简述Kubernetes如何进行优雅的节点关机维护由于Kubernetes节点运行大量Pod因此在进行关机维护之前建议先使用kubectl drain将该节点的Pod进行驱逐然后进行关机维护。67、简述Kubernetes集群联邦Kubernetes集群联邦可以将多个Kubernetes集群作为一个集群进行管理。因此可以在一个数据中心/云中创建多个Kubernetes集群并使用集群联邦在一个地方控制/管理所有集群。68、简述Helm及其优势Helm是Kubernetes的软件包管理工具。类似Ubuntu中使用的APT、CentOS中使用的yum 或者Python中的 pip 一样。Helm能够将一组Kubernetes资源打包统一管理, 是查找、共享和使用为Kubernetes构建的软件的最佳方式。Helm中通常每个包称为一个Chart一个Chart是一个目录一般情况下会将目录进行打包压缩形成name-version.tgz格式的单一文件方便传输和存储。在Kubernetes中部署一个可以使用的应用需要涉及到很多的 Kubernetes 资源的共同协作。使用Helm则具有如下优势统一管理、配置和更新这些分散的Kubernetes的应用资源文件分发和复用一套应用模板将应用的一系列资源当做一个软件包管理。对于应用发布者而言可以通过 Helm 打包应用、管理应用依赖关系、管理应用版本并发布应用到软件仓库。对于使用者而言使用Helm后不用需要编写复杂的应用部署文件可以以简单的方式在Kubernetes上查找、安装、升级、回滚、卸载应用程序。69、k8s是什么请说出你的了解答Kubenetes是一个针对容器应用进行自动部署弹性伸缩和管理的开源系统。主要功能是生产环境中的容器编排。K8S是Google公司推出的它来源于由Google公司内部使用了15年的Borg系统集结了Borg的精华。70、K8s架构的组成是什么答和大多数分布式系统一样K8S集群至少需要一个主节点Master和多个计算节点Node。主节点主要用于暴露API调度部署和节点的管理计算节点运行一个容器运行环境一般是docker环境类似docker环境的还有rkt同时运行一个K8s的代理kubelet用于和master通信。计算节点也会运行一些额外的组件像记录日志节点监控服务发现等等。计算节点是k8s集群中真正工作的节点。K8S架构细分1、Master节点默认不参加实际工作Kubectl客户端命令行工具作为整个K8s集群的操作入口Api Server在K8s架构中承担的是“桥梁”的角色作为资源操作的唯一入口它提供了认证、授权、访问控制、API注册和发现等机制。客户端与k8s群集及K8s内部组件的通信都要通过Api Server这个组件Controller-manager负责维护群集的状态比如故障检测、自动扩展、滚动更新等Scheduler负责资源的调度按照预定的调度策略将pod调度到相应的node节点上Etcd担任数据中心的角色保存了整个群集的状态2、Node节点Kubelet负责维护容器的生命周期同时也负责Volume和网络的管理一般运行在所有的节点是Node节点的代理当Scheduler确定某个node上运行pod之后会将pod的具体信息imagevolume等发送给该节点的kubeletkubelet根据这些信息创建和运行容器并向master返回运行状态。自动修复功能如果某个节点中的容器宕机它会尝试重启该容器若重启无效则会将该pod杀死然后重新创建一个容器Kube-proxyService在逻辑上代表了后端的多个pod。负责为Service提供cluster内部的服务发现和负载均衡外界通过Service访问pod提供的服务时Service接收到的请求后就是通过kube-proxy来转发到pod上的container-runtime是负责管理运行容器的软件比如dockerPod是k8s集群里面最小的单位。每个pod里边可以运行一个或多个container容器如果一个pod中有两个container那么container的USR用户、MNT挂载点、PID进程号是相互隔离的UTS主机名和域名、IPC消息队列、NET网络栈是相互共享的。我比较喜欢把pod来当做豌豆夹而豌豆就是pod中的container71、容器和主机部署应用的区别是什么答容器的中心思想就是秒级启动一次封装、到处运行这是主机部署应用无法达到的效果但同时也更应该注重容器的数据持久化问题。另外容器部署可以将各个服务进行隔离互不影响这也是容器的另一个核心概念。72、请你说一下kubenetes针对pod资源对象的健康监测机制答K8s中对于pod资源对象的健康状态检测提供了三类probe探针来执行对pod的健康监测1 livenessProbe探针可以根据用户自定义规则来判定pod是否健康如果livenessProbe探针探测到容器不健康则kubelet会根据其重启策略来决定是否重启如果一个容器不包含livenessProbe探针则kubelet会认为容器的livenessProbe探针的返回值永远成功。2 ReadinessProbe探针同样是可以根据用户自定义规则来判断pod是否健康如果探测失败控制器会将此pod从对应service的endpoint列表中移除从此不再将任何请求调度到此Pod上直到下次探测成功。3 startupProbe探针启动检查机制应用一些启动缓慢的业务避免业务长时间启动而被上面两类探针kill掉这个问题也可以换另一种方式解决就是定义上面两类探针机制时初始化时间定义的长一些即可。每种探测方法能支持以下几个相同的检查参数用于设置控制检查时间initialDelaySeconds初始第一次探测间隔用于应用启动的时间防止应用还没启动而健康检查失败periodSeconds检查间隔多久执行probe检查默认为10stimeoutSeconds检查超时时长探测应用timeout后为失败successThreshold成功探测阈值表示探测多少次为健康正常默认探测1次。上面两种探针都支持以下三种探测方法1Exec通过执行命令的方式来检查服务是否正常比如使用cat命令查看pod中的某个重要配置文件是否存在若存在则表示pod健康。反之异常。Exec探测方式的yaml文件语法如下spec:containers:- name: livenessimage: k8s.gcr.io/busyboxargs:- /bin/sh- -c- touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600livenessProbe: #选择livenessProbe的探测机制exec: #执行以下命令command:- cat- /tmp/healthyinitialDelaySeconds: 5 #在容器运行五秒后开始探测periodSeconds: 5 #每次探测的时间间隔为5秒在上面的配置文件中探测机制为在容器运行5秒后每隔五秒探测一次如果cat命令返回的值为“0”则表示健康如果为非0则表示异常。2Httpget通过发送http/htps请求检查服务是否正常返回的状态码为200-399则表示容器健康注http get类似于命令curl -I。Httpget探测方式的yaml文件语法如下spec:containers:- name: livenessimage: k8s.gcr.io/livenesslivenessProbe: #采用livenessProbe机制探测httpGet: #采用httpget的方式scheme:HTTP #指定协议也支持httpspath: /healthz #检测是否可以访问到网页根目录下的healthz网页文件port: 8080 #监听端口是8080initialDelaySeconds: 3 #容器运行3秒后开始探测periodSeconds: 3 #探测频率为3秒上述配置文件中探测方式为项容器发送HTTP GET请求请求的是8080端口下的healthz文件返回任何大于或等于200且小于400的状态码表示成功。任何其他代码表示异常。3tcpSocket通过容器的IP和Port执行TCP检查如果能够建立TCP连接则表明容器健康这种方式与HTTPget的探测机制有些类似tcpsocket健康检查适用于TCP业务。tcpSocket探测方式的yaml文件语法如下spec:containers:- name: goproxyimage: k8s.gcr.io/goproxy:0.1ports:
- containerPort: 8080
#这里两种探测机制都用上了都是为了和容器的8080端口建立TCP连接readinessProbe:tcpSocket:port: 8080initialDelaySeconds: 5periodSeconds: 10livenessProbe:tcpSocket:port: 8080initialDelaySeconds: 15periodSeconds: 20在上述的yaml配置文件中两类探针都使用了在容器启动5秒后kubelet将发送第一个readinessProbe探针这将连接容器的8080端口如果探测成功则该pod为健康十秒后kubelet将进行第二次连接。除了readinessProbe探针外在容器启动15秒后kubelet将发送第一个livenessProbe探针仍然尝试连接容器的8080端口如果连接失败则重启容器。探针探测的结果无外乎以下三者之一SuccessContainer通过了检查FailureContainer没有通过检查Unknown没有执行检查因此不采取任何措施通常是我们没有定义探针检测默认为成功。若觉得上面还不够透彻可以移步其官网文档https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/73、如何控制滚动更新过程答可以通过下面的命令查看到更新时可以控制的参数[rootmaster yaml]# kubectl explain deploy.spec.strategy.rollingUpdatemaxSurge 此参数控制滚动更新过程副本总数超过预期pod数量的上限。可以是百分比也可以是具体的值。默认为1。上述参数的作用就是在更新过程中值若为3那么不管三七二一先运行三个pod用于替换旧的pod以此类推maxUnavailable此参数控制滚动更新过程中不可用的Pod的数量。这个值和上面的值没有任何关系举个例子我有十个pod但是在更新的过程中我允许这十个pod中最多有三个不可用那么就将这个参数的值设置为3在更新的过程中只要不可用的pod数量小于或等于3那么更新过程就不会停止。74、K8s中镜像的下载策略是什么答可通过命令“kubectl explain pod.spec.containers”来查看imagePullPolicy这行的解释。K8s的镜像下载策略有三种Always、Never、IFNotPresentAlways镜像标签为latest时总是从指定的仓库中获取镜像Never禁止从仓库中下载镜像也就是说只能使用本地镜像IfNotPresent仅当本地没有对应镜像时才从目标仓库中下载。默认的镜像下载策略是当镜像标签是latest时默认策略是Always当镜像标签是自定义时也就是标签不是latest那么默认策略是IfNotPresent。75、image的状态有哪些RunningPod所需的容器已经被成功调度到某个节点且已经成功运行PendingAPIserver创建了pod资源对象并且已经存入etcd中但它尚未被调度完成或者仍然处于仓库中下载镜像的过程UnknownAPIserver无法正常获取到pod对象的状态通常是其无法与所在工作节点的kubelet通信所致。76、pod的重启策略是什么答可以通过命令“kubectl explain pod.spec”查看pod的重启策略。restartPolicy字段Always但凡pod对象终止就重启此为默认策略。OnFailure仅在pod对象出现错误时才重启77、Service这种资源对象的作用是什么答用来给相同的多个pod对象提供一个固定的统一访问接口常用于服务发现和服务访问。78、版本回滚相关的命令[rootmaster httpd-web]# kubectl apply -f httpd2-deploy1.yaml –record #运行yaml文件并记录版本信息[rootmaster httpd-web]# kubectl rollout history deployment httpd-devploy1 #查看该deployment的历史版本[rootmaster httpd-web]# kubectl rollout undo deployment httpd-devploy1 –to-revision1 #执行回滚操作指定回滚到版本1#在yaml文件的spec字段中可以写以下选项用于限制最多记录多少个历史版本spec: revisionHistoryLimit: 5 #这个字段通过 kubectl explain deploy.spec 命令找到revisionHistoryLimit integer行获得79、标签与标签选择器的作用是什么标签是当相同类型的资源对象越来越多的时候为了更好的管理可以按照标签将其分为一个组为的是提升资源对象的管理效率。标签选择器就是标签的查询过滤条件。目前API支持两种标签选择器基于等值关系的如“”、“”“”、“”注“”也是等于的意思yaml文件中的matchLabels字段基于集合的如in、notin、existsyaml文件中的matchExpressions字段注in:在这个集合中notin不在这个集合中exists要么全在exists这个集合中要么都不在notexists使用标签选择器的操作逻辑在使用基于集合的标签选择器同时指定多个选择器之间的逻辑关系为“与”操作比如- {key: name,operator: In,values: [zhangsan,lisi]} 那么只要拥有这两个值的资源都会被选中使用空值的标签选择器意味着每个资源对象都被选中如标签选择器的键是“A”两个资源对象同时拥有A这个键但是值不一样这种情况下如果使用空值的标签选择器那么将同时选中这两个资源对象空的标签选择器注意不是上面说的空值而是空的都没有定义键的名称将无法选择出任何资源在基于集合的选择器中使用“In”或者“Notin”操作时其values可以为空但是如果为空这个标签选择器就没有任何意义了。两种标签选择器类型基于等值、基于集合的书写方法selector:matchLabels: #基于等值app: nginxmatchExpressions: #基于集合- {key: name,operator: In,values: [zhangsan,lisi]} #key、operator、values这三个字段是固定的- {key: age,operator: Exists,values:} #如果指定为exists那么values的值一定要为空80、常用的标签分类有哪些标签分类是可以自定义的但是为了能使他人可以达到一目了然的效果一般会使用以下一些分类版本类标签releasestable稳定版、canary金丝雀版本可以将其称之为测试版中的测试版、beta测试版环境类标签environmentdev开发、qa测试、production生产、op运维应用类appui、as、pc、sc架构类tierfrontend前端、backend后端、cache缓存分区标签partitioncustomerA客户A、customerB客户B品控级别Trackdaily每天、weekly每周。81、有几种查看标签的方式答常用的有以下三种查看方式[rootmaster ~]# kubectl get pod –show-labels #查看pod并且显示标签内容
[rootmaster ~]# kubectl get pod -L env,tier #显示资源对象标签的值
[rootmaster ~]# kubectl get pod -l env,tier #只显示符合键值资源对象的pod而“-L”是显示所有的pod82、添加、修改、删除标签的命令#对pod标签的操作
[rootmaster ~]# kubectl label pod label-pod abc123 #给名为label-pod的pod添加标签
[rootmaster ~]# kubectl label pod label-pod abc456 –overwrite #修改名为label-pod的标签
[rootmaster ~]# kubectl label pod label-pod abc- #删除名为label-pod的标签
[rootmaster ~]# kubectl get pod –show-labels#对node节点的标签操作
[rootmaster ~]# kubectl label nodes node01 diskssd #给节点node01添加disk标签 [rootmaster ~]# kubectl label nodes node01 disksss –overwrite #修改节点node01的标签 [rootmaster ~]# kubectl label nodes node01 disk- #删除节点node01的disk标签83、DaemonSet资源对象的特性DaemonSet这种资源对象会在每个k8s集群中的节点上运行并且每个节点只能运行一个pod这是它和deployment资源对象的最大也是唯一的区别。所以在其yaml文件中不支持定义replicas除此之外与Deployment、RS等资源对象的写法相同。它的一般使用场景如下在去做每个节点的日志收集工作监控每个节点的的运行状态84、说说你对Job这种资源对象的了解答Job与其他服务类容器不同Job是一种工作类容器一般用于做一次性任务。使用常见不多可以忽略这个问题。#提高Job执行效率的方法 spec:parallelism: 2 #一次运行2个completions: 8 #最多运行8个template: metadata:85、描述一下pod的生命周期有哪些状态Pending表示pod已经被同意创建正在等待kube-scheduler选择合适的节点创建一般是在准备镜像Running表示pod中所有的容器已经被创建并且至少有一个容器正在运行或者是正在启动或者是正在重启Succeeded表示所有容器已经成功终止并且不会再启动Failed表示pod中所有容器都是非0不正常状态退出Unknown表示无法读取Pod状态通常是kube-controller-manager无法与Pod通信。86、创建一个pod的流程是什么客户端提交Pod的配置信息可以是yaml文件定义好的信息到kube-apiserverApiserver收到指令后通知给controller-manager创建一个资源对象Controller-manager通过api-server将pod的配置信息存储到ETCD数据中心中Kube-scheduler检测到pod信息会开始调度预选会先过滤掉不符合Pod资源配置要求的节点然后开始调度调优主要是挑选出更适合运行pod的节点然后将pod的资源配置单发送到node节点上的kubelet组件上。Kubelet根据scheduler发来的资源配置单运行pod运行成功后将pod的运行信息返回给schedulerscheduler将返回的pod运行状况的信息存储到etcd数据中心。87、删除一个Pod会发生什么事情答Kube-apiserver会接受到用户的删除指令默认有30秒时间等待优雅退出超过30秒会被标记为死亡状态此时Pod的状态Terminatingkubelet看到pod标记为Terminating就开始了关闭Pod的工作关闭流程如下pod从service的endpoint列表中被移除如果该pod定义了一个停止前的钩子其会在pod内部被调用停止钩子一般定义了如何优雅的结束进程进程被发送TERM信号kill -14当超过优雅退出的时间后Pod中的所有进程都会被发送SIGKILL信号kill -9。88、K8s的Service是什么答Pod每次重启或者重新部署其IP地址都会产生变化这使得pod间通信和pod与外部通信变得困难这时候就需要Service为pod提供一个固定的入口。Service的Endpoint列表通常绑定了一组相同配置的pod通过负载均衡的方式把外界请求分配到多个pod上89、k8s是怎么进行服务注册的答Pod启动后会加载当前环境所有Service信息以便不同Pod根据Service名进行通信。90、k8s集群外流量怎么访问Pod答可以通过Service的NodePort方式访问会在所有节点监听同一个端口比如30000访问节点的流量会被重定向到对应的Service上面。91、k8s数据持久化的方式有哪些答1EmptyDir空目录没有指定要挂载宿主机上的某个目录直接由Pod内保部映射到宿主机上。类似于docker中的manager volume。主要使用场景只需要临时将数据保存在磁盘上比如在合并/排序算法中作为两个容器的共享存储使得第一个内容管理的容器可以将生成的数据存入其中同时由同一个webserver容器对外提供这些页面。emptyDir的特性同个pod里面的不同容器共享同一个持久化目录当pod节点删除时volume的数据也会被删除。如果仅仅是容器被销毁pod还在则不会影响volume中的数据。总结来说emptyDir的数据持久化的生命周期和使用的pod一致。一般是作为临时存储使用。2Hostpath将宿主机上已存在的目录或文件挂载到容器内部。类似于docker中的bind mount挂载方式。这种数据持久化方式运用场景不多因为它增加了pod与节点之间的耦合。一般对于k8s集群本身的数据持久化和docker本身的数据持久化会使用这种方式可以自行参考apiService的yaml文件位于/etc/kubernetes/main…目录下。3PersistentVolume简称PV基于NFS服务的PV也可以基于GFS的PV。它的作用是统一数据持久化目录方便管理。在一个PV的yaml文件中可以对其配置PV的大小指定PV的访问模式ReadWriteOnce只能以读写的方式挂载到单个节点ReadOnlyMany能以只读的方式挂载到多个节点ReadWriteMany能以读写的方式挂载到多个节点。以及指定pv的回收策略recycle清除PV的数据然后自动回收Retain需要手动回收delete删除云存储资源云存储专用PS这里的回收策略指的是在PV被删除后在这个PV下所存储的源文件是否删除。若需使用PV那么还有一个重要的概念PVCPVC是向PV申请应用所需的容量大小K8s集群中可能会有多个PVPVC和PV若要关联其定义的访问模式必须一致。定义的storageClassName也必须一致若群集中存在相同的名字、访问模式都一致两个PV那么PVC会选择向它所需容量接近的PV去申请或者随机申请。 陈高规格大太烦人和骨关节炎【-‘了跑’9iyt7y845er90
- 上一篇: 河北华宇建设集团有限公司网站网站宽屏版
- 下一篇: 河北建设厅安监站官方网站手机建立网站软件
相关文章
-
河北华宇建设集团有限公司网站网站宽屏版
河北华宇建设集团有限公司网站网站宽屏版
- 技术栈
- 2026年03月21日
-
河北邯郸手机网站建设欢乐海岸网站建设
河北邯郸手机网站建设欢乐海岸网站建设
- 技术栈
- 2026年03月21日
-
河北高端网站建设wordpress 下载站
河北高端网站建设wordpress 下载站
- 技术栈
- 2026年03月21日
-
河北建设厅安监站官方网站手机建立网站软件
河北建设厅安监站官方网站手机建立网站软件
- 技术栈
- 2026年03月21日
-
河北建设厅官方网站八大员考试seo学校培训课程
河北建设厅官方网站八大员考试seo学校培训课程
- 技术栈
- 2026年03月21日
-
河北建设厅身份认证锁登录网站做网站多少流量可以做广告
河北建设厅身份认证锁登录网站做网站多少流量可以做广告
- 技术栈
- 2026年03月21日
