热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

对k8s的相关知识

对k8s的相关知识1、k8s简介​Kubernetes简称k8s,是google公司用go语言开发的系统,是一个针对容器应用,进行自动

对k8s的相关知识


1、k8s简介

Kubernetes简称k8s,是google公司用go语言开发的系统,是一个针对容器应用,进行自动部署,弹性伸缩和管理的开源系统。主要功能是生产环境中的容器编排。


2、k8s架构的组成

在这里插入图片描述


大体架构

​ k8s集群至少需要一个主节点和多个计算节点


  1. 主节点用于暴露API,调度部署和节点管理
  2. 计算节点运行一个容器运行的环境,如docker,同时运行一个k8s代理(kubelet)用于和master通信,计算节点还运行一些额外的组件,像记录日志,节点监控,服务发现等等。是真正的工作节点

架构细分


master节点


  1. kubectl:客户端命令行工具,作为整个k8s集群的操作入口
  2. api server:作为资源的唯一入口,提供认证、授权、访问控制、API注册和发现等机制。客户端与k8s集群及k8s内部组件的通信,都要通过api server这个组件
  3. controller-manager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等
  4. scheduler:负责资源调度,按照预定的调度策略将pod调度到相应的node节点上
  5. etcd:担任数据中心的角色,保存了整个集群的状态

node节点


  1. kubelet:负责维护容器的生命周期、volume和网络管理,运行在node工作节点上。master的scheduler确定某个node要运行pod之后,将pod的具体信息(image,volume)等发送给该节点的kubelet,kubelet根据信息创建和运行容器,向master返回运行状态
  2. kube-proxy:负责为service提供cluster内部的服务发现和负载均衡(service接收到请求后通过kube-proxy转发到pod)
  3. container-runtime:是负责管理运行容器的软件,比如docker
  4. pod:k8s里面最小的单位,每个pod能运行一个或多个container,多个container的资源,如USER(用户)、MNT(挂载点)、PID(进程号)相互隔离。如UTS(主机名、域名),IPC(消息队列)、NET(网格栈)相互共享

3、容器和主机部署应用的区别

​ 容器的中心思想是秒级启动 ,一次封装、到处运行,主机部署无法达到这效果,但是容器部署要注意数据持久化问题。容器可以将各个服务进行隔离,互补影响


4、k8s对pod资源对象的监控检测机制

​ k8s提供三类probe(探针)来执行对pod的健康检测


  1. livenessProbe探针

    可以根据用户自定义的规则来判定pod是否健康,如果为不健康,kubelet会根据重启策略来决定是否重启。如果容器不包含livenessProbe探针,则总是认为是健康的

  2. readinessProbe探针

    可以根据用户自定义的规则来判定pod是否健康,如果为不健康,控制器将pod从对应service的endpoint列表中移除,从此不再将任何请求调度到该pod,直到下次探测成功

  3. startupProbe探针

    启动检测机制,应用一些启动缓慢的业务,避免业务长时间启动而被上面两类探针kill掉


5、控制滚动更新过程

通过以下命令查看更新时可以控制的参数:

kubectl explain deploy.spec.strategy.rollingUpdate

maxSurge:控制滚动更新过程,副本总数超过预期pod数量的上限,可以是百分比也可以是具体的值,默认是1

maxUnavailable:次参数控制滚动更新过程中,不可用的pod数量


6、k8s中镜像的下载策略

可以通过命令查看

kubectl explain pod.spec.containers

imagePullPolicy有以下三种


  1. Always:镜像标签为latest时,总是从指定仓库获取镜像
  2. Never:禁止从仓库下载镜像,只能使用本地镜像
  3. IfNotPresent:仅当本地没有相应镜像时,才从仓库下载

7、image的状态


  1. Running:pod所需要的容器已经被成功调度到某个节点,且已经成功运行
  2. Pending:api server创建了pod资源对象,并且已经存入etcd,但是它尚未被调度完成或仍然处于仓库的下载镜像过程中
  3. Unknown:api server无法正常获取到pod对象的状态,通常是api server无法和所在工作节点的kubelet通信所致

