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

面试题整理9----谈谈对k8s的理解2

面试题整理9----谈谈对k8s的理解2

  • 1. Service 资源
    • 1.1 Service
      • ClusterIP
      • NodePort
      • LoadBalancer
      • Ingress
      • ExternalName
    • 1.2 Endpoints
    • 1.3 Ingress
    • 1.4 EndpointSlice
    • 1.5 IngressClass
  • 2. 配置和存储资源
    • 2.1 ConfigMap
    • 2.2 Secret
    • 2.3 PersistentVolume
    • 2.4 PersistentVolumeClaim
    • 2.5 StorageClass
      • 2.5.1 PV,PVC,StorageClass之间的关系
    • 2.6 Volume
    • 2.7 CSIDriver
    • 2.8 CSINode
    • 2.9 CSIStorageCapacity
    • 2.10 StorageVersionMigration v1alpha1
  • 3. RBAC 鉴权资源
    • 3.1 Role和RoleBinding
      • 3.1.1 Role
      • 3.1.2 RoleBinding
      • 3.1.3 常见用例
    • 3.2 ClusterRole和ClusterRoleBinding
      • 3.2.1 ClusterRole
      • 3.2.2 ClusterRoleBinding
      • 3.2.3 常见用例
    • 3.3 LocalSubjectAccessReview
    • 3.4 SelfSubjectAccessReview
    • 3.5 SelfSubjectRulesReview
    • 3.6 SubjectAccessReview

1. Service 资源

1.1 Service

Service 是软件服务(例如 mysql)的命名抽象,包含代理要侦听的本地端口(例如 3306)和一个选择算符,选择算符用来确定哪些 Pod 将响应通过代理发送的请求。

Service几种模式:

  • ClusterIP

适用于集群内部的服务间通信。

apiVersion: v1
kind: Service
metadata:name: my-service
spec:selector:app: my-appports:- protocol: TCPport: 80targetPort: 8080
  • NodePort

适用于需要从集群外部通过node节点的映射访问服务的场景。

api版version: v1
kind: Service
metadata:name: my-service
spec:selector:app: my-apptype: NodePortports:- protocol: TCPport: 80targetPort: 8080nodePort: 30007
  • LoadBalancer

适用于需要从互联网访问服务的场景。

apiVersion: v1
kind: Service
metadata:name: my-service
spec:selector:app: my-apptype: LoadBalancerports:- protocol: TCPport: 80targetPort: 8080
  • Ingress

适用于需要基于路径或主机名路由流量的场景。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: my-ingress
spec:rules:- host: my-app.comhttp:paths:- path: /pathType: Prefixbackend:service:name: my-serviceport:number: 80
  • ExternalName

将 Service 映射到一个外部名称,通常是一个 DNS 名称。适用于需要将 Kubernetes 服务与外部服务集成的场景。

apiVersion: v1
kind: Service
metadata:name: my-service
spec:type: ExternalNameexternalName: my-external-service.com

1.2 Endpoints

Endpoints 是实现实际服务的端点的集合。即是通过service发现的后端pods的集合.

1.3 Ingress

Ingress 是允许入站连接到达后端定义的端点的规则集合。

1.4 EndpointSlice

EndpointSlice 是实现某 Service 的端点的子集.

1.5 IngressClass

IngressClass 代表 Ingress 的类,被 Ingress 的规约引用

2. 配置和存储资源

2.1 ConfigMap

ConfigMap 包含供 Pod 使用的配置数据。存储非敏感的配置数据。如配置文件、环境变量等。

有2种方法可以加载configmap中的环境变量:

apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:containers:- name: my-containerimage: my-imageenvFrom:- configMapRef:name: my-configmap

或者

apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:containers:- name: my-containerimage: my-imageenv:- name: MY_ENV_VARIABLEvalueFrom:configMapKeyRef:name: my-configmapkey: my-config-key

2.2 Secret

Secret 包含某些类别的秘密数据。 存储敏感数据,并确保数据的安全性和访问控制。如密码、密钥、证书等。

用户名密码的引用方式:

apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:containers:- name: my-containerimage: my-imageenv:- name: DB_USERNAMEvalueFrom:secretKeyRef:name: my-secretkey: username- name: DB_PASSWORDvalueFrom:secretKeyRef:name: my-secretkey: password

证书文件的引用:

secret的导入

kubectl create secret tls my-tls-secret \--cert=path/to/tls.crt \--key=path/to/tls.key

pod中的引用

apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:containers:- name: my-containerimage: my-imagevolumeMounts:- name: tls-certsmountPath: /app/tlsreadOnly: truevolumes:- name: tls-certssecret:secretName: my-tls-secret

2.3 PersistentVolume

PersistentVolume (PV) 是管理员制备的一个存储资源。全局资源

