Kubernetes基本部署概念

文章目录

  • 命名空间(Namespaecs)
    • 查看命名空间
    • 查看带有命名空间对象下资源
  • 文件存储
    • 持久卷(pv,Persistent Volumes)
      • 卷容量
      • 卷模式(volumeMode)
      • 访问模式(accessModes)
      • 回收策略(persistentVolumeReclaimPolicy)
      • local卷
      • nfs卷
    • 持久卷声明(pvc,PersistentVolumesClaims)
      • 资源
    • PV绑定PVC
  • Deployment
  • Service(服务)
    • 服务类型(spec.type)
    • 端口定义(spec.ports)

在K8s中,进行资源命名时,大部分支持的命名方式为DNS子域名命名方式,即xxx-xxx的方式,在大部分资源命名时,不支持_,所以在命名时但需要进行驼峰划分时,推荐使用-进行划分

命名空间(Namespaecs)

查看命名空间

# 列出集群所有命名空间
kubectl get namespaces
kubectl get ns# 获取命名空间摘要信息
kubectl get ns ${namespace_name}# 获取命名空间详情信息
kubectl describe ns ${namespace_name}

ns: namespace命令的缩写,在k8s中可用ns命令指代namespaces,下面统一采用ns代替namespaces

查看带有命名空间对象下资源

# 以pods资源为例
kubectl get pods --ns=${namespace_name}

文件存储

在K8s中通过卷(volume)来存储文件信息。在容器中的的文件内容在磁盘上临时存放,当容器崩溃或被销毁时,容器上的生命周期、状态,文件信息等内容都会丢失。若是我们希望能够将容器内的文件信息和容器外的磁盘上文件进行关联,需要通过挂载卷的方式进行挂载,这些当容器出错时挂载的内容将不会被销毁。

持久卷(pv,Persistent Volumes)

K8s中的持久卷(Persistent Volumes,简称PV)是一种特殊类型的存储资源,它可以为 Kubernetes中的Pod 供持久性的数据存储。持久卷的特点如下:

  1. 数据持久性:持久卷的数据在 Pod 退出时不会丢失,即使 Pod 被删除,卷中的数据也会保留。这使得持久卷成为一个非常适合存储数据持久性的解决方案。
  2. 独立于 Pod:每个持久卷都是独立于 Pod 的,卷的存储和访问并不依赖于某个特定的 Pod。这意味着可以使用不同的持久卷来存储不同的数据,或者将多个持久卷分配给同一个Pod。
  3. 动态分配:持久卷可以在Kubernetes中动态创建和删除。当一个PersistentVolumeClaim需要使用持久卷时,Kubernetes会自动为其分配一个空闲的持久卷。当PersistentVolumeClaim不再需要该卷时,Kubernetes会自动释放该卷,以便其他PersistentVolumeClaim使用。
  4. 存储类型:持久卷可以存储各种类型的数据,如Block存储、File存储、网络文件系统(如NFS)等。这使得持久卷可以用于各种不同的场景和用例。
  5. 共享访问:多个PersistentVolumeClaim可以共享同一个持久卷。这可以提高存储利用率,减少卷的创建和删除次数,从而简化了 Kubernetes 中的存储管理。

总之,持久卷是 Kubernetes 中一种非常灵活和强大的存储解决方案,它提供了数据持久性、独立性、动态分配、多种存储类型和共享访问等特点,使得在管理和存储数据时具有很高的灵活性和效率。

卷容量

一般来说,在PV持久卷里面需要声明卷容量,该容量通过spec.capacity.storage指定

卷模式(volumeMode)