8、pod的重启策略

可以通过命令查看

kubectl explain pod.spec

restartPolicy重启策略有以下2种


  1. Always:pod对象终止就重启(默认)
  2. OnFailure:pod出现错误时重启

9、service的作用

给相同的多个pod对象提供一个固定的统一访问接口,常用于服务发现和服务访问,

pod每次重启或者重新部署,ip都会发生变化,使得pod之间通信和pod与外部通信变得困难,service就能定义一个统一固定的访问入口

service的endpoint列表通常绑定一组相同配置的pod,通过负载均衡把外界的请求分配到多个pod


10、版本回滚相关命令


  1. 运行yaml文件,并记录版本信息;

    kubectl apply -f httpd2-deploy1.yaml --record

  2. 查看该deployment的历史版本

    kubectl rollout history deployment httpd-devploy1

  3. 执行回滚操作,指定回滚到版本1

    kubectl rollout undo deployment httpd-devploy1 --to-revision=1

  4. 在yaml文件的spec字段中,可以写以下选项(用于限制最多记录多少个历史版本)

    spec:revisionHistoryLimit: 5


11、DaemonSet的特征

DaemonSet会在每个k8s集群中的节点上运行,并且每个节点只能运行一个pod,这是和deploymentSet最大的也是唯一的区别,在yaml文件中不支持replicas属性,除此之外和DeploymentSet的写法相同

使用场景


  1. 每个节点上的日志收集
  2. 监控每个节点的运行状态

12、job资源

job和其他服务类容器不同,job是一种工作类容器,一般做一次性任务,使用不多


13、pod生命周期


  1. pending:pod已经被同意创建,等待schedule选择合适的节点创建,一般在准备镜像

  2. running:pod中所有容器都被创建、并且至少一个容器正在运行或者正在启动或者正在重启

  3. succeeded:所有容器已经成功终止,并且不再启动

  4. failed:pod中所有容器都是非0(不正常)状态退出

  5. unknown:无法读取pod的状态,通常是controller-manager无法与pod通信


14、创建pod的流程


  1. kubectl客户端提交pod的配置信息(可以是yaml文件)到api server
  2. api server收到指令后,通知controller manager创建一个资源对象
  3. controller manager通过api server将pod的配置信息存储到etcd数据中心
  4. scheduler 检测到pod信息会开始调度预选,先过滤掉不符合pod资源配置要求的节点,然后开始调度调优,主要是挑选出更适合运行pod的节点,然后将pod的资源配置单发到node节点的kubelet组件上
  5. kubelet收到pod配置信息,创建并运行pod,运行成功后,将pod的运行信息返回给scheduler,scheduler将返回的pod运行状况信息存储到etcd数据中心

15、删除pod的流程

api server收到用户的删除指令,默认有30秒时间等待优雅退出,超过30秒会被标记为死亡状态,此时pod状态为Terminating,kubelet看到pod标记为Terminating就开始了关闭pod的工作

关闭流程


  1. pod从service的endpoint列表中被移除
  2. 如果该pod定义了一个停止前的钩子,会在pod内部调用
  3. 进程被发送TERM信号(kill -14)
  4. 当超过优雅退出时间后,pod中所有进程会被发送SIGKILL信号(kill -9)

16、服务注册

pod启动会加重当前环境所有的service信息,以便不同pod根据service名进行通信


17、k8s集群外流量访问pod

可以通过service的NodePort方式访问,会在所有节点监听同一个端口,访问的流量会被重定向到对应的service上面