2.4 PersistentVolumeClaim

PersistentVolumeClaim 是用户针对一个持久卷的请求和申领。名称空间资源

2.5 StorageClass

StorageClass 为可以动态制备 PersistentVolume 的存储类描述参数。全局资源

2.5.1 PV,PVC,StorageClass之间的关系

  1. Storage Class:定义了一种存储类型,包括存储的类型、回收策略等。它允许动态创建 PV。
  2. Persistent Volume (PV):是集群中的一块存储资源,类似于一个物理磁盘。PV 可以是静态创建的,也可以是通过 Storage Class 动态创建的。
  3. Persistent Volume Claim (PVC):是用户对存储资源的请求,类似于对 PV 的申请。PVC 可以绑定到一个 PV,从而使用该 PV 提供的存储资源。

2.6 Volume

Volume 表示 Pod 中一个有名字的卷,可以由 Pod 中的任意容器进行访问。

2.7 CSIDriver

CSIDriver 抓取集群上部署的容器存储接口(CSI)卷驱动有关的信息。

2.8 CSINode

CSINode 包含节点上安装的所有 CSI 驱动有关的信息。

2.9 CSIStorageCapacity

CSIStorageCapacity 存储一个 CSI GetCapacity 调用的结果。

2.10 StorageVersionMigration v1alpha1

StorageVersionMigration 表示存储的数据向最新存储版本的一次迁移。

3. RBAC 鉴权资源

3.1 Role和RoleBinding

RoleRoleBinding 是 Kubernetes 中用于管理命名空间级别权限的两个核心资源。它们与 ClusterRoleClusterRoleBinding 类似,但作用范围仅限于特定的命名空间。

3.1.1 Role

Role 定义了一组在特定命名空间内的权限。你可以把它看作是一种命名空间级别的“角色”,它描述了哪些 API 组、资源类型以及操作可以被允许。

Role 示例:

  1. 查看特定命名空间中的 pods
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:namespace: defaultname: pod-reader
rules:
- apiGroups: [""]resources: ["pods"]verbs: ["get", "watch", "list"]
  1. 管理特定命名空间中的 ConfigMaps
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:namespace: defaultname: configmap-admin
rules:
- apiGroups: [""]resources: ["configmaps"]verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]

3.1.2 RoleBinding

RoleBindingRole 绑定到一个或多个用户、组或服务账户上,从而授予这些实体在特定命名空间内的相应权限。你可以把它看作是一种命名空间级别的“角色绑定”。

RoleBinding 示例:

  1. pod-reader Role 绑定到特定用户
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: read-podsnamespace: default
subjects:
- kind: Username: janeapiGroup: rbac.authorization.k8s.io
roleRef:kind: Rolename: pod-readerapiGroup: rbac.authorization.k8s.io
  1. configmap-admin Role 绑定到一个服务账户
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: configmap-admin-bindingnamespace: default
subjects:
- kind: ServiceAccountname: configmap-admin-sa
roleRef:kind: Rolename: configmap-adminapiGroup: rbac.authorization.k8s.io

3.1.3 常见用例

  1. 命名空间管理员:创建一个具有特定命名空间内所有权限的 Role,并将其绑定到命名空间管理员用户或组。

  2. 应用程序访问控制:为应用程序创建一个 Role,允许它访问和修改特定命名空间内的资源(如 pods、services、configmaps 等),并将其绑定到应用程序使用的服务账户。

  3. CI/CD 管道:为 CI/CD 管道创建一个 Role,允许它在特定命名空间内创建、更新和删除部署、服务等资源,并将其绑定到 CI/CD 工具使用的服务账户。

  4. 多租户环境:在多租户环境中,为每个租户创建一个独立的命名空间,并为每个租户分配一个 RoleRoleBinding,以限制他们对资源的访问权限。

通过合理地使用 RoleRoleBinding,你可以实现细粒度的访问控制,确保集群中各个命名空间的安全性和稳定性。

3.2 ClusterRole和ClusterRoleBinding

ClusterRoleClusterRoleBinding 是 Kubernetes 中用于管理集群级别权限的两个核心资源。它们与 RoleRoleBinding 类似,但作用范围是整个集群,而不仅仅是某个命名空间。

3.2.1 ClusterRole

ClusterRole 定义了一组跨集群范围的权限。你可以把它看作是一种集群级别的“角色”,它描述了哪些 API 组、资源类型以及操作可以被允许。

ClusterRole 示例:

  1. 查看所有命名空间中的 pods
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:name: pod-reader
rules:
- apiGroups: [""]resources: ["pods"]verbs: ["get", "watch", "list"]
  1. 管理集群中的所有 ConfigMaps
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:name: configmap-admin
rules:
- apiGroups: [""]resources: ["configmaps"]verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]

3.2.2 ClusterRoleBinding

ClusterRoleBindingClusterRole 绑定到一个或多个用户、组或服务账户上,从而授予这些实体相应的权限。你可以把它看作是一种集群级别的“角色绑定”。

ClusterRoleBinding 示例:

  1. pod-reader ClusterRole 绑定到特定用户
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: read-pods
subjects:
- kind: Username: janeapiGroup: rbac.authorization.k8s.io
roleRef:kind: ClusterRolename: pod-readerapiGroup: rbac.authorization.k8s.io
  1. configmap-admin ClusterRole 绑定到一个服务账户
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: configmap-admin-binding
subjects:
- kind: ServiceAccountname: configmap-admin-sanamespace: kube-system
roleRef:kind: ClusterRolename: configmap-adminapiGroup: rbac.authorization.k8s.io

3.2.3 常见用例

  1. 集群管理员:创建一个具有所有权限的 ClusterRole,并将其绑定到集群管理员用户或组。

  2. 监控和日志收集:为监控和日志收集工具创建一个 ClusterRole,允许它们读取集群中的各种资源(如 pods、nodes、services 等),并将其绑定到相应的服务账户。

  3. CI/CD 管道:为 CI/CD 管道创建一个 ClusterRole,允许它创建、更新和删除部署、服务等资源,并将其绑定到 CI/CD 工具使用的服务账户。

  4. 备份和恢复:为备份和恢复工具创建一个 ClusterRole,允许它读取和修改持久卷、配置映射等资源,并将其绑定到备份和恢复工具使用的服务账户。

3.3 LocalSubjectAccessReview

LocalSubjectAccessReview 检查用户或组是否可以在给定的命名空间内执行某操作。

3.4 SelfSubjectAccessReview

SelfSubjectAccessReview 检查当前用户是否可以执行某操作。

3.5 SelfSubjectRulesReview

SelfSubjectRulesReview 枚举当前用户可以在某命名空间内执行的操作集合。

3.6 SubjectAccessReview

SubjectAccessReview 检查用户或组是否可以执行某操作。

至此对k8s的理解应该就差不多了.当然面试中不过不拦着可以继续对K8s的监控,告警,日志,流量治理,CICD等各个面继续深入阐述自己的理解.

相关文章:

面试题整理9----谈谈对k8s的理解2

面试题整理9----谈谈对k8s的理解2 1. Service 资源1.1 ServiceClusterIPNodePortLoadBalancerIngressExternalName 1.2 Endpoints1.3 Ingress1.4 EndpointSlice1.5 IngressClass 2. 配置和存储资源2.1 ConfigMap2.2 Secret2.3 PersistentVolume2.4 PersistentVolumeClaim2.5 St…...

12个城市人文扫街、旅拍、人像风光摄影后期Lightroom调色预设

12个城市人文扫街、旅拍、人像风光摄影后期Lightroom调色预设 12 个专为城市场景设计的专业 Adobe Lightroom 预设。只需单击一下,即可通过一致、专业的基础简化您的编辑流程。 Lightroom & Lightroom Classic,桌面和移动兼容包括 12 张由 pat_kay…...

无人设备遥控器之数传功率篇

一、数传功率的基本概念 数传功率是指遥控器发射端在传输数据时所使用的功率。这个功率值直接影响了数据传输的距离和信号强度。一般来说,数传功率越大,遥控器与无人设备之间的通信距离就越远,信号强度也相应增强。 二、数传功率的调节与选择…...

灭屏情况下,飞行模式+静音模式+插耳,播放音乐,电流异常

1. 功耗现象 灭屏情况下,飞行模式静音模式插耳,播放音乐,电流异常 1.1测试数据 飞行模式静音模式插耳机 原生音乐播放器 DriverOnly 32.5mA User版本 45mA 1.2 电流波形现象 上述看怀疑 CPU 未进入 Deep idle 导致? 2. …...

面向微服务的Spring Cloud Gateway的集成解决方案:用户登录认证与访问控制

🎯导读:本文档详细描述了一个基于Spring Cloud Gateway的微服务网关及Admin服务的实现。网关通过定义路由规则,利用负载均衡将请求转发至不同的后端服务,并集成了Token验证过滤器以确保API的安全访问,同时支持白名单路…...

Jmeter负载测试如何找到最大并发用户数?

在性能测试中,当我们接到项目任务时,很多时候我们是不知道待测接口能支持多少并发用户数的。此时,需要我们先做负载测试,通过逐步加压,来找到最大并发用户数。那么当我们找到一个区间,怎么找到具体的值呢&a…...

Spark-Streaming集成Kafka

Spark Streaming集成Kafka是生产上最多的方式,其中集成Kafka 0.10是较为简单的,即:Kafka分区和Spark分区之间是1:1的对应关系,以及对偏移量和元数据的访问。与高版本的Kafka Consumer API 集成时做了一些调整,下面我们…...

移植 OLLVM 到 Android NDK,Android Studio 中使用 OLLVM

版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/ OLLVM、LLVM 与 Android NDK 在 Android NDK 中,LLVM/Clang 是默认的编译器。自 Android NDK r18 开始,Google 弃用了 GCC&#xff0c…...

DAY36|动态规划Part04|LeetCode:1049. 最后一块石头的重量 II、494. 目标和、474.一和零

目录 LeetCode:1049. 最后一块石头的重量 II 基本思路 C代码 LeetCode:494. 目标和 基本思路 C代码 LeetCode:474.一和零 基本思路 C代码 LeetCode:1049. 最后一块石头的重量 II 力扣代码链接 文字讲解:LeetCode:1049. 最后一块石头的重量 II 视频讲解&…...

Linux 下SVN新手操作手册

下面来介绍Linux 下 SVN操作方法: 1、SVN的安装 Centos 7 安装Subversion sudo yum -y install subversion Ubuntu 安装Subversion sudo apt-get install subversion 自定义安装,官方地址:https://subversion.apache.org/ 2、SVN的使用…...

障碍感知 | 基于KD树的障碍物快速处理(附案例分析与ROS C++仿真)

目录 1 障碍处理与KD树2 KD树核心原理2.1 KD树的构造2.2 KD树的查找 3 仿真实现3.1 KD树基本算法3.2 ROS C仿真 1 障碍处理与KD树 在机器人感知系统中,传感器(如激光雷达、摄像头等)会采集周围的环境数据,例如代价地图、八叉树地…...

Electron -- Electron Fiddle(一)

Electron Fiddle 是一个由 Electron 团队开发的开源工具,它允许开发者快速创建、运行和调试 Electron 应用。这个工具提供了一个简洁的界面,使用户无需配置复杂的开发环境,就能快速体验和学习 Electron。强烈建议将其安装为学习工具。 学习它…...

详解Redis的常用命令

目录 KEYS 语法 EXISTS 语法 DEL 语法 EXPIRE 语法 TTL 语法 TYPE 语法 Redis数据结构和内部编码 KEYS 返回所有满⾜样式(pattern)的 key。 返回值:匹配 pattern 的所有 key。 语法 ⽀持如下统配样式: h?llo matches hello, ha…...

elasticache备份

Elasticsearch 本地快照操作流程 配置快照存储路径 在 elasticsearch.yml 文件中配置以下字段以指定数据、日志和快照存储路径:path:data: /data/data # 数据存储路径logs: /data/log # 日志存储路径repo: /data/snapshot # 快照存储路径确保路径 /dat…...

Tomcat负载均衡全解析

一、Java项目概述 (一)Java语言特点 Java是一种计算机应用语言,在开发王者和管理系统等方面有着广泛的应用。它具有开源免费的特性,不过需要注意的是,虽然语言本身开源,但是后期开发工具可能会收取费用。 (二)、JDK和Tomcat 1,JDK:作为Java语言的开发工具,在Linu…...

[LeetCode-Python版] 定长滑动窗口8——2461. 长度为 K 子数组中的最大和

题目 给你一个整数数组 nums 和一个整数 k 。请你从 nums 中满足下述条件的全部子数组中找出最大子数组和: 子数组的长度是 k,且 子数组中的所有元素 各不相同 。 返回满足题面要求的最大子数组和。如果不存在子数组满足这些条件,返回 0 。…...

springboot476基于vue篮球联盟管理系统(论文+源码)_kaic

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统篮球联盟管理系统信息管理难度大,容错率低&am…...

预约参观华为基地,见证行业巅峰

✨ 大家好呀!今天要跟大家分享一个超酷的体验,关于华为的参观学习之旅!🚀 华为成立于1987年,位于深圳,是全球领先的信息与通信技术(ICT)解决方案供应商哦!他们专注于科技…...

【Flink-scala】DataSet编程模型介绍及数据源

DataStream 学习 1.DataStream编程模型总结 文章目录 DataStream 学习介绍一、DataSet编程模型二、数据源1.文件类数据源2.集合类数据源3.通用类数据源4第三方文件系统 介绍 Flink把批处理看成是一个流处理的特例,因此可以在底层统一的流处理引擎上,同…...

Odrive源码分析(四) 位置爬坡算法

Odrive中自带一个简单的梯形速度爬坡算法&#xff0c;本文分析下这部分代码。 代码如下&#xff1a; #include <cmath> #include "odrive_main.h" #include "utils.hpp"// A sign function where input 0 has positive sign (not 0) float sign_ha…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...