在PV持久卷中,支持两种卷模式:

  • Filesystem(文件系统):
    • 属性设置为Filesystem的卷会被Pod挂载到某个目录
    • 如果卷的存储来自某块设备而该设备目前为空,Kuberneretes会在第一次挂载卷之前在设备上创建文件系统。
  • Block(快设备):
    • 将卷作为原始块设备来使用,其上没有任何文件系统
    • 这种模式对于为 Pod 提供一种使用最快可能方式来访问卷而言很有帮助
    • Pod和卷之间不存在文件系统层。另外,Pod中运行的应用必须知道如何处理原始块设备

在yaml中可以通过spec.volumeMode指定卷模式,该模式是可选的,默认为Filesystem

访问模式(accessModes)

在PV上的访问模式有:

  • ReadWriteOnce(RWO):卷可以被一个节点以读写方式挂载。ReadWriteOnce访问模式仍然可以在同一节点上运行的多个Pod访问该卷。 对于单个Pod的访问,请参考ReadWriteOncePod访问模式。
  • ReadOnlyMany(ROX):卷可以被多个节点以只读方式挂载。
  • ReadWriteMany(RWX):卷可以被多个节点以读写方式挂载。
  • ReadWriteOncePod(RWOP):卷可以被单个Pod以读写方式挂载。如果你想确保整个集群中只有一个Pod可以读取或写入该PVC,请使用ReadWriteOncePod访问模式。

在yaml中可以通过spec.accessModes指定卷模式,该模式是可选的,默认为Filesystem

回收策略(persistentVolumeReclaimPolicy)

目前的回收策略有:

  • Retain:手动回收
  • Recycle:简单擦除 (rm -rf /thevolume/*)
  • Delete:删除存储卷

local卷

local卷所代表的是某个被挂载的本地存储设备,例如磁盘、分区或者目录。local 卷只能用作静态创建的持久卷。不支持动态配置。

当我们需要挂载集群上某一宿主机的卷时,可以使用local卷进行挂载。

以下是一个PV使用local卷的示例:

apiVersion: v1
kind: PersistentVolume
metadata:name: example-pv
spec:capacity:storage: 100GivolumeMode: FilesystemaccessModes:- ReadWriteManypersistentVolumeReclaimPolicy: RetainstorageClassName: local-storagelocal:# 卷路径path: /mnt/disks/ssd1nodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:# 卷所在集群节点名称- example-node

nfs卷

nfs卷能将NFS(网络文件系统) 挂载到你的Pod中。

apiVersion: v1
kind: PersistentVolume
metadata:name: example-pv
spec:capacity:storage: 100GivolumeMode: FilesystemaccessModes:- ReadWriteManypersistentVolumeReclaimPolicy: RetainstorageClassName: nfs-storagenfs:server: xxxxxpath: "/"

持久卷声明(pvc,PersistentVolumesClaims)

在上述声明的PV卷是集群中的资源。声明了资源之后是无法直接对资源操作的,在K8s中通过持久卷声明(pvc,PersistentVolumesClaims)声明对资源对请求和检查工作。

即PV声明资源,PVC声明对资源的访问方式,通过PVC来访问持久卷资源。

同PV一样,PVC同样支持访问模式,卷模式,具体参考上文

资源

同Pod一样,PVC可以请求特定数量的资源。但在中,请求的资源是存储。

通过spec.resources.requests.storage来声明请求的资源

PVC参考示例:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: example-pvc
spec:volumeMode: FilesystemaccessModes:- ReadWriteManystorageClassName: local-storageresources:requests:storage: 8Gi

PV绑定PVC

  • 动态绑定:在PV和PVC中通过spec.storageClassName声明存储类。如果集群中有合适的PV可用(即与PVC规格匹配并且未被绑定),则Kubernetes会自动将两者绑定在一起。如果没有可用PV,则可能根据存储类触发动态供应流程创建新的PV。
  • 静态绑定:管理员可以手动创建PV,并为其设置特定的标签或者注解。然后在创建PVC时,可以明确指定需要匹配的标签,这样Kubernetes会在已有PV中寻找符合标签条件的PV进行绑定。

Deployment

在K8s中,通过Deployment定义Pod和ReplicaSet的状态来提供声明式更新能力。通过在Deployment声明期望服务的目标状态,当运行中的Pod等资源以非目标状态访问时,Deployment控制器(Controller)以受控速率更改实际状态,将目标资源变为期望状态。

deployment示例

apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploymentnamespace: example-nslabels:app: nginx
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.14.2ports:- containerPort: 80env:- name: "TZ"value: "Asia/Shanghai"volumeMounts:- name: local-storagemountPath: /data/data/uploadsubPath: datavolumes:- name: local-storagepersistentVolumeClaim:claimName: ysocr-pvc
  • metadata: Deployment元数据信息
    • name: 定义了deployment名称,且后续的Pod和ReplicaSet等资源以该name开头
    • namespace: 指定该deployment所在命名空间
    • label: 在Deployment中定义的标签,以key: value的方式定义
  • spec.replicas: 声明的Pod和ReplicaSet资源的分片数量
  • spec.selector: 定义所创建的ReplicaSet如何查找要管理的Pod。这里选择在Pod模板中定义的标签进行管理
  • spec.template:
    • metadata: 定义pod的元数据和
    • spec: pod容器配置
      • container: 创建一个容器并使用
        • ports.containerPort: 定义容器内暴露的端口
        • env: 容器环境变量配置
        • volumeMounts: 卷挂载
          • name: volumes定义的卷名称
          • mountPath: 容器内路径
          • subPath: 相对于卷的路径
      • volumes: 卷配置,通过关联PVC,挂载卷和容器

Service(服务)

Deployment中定义了容器信息和容器的状态等内容,不同于Docker Compose或Docker Swarm同一服务下的容器可以相互访问。K8s中Deployment仅定义了容器的状态相关信息,如果希望在命名空间内部或者在宿主机上访问内部资源,需要通过Service的方式来公开程序为网络服务。

Servic 是将运行在一个或一组 Pod 上的网络应用程序公开为网络服务的方法。

服务类型(spec.type)

K8s允许通过服务类型来设置容器对外提供服务的方式

  • ClusterIP
    • 这类服务仅在Kubernetes集群内部可见,不暴露给集群外部
    • ClusterIP服务使用ClusterIP类型,将Pods的网络接口与集群IP地址关联起来
    • 这种服务适用于在集群内部进行通信的情况
    • 该服务为默认Service服务类型,当不进行服务类型配置时,默认使用该配置
  • NodePort
    • 这类服务在集群内部和外部都可以访问
    • 通过为Pods分配一个NodePort,NodePort服务允许用户在外部访问Pods,从而实现服务在集群内部和外部的统一访问
    • 适用于宿主机需要访问集群内部服务的情况
  • LoadBalancer
    • 这类服务在集群内部和外部都可以访问
    • 这类服务将Pods的网络接口与集群external IP地址关联起来。LoadBalancer 服务在集群外部是可见的,可以接收来自外部的流量
    • 通常,LoadBalancer服务用于负载均衡和高可用场景,当Pod有多个分片时,可以考虑使用LoadBalancer进行负载均衡
  • ExternalName
    • 这类服务将Pods的网络接口与外部的域名关联起来
    • ExternalName服务允许用户为服务指定一个外部域名,并将该域名解析为Pods的网络接口
    • 这种服务适用于将服务提供以域名的方式提供给外部用户的情况

端口定义(spec.ports)

在Kubernetes中,Services的spec.ports定义了服务的外部访问端口。这些端口在集群内是可见的,并且允许集群内的节点访问该服务。

spec.ports参数是一个包含多个端口对象的数组,每个端口对象表示一个外部访问端口。spec.ports参数对象的常见参数有:

  • name: 当Services中只定义单个端口时,端口名称是可选的,当在一个Services中定义多个端口时,必须为所有端口提供名称,以使它们无歧义
  • protocol: 支持的协议,可选参数,默认为TCP
  • port: 服务访问端口,集群内部访问的端口,暴露到集群上的端口,定义了服务对外的访问接口,可以通过clusterIp:port的形式访问
  • targetPort: 表示服务内部使用的端口。是Pod控制器中定义的端口(应用访问的端口)。一般情况下port和targetPort保持一致
    • 在Services中使用Pod控制器定义的端口时,需要在Pod中声明containerPort参数
  • nodePort: 提供了集群外部客户端访问 Service 的一种方式,指定nodePort后,可以通过nodeIp:nodePort的形式进行访问
    • 默认情况下,为了方便起见,Kubernetes控制平面会从某个范围内分配一个集群外部可访问端口号(默认:30000-32767)

Services示例:

apiVersion: v1
kind: Service
metadata:name: nginx-service
spec:type: NodePortselector:app: nginxports:- name: name-of-service-portprotocol: TCPport: 80targetPort: 80nodePort: 30080

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/701865.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023年06月CCF-GESP编程能力等级认证C++编程四级真题解析

一、单选题(每题 2 分,共 30 分) 第1题 高级语言编写的程序需要经过以下( )操作,可以生成在计算机上运行的可执行代码。 A. 编辑 B. 保存 C. 调试 D. 编译 答案:D 第2题 排序算法是稳定的(Stable Sorting),就是指排序算法可以保证,在待排序数据中有两个相等记录…

AR汽车行业解决方案系列之2-远程汽修

在汽车行业中,AR技术的应用正悄然改变着整个产业链的运作方式,应用涵盖培训、汽修、汽车售后、PDI交付、质检以及汽车装配等,AR技术为多个环节都带来了前所未有的便利与效率提升。 安宝特AR将以系列推文的形式为读者逐一介绍在汽车行业中安宝…

【多线程】阻塞队列详解及实现(模拟实现生产者消费者模型)

阻塞队列 🌴生产者消费者模型🌸强耦合🌸松耦合(解耦合) 🎍Java标准库中的阻塞队列🌳阻塞队列的模拟实现⭕总结 阻塞队列是什么? 阻塞队列是⼀种特殊的队列. 也遵守 “先进先出” 的阻塞队列能是…

四信AI智能识别及计量监测设备,助力入河入海排污口规范化建设

随着城市化和工业化的快速发展,污水排放已成为主要的环境问题之一。2022年,国务院办公厅发布《关于加强入河入海排污口监督管理工作的实施意见》,提出“加强科技研发,开展各类遥感监测、水面航测、水下探测、管线排查等实用技术和…

游戏配置内存“瘦身”策略

背景 游戏配置数据绝对是游戏服务器进程的内存大头,有些游戏服务器单纯数据配置的容量就超过一个G。因此,这部分内存优化也就放在首要位置了。 优化策略 在《服务器进程如何降低内存》一文中,我们讲述了可以通过“优化游戏配置缓存”来降低游戏服务器进程的内存使用量。本…

知乎万赞:为什么我不建议你转行学python?_为什么不建议学python

写在前面 本文的目的很简单,一句话: 用最少的时间,最高效率,让你清楚:想要拿到python offer,你需要做什么?你该怎么做?如果你不具备这些条件,我不建议你转行学python&a…

Stable Diffusion 3重磅发布

刚不久,Stability AI发布了Stable Diffusion 3.0,这一版本采用了与备受瞩目的爆火Sora相同的DiT架构。通过这一更新,画面质量、文字渲染以及对复杂对象的理解能力都得到了显著提升。由于这些改进,先前的技术Midjourney和DALL-E 3在…

【并发】CAS原子操作

1. 定义 CAS是Compare And Swap的缩写,直译就是比较并交换。CAS是现代CPU广泛支持的一种对内存中的共享数据进行操作的一种特殊指令,这个指令会对内存中的共享数据做原子的读写操作。其作用是让CPU比较内存中某个值是否和预期的值相同,如果相…

性能压测关注的指标有哪些?

在进行全链路压测和性能测试时,需要关注多个关键性能指标(KPIs)来评估系统的性能表现,以下是一些常见的性能测试指标。 1. 吞吐量(Throughput) 系统在单位时间内能够处理的请求数量或事务数量,通常以每秒请求数(RPS/TPS)来衡量。 2. 响应时间(Response Time) 从…

springboot217志同道合交友网站

springboot志同道合交友网站设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本志同道合交友网站就是在这样的大环境下诞生,其可以帮助…

内网穿透教程-SSH连接访问服务器主机(手把手教学)

内网穿透教程-用于SSH连接访问服务器主机 访问量子互联官网(用于内网穿透的工具-需付费) 打开官网: https://console.uulap.com/ 访问控制台: 可直接查看内网穿透新手使用教程:http://doc.uulap.com/docs/nattunnel/s…

大模型实战营第二期——4. XTuner 大模型单卡低成本微调实战

github地址:InternLM/tutorial-书生浦语大模型实战营文档地址:XTuner 大模型单卡低成本微调实战视频地址:XTuner 大模型单卡低成本微调实战Intern Studio: https://studio.intern-ai.org.cn/console/instance 这个人的研究方向是眼科的AI&am…

AI Agent深入浅出——以ERNIE SDK和多工具智能编排为例

在过去一年里,通用大语言模型(LLM)的飞速发展引起了全球的关注。百度等科技巨头推出了各自的大模型,不断提高语言模型性能的上限。然而,业界对LLM所设定的目标不再局限于基本的问答功能,而是寻求利用大模型…

什么是MapReduce

1.1 MapReduce到底是什么 Hadoop MapReduce是一个软件框架,基于该框架能够容易地编写应用程序,这些应用程序能够运行在由上千个商用机器组成的大集群上,并以一种可靠的,具有容错能力的方式并行地处理上TB级别的海量数据集。这个定…

【链表算法题记录】两两交换链表中的节点

题目链接 我自己第一遍做的时候没有想到用虚拟头节点,就是直接进行操作: 设置要交换的两个节点p1和p2,还有交换需要用到的临时节点temp。进行交换后还要注意p1换到后面去之后它的指向,它实际上是指向后面一组交换节点交换后位于…

注册中心 Service Discovery --- Intro

注册中心 Service Discovery --- Intro 为什么需要注册中心注册中心的原理常用的注册中心注册中心的高可用 为什么需要注册中心 在微服务架构中,系统被拆分成了若干个独立的服务,因此服务之间需要进行通信和协作。为了实现服务的发现和调用,需…

C#,动态规划(DP)模拟退火(Simulated Annealing)算法与源代码

1 模拟退火 *问题:**给定一个成本函数f:r^n–>r*,找到一个 n 元组,该元组最小化 f 的值。请注意,最小化函数值在算法上等同于最大化(因为我们可以将成本函数重新定义为 1-f)。 很多有微积分/分析背景的人可能都熟悉单变量函数的简单优化。…

11.openEuler文件和文件系统(二)

openEuler OECA认证辅导,标红的文字为学习重点和考点。 如果需要做实验,建议安装麒麟信安、银河麒麟、统信等具有图形化的操作系统,其安装与openeuler基本一致。 2.管理linux文件系统 查看分区使用情况: df命令查看文件系统的磁盘空间占用情况,主要参数: -h:以容易理…

Llama2模型的优化版本:Llama-2-Onnx

Llama2模型的优化版本:Llama-2-Onnx。 Llama-2-Onnx是Llama2模型的优化版本。Llama2模型由一堆解码器层组成。每个解码器层(或变换器块)由一个自注意层和一个前馈多层感知器构成。与经典的变换器相比,Llama模型在前馈层中使用了不…

轮转数组

189. 轮转数组 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步:…