当前位置: 首页 > 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 这几个在 …...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代&#xff0c;海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构&#xff0c;在处理大规模数据抓取任务时展现出强大的能力。然而&#xff0c;随着业务规模的不断扩大和数据抓取需求的日益复杂&#xff0c;传统…...

【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验

Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...

沙箱虚拟化技术虚拟机容器之间的关系详解

问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西&#xff0c;但是如果把三者放在一起&#xff0c;它们之间到底什么关系&#xff1f;又有什么联系呢&#xff1f;我不是很明白&#xff01;&#xff01;&#xff01; 就比如说&#xff1a; 沙箱&#…...

【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?

FTP&#xff08;File Transfer Protocol&#xff09;本身是一个基于 TCP 的协议&#xff0c;理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况&#xff0c;主要原因包括&#xff1a; ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...

Android写一个捕获全局异常的工具类

项目开发和实际运行过程中难免会遇到异常发生&#xff0c;系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler&#xff0c;它是Thread的子类&#xff08;就是package java.lang;里线程的Thread&#xff09;。本文将利用它将设备信息、报错信息以及错误的发生时间都…...