18、k8s持久化方式


  1. EmptyDir(空目录):没有指定要挂载宿主机上的某个目录,直接由pod内部映射到宿主机上,类似docker的manager volume

  2. Hostpath:将宿主机上已经存在的目录或文件挂载到容器内部,类型docker中的bind mount挂载方式

  3. PersistentVolume:基于nfs服务的pv,也可以是基于gfs的pv,依赖文件系统,优点是统一数据持久化目录,方便管理


推荐阅读
  • Java虚拟机及其发展历程
    Java虚拟机(JVM)是每个Java开发者日常工作中不可或缺的一部分,但其背后的运作机制却往往显得神秘莫测。本文将探讨Java及其虚拟机的发展历程,帮助读者深入了解这一关键技术。 ... [详细]
  • 入门指南:使用FastRPC技术连接Qualcomm Hexagon DSP
    本文旨在为初学者提供关于如何使用FastRPC技术连接Qualcomm Hexagon DSP的基础知识。FastRPC技术允许开发者在本地客户端实现远程调用,从而简化Hexagon DSP的开发和调试过程。 ... [详细]
  • 检查 Kubernetes 系统命名空间中的 Pod 状态时,发现 Metric Server Pod 虽然处于运行状态,但存在异常:日志显示 'it doesn’t contain any IP SANs'。 ... [详细]
  • 在 Kubernetes 中,Pod 的调度通常由集群的自动调度策略决定,这些策略主要关注资源充足性和负载均衡。然而,在某些场景下,用户可能需要更精细地控制 Pod 的调度行为,例如将特定的服务(如 GitLab)部署到特定节点上,以提高性能或满足特定需求。本文深入解析了 Kubernetes 的亲和性调度机制,并探讨了多种优化策略,帮助用户实现更高效、更灵活的资源管理。 ... [详细]
  • 汇总了2023年7月7日最新的网络安全新闻和技术更新,包括最新的漏洞披露、工具发布及安全事件。 ... [详细]
  • 服务器虚拟化存储设计,完美规划储存与资源,部署高性能虚拟化桌面
    规划部署虚拟桌面环境前,必须先估算目前所使用实体桌面环境的工作负载与IOPS性能,并慎选储存设备。唯有谨慎估算贴近实际的IOPS性能,才能 ... [详细]
  • Asynchronous JavaScript and XML (AJAX) 的流行很大程度上得益于 Google 在其产品如 Google Suggest 和 Google Maps 中的应用。本文将深入探讨 AJAX 在 .NET 环境下的工作原理及其实现方法。 ... [详细]
  • 本文探讨了如何在 Spring MVC 框架下,通过自定义注解和拦截器机制来实现细粒度的权限管理功能。 ... [详细]
  • 为何Compose与Swarm之后仍有Kubernetes的诞生?
    探讨在已有Compose和Swarm的情况下,Kubernetes是如何以其独特的设计理念和技术优势脱颖而出,成为容器编排领域的领航者。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 本文总结了一次针对大厂Java研发岗位的面试经历,探讨了面试中常见的问题及其背后的原因,并分享了一些实用的面试准备资料。 ... [详细]
  • 本文探讨了在一个物理隔离的环境中构建数据交换平台所面临的挑战,包括但不限于数据加密、传输监控及确保文件交换的安全性和可靠性。同时,作者结合自身项目经验,分享了项目规划、实施过程中的关键决策及其背后的思考。 ... [详细]
  • 本文探讨了在Windows系统中运行Apache服务器时频繁出现崩溃的问题,并提供了多种可能的解决方案和建议。错误日志显示多个子进程因达到最大请求限制而退出。 ... [详细]
  • 本文详细介绍如何在华为鲲鹏平台上构建和使用适配ARM架构的Redis Docker镜像,解决常见错误并提供优化建议。 ... [详细]
  • 在Java开发中,保护代码安全是一个重要的课题。由于Java字节码容易被反编译,因此使用代码混淆工具如ProGuard变得尤为重要。本文将详细介绍如何使用ProGuard进行代码混淆,以及其基本原理和常见问题。 ... [详细]
author-avatar
未知的明天
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有