当前位置: 首页 > news >正文

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

相关文章:

Kubernetes基本部署概念

文章目录 命名空间(Namespaecs)查看命名空间查看带有命名空间对象下资源 文件存储持久卷(pv,Persistent Volumes)卷容量卷模式(volumeMode)访问模式(accessModes)回收策略…...

QT c++ 海康红外热像仪

//本文描述2通道海康通道红外热像仪预览和抓图 #include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); userID-1; …...

OpenAI 的 GPTs 提示词泄露攻击与防护实战:防御卷(一)

前面的OpenAI DevDay活动上,GPTs技术的亮相引起了广泛关注。随着GPTs的创建权限开放给Plus用户,社区里迅速涌现了各种有趣的GPT应用,这些都是利用了Prompt提示词的灵活性。这不仅展示了技术的创新潜力,也让人们开始思考如何获取他…...

中科大计网学习记录笔记(十五):可靠数据传输的原理

前前言:看过本节的朋友应该都知道本节长度长的吓人,但其实内容含量和之前的差不多,老师在本节课举的例子和解释比较多,所以大家坚持看完是一定可以理解透彻的。本节课大部分是在提出问题和解决问题,先明确出现的问题是…...

五种多目标优化算法(MOGWO、MOJS、NSWOA、MOPSO、MOAHA)性能对比(提供MATLAB代码)

一、5种多目标优化算法简介 1.1MOGWO 1.2MOJS 1.3NSWOA 1.4MOPSO 1.5MOAHA 二、5种多目标优化算法性能对比 为了测试5种算法的性能将其求解9个多目标测试函数(zdt1、zdt2 、zdt3、 zdt4、 zdt6 、Schaffer、 Kursawe 、Viennet2、 Viennet3)&#xff0…...

力扣:93. 复原 IP 地址

回溯: 1.先定义一个接收的集合,之后再定义一个记录小数点的变量。之后编写回溯函数,终止条件为小数点的个数为3时,同时要判断最后一段的组合的值是否属于ip地址的范围。之后再用for循环来遍历ip地址的组合,先判断组合…...

利用序列化和反序列化实现深拷贝

利用序列化和反序列化可以实现对象的深拷贝,具体步骤如下: 将要深拷贝的对象序列化为字节流。从字节流中反序列化出一个新的对象,即完成了深拷贝。下面是一个示例代码: import java.io.*;class MyClass implements Serializable {private static final long serialVersion…...

【AHK】68键键盘键位布局优化/esc改退格键/回车键

本人习惯使用~作为退格键,但是由于keychron 68键的布局只能用esc平替~来修改,然后也将回车键通过alt和大小写锁定键一起触发 esc::bs ;次步骤与下面步骤相对应,如果是用send bs方式则下面的不生效^esc:: ;通过建立 保留esc功能 send {esc} re…...

计算机体系架构初步入门

🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:高性能(HPC)开发基础教程 🎀CSDN主页 发狂的小花 🌄人生秘诀:学习的本质就是极致重复! 目录 1 计算机五大…...

常见的序列化数据结构方法及其优缺点汇总

文章目录 1. JSON (JavaScript Object Notation)2. XML (eXtensible Markup Language)3. YAML (YAML Aint Markup Language)4. Protobuf (Protocol Buffers)5. MessagePack6. BSON (Binary JSON)7. Avro8. Thrift9. CBOR (Concise Binary Object Representation) 将常见的序列化…...

华清远见嵌入式学习——驱动开发——作业1

作业要求&#xff1a; 通过字符设备驱动分步注册过程实现LED驱动的编写&#xff0c;编写应用程序测试&#xff0c;发布到CSDN 作业答案&#xff1a; 运行效果&#xff1a; 驱动代码&#xff1a; #include <linux/init.h> #include <linux/module.h> #include &l…...

小苯的IDE括号问题(CD) -----牛客小白月赛87(双链表)

C题&#xff1a;C-小苯的IDE括号问题&#xff08;easy&#xff09;_牛客小白月赛87 (nowcoder.com) D题&#xff1a; D-小苯的IDE括号问题&#xff08;hard&#xff09;_牛客小白月赛87 (nowcoder.com) C题代码&#xff1a; #include<bits/stdc.h>using namespace std…...

Redis如何修改key名称

点击上方蓝字关注我 近期出现过多次修改Redis中key名字的场景&#xff0c;本次简介一下如何修改Redis中key名称的方法。 1. 命令行方式修改在Redis中&#xff0c;可以使用rename命令来修改Key的名称。这个命令的基本语法如下&#xff1a; RENAME old_key new_key 在这里&#…...

浅谈redis之SDS

SDS 什么是SDSSDS结构len的作用free的作用buf的作用简单示例 SDS机制重新分配内存分配内存机制小于1MB情况大于1MB情况为什么这样分配 惰性释放内存 什么是SDS SDS&#xff1a;全名 simple dynamic string&#xff0c;意为简单动态字符串&#xff0c;作为redis里的一种数据结构…...

数据结构知识点总结-线性表(1)-线性表的定义、基本操作、顺序表表示

线性表 定义 线性表是具有相同数据类型的N&#xff08;N>0&#xff09;个元素的有限序列&#xff0c;其中N为表长&#xff0c;当N0时线性表是一张空表。 线性表的逻辑特征&#xff1a;每个非空的线性表都有一个表头元素和表尾元素&#xff0c;中间的每个元素有且仅有一个直…...

Spring Boot 手写starter!!!

原因&#xff1a;为什么要手写starter&#xff1f;&#xff1f;&#xff1f; 原因&#xff1a;简化功能。 实例&#xff1a;以分页为例&#xff1a;写一个starter。 1.首先定义一个PageX注解。 Target({ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) Documented p…...

移动端自动化常用的元素定位工具 介绍

在移动端自动化测试和开发中&#xff0c;元素定位是非常关键的一步。以下是一些常用的工具和技术来帮助开发者或测试工程师在移动设备上定位元素&#xff1a; 1. **UiAutomator**: - **UiAutomator** 是 Android 官方提供的自动化测试框架。它可以用来编写测试脚本&…...

问题:Spark SQL 读不到 Flink 写入 Hudi 表的新数据,打开新 Session 才可见

博主历时三年精心创作的《大数据平台架构与原型实现&#xff1a;数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行&#xff0c;点击《重磅推荐&#xff1a;建大数据平台太难了&#xff01;给我发个工程原型吧&#xff01;》了解图书详情&#xff0c;…...

数学建模资料分享

1. 往年各赛题的优秀论文 可以用来参考一下论文是怎么写的。参考论文的结构&#xff0c;格式&#xff0c;思路等等。 链接&#xff1a;https://pan.baidu.com/s/1WG2t4-x9MjtaSgkq4ue5AQ?pwdnlzx 提取码&#xff1a;nlzx --来自百度网盘超级会员V4的分享 2.论文模板 链接&a…...

应用配置管理

一、Pod 配置管理 可变配置用 ConfigMap&#xff1b; 敏感信息用 Secret&#xff1b; 身份认证用 ServiceAccount 这几个独立的资源来实现的&#xff1b; 资源配置用 Resources&#xff1b; 安全管控用 SecurityContext&#xff1b; 前置校验用 InitContainers 这几个在 …...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

mac:大模型系列测试

0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何&#xff0c;是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试&#xff0c;是可以跑通文章里面的代码。训练速度也是很快的。 注意…...

恶补电源:1.电桥

一、元器件的选择 搜索并选择电桥&#xff0c;再multisim中选择FWB&#xff0c;就有各种型号的电桥: 电桥是用来干嘛的呢&#xff1f; 它是一个由四个二极管搭成的“桥梁”形状的电路&#xff0c;用来把交流电&#xff08;AC&#xff09;变成直流电&#xff08;DC&#xff09;。…...

OCR MLLM Evaluation

为什么需要评测体系&#xff1f;——背景与矛盾 ​​ 能干的事&#xff1a;​​ 看清楚发票、身份证上的字&#xff08;准确率>90%&#xff09;&#xff0c;速度飞快&#xff08;眨眼间完成&#xff09;。​​干不了的事&#xff1a;​​ 碰到复杂表格&#xff08;合并单元…...

java+webstock

maven依赖 <dependency><groupId>org.java-websocket</groupId><artifactId>Java-WebSocket</artifactId><version>1.3.5</version></dependency><dependency><groupId>org.apache.tomcat.websocket</groupId&…...

CppCon 2015 学习:Simple, Extensible Pattern Matching in C++14

什么是 Pattern Matching&#xff08;模式匹配&#xff09; ❝ 模式匹配就是一种“描述式”的写法&#xff0c;不需要你手动判断、提取数据&#xff0c;而是直接描述你希望的数据结构是什么样子&#xff0c;系统自动判断并提取。❞ 你给的定义拆解&#xff1a; ✴ Instead of …...