k8s API资源对象
API资源对象Deployment
最小的资源是pod,deployment是多个pod的集合(多个副本实现高可用、负载均衡等)。
使用yaml文件来配置、部署资源对象。
Deployment YAML示例:
vi ng-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: myngname: ng-deploy
spec:replicas: 2 ##副本数selector:matchLabels:app: myngtemplate:metadata:labels:app: myngspec:containers:- name: myngimage: nginx:1.23.2ports:- name: myng-portcontainerPort: 80
获取pod所在节点:kubectl get po -o wide
,或者kebectl describe po xxxx
。
API资源对象Service
作用:对外提供访问端口。
Service简称(svc) YAML示例:
vi ng-svc.yaml
apiVersion: v1
kind: Service
metadata:name: ngx-svc
spec:selector:app: myngports:- protocol: TCPport: 8080 ##service的porttargetPort: 80 ##pod的port
三种Service 类型:
1)ClusterIP
该方式为默认类型,即,不定义type字段时(如上面service的示例),就是该类型。
spec:selector:app: myngtype: ClusterIPports:- protocol: TCPport: 8080 ##service的porttargetPort: 80 ##pod的port
2)NodePort
如果想直接通过k8s节点的IP直接访问到service对应的资源,可以使用NodePort,Nodeport对应的端口范围:30000-32767
spec:selector:app: myngtype: NodePortports:- protocol: TCPport: 8080 ##service的porttargetPort: 80 ##pod的portnodePort: 30009 ##可以自定义,也可以不定义,它会自动获取一个端口
3)LoadBlancer
这种方式,需要配合公有云资源比如阿里云、亚马逊云来实现,这里需要一个公网IP作为入口,然后来负载均衡所有的Pod。
spec:selector:app: myngtype: LoadBlancerports:- protocol: TCPport: 8080 ##service的porttargetPort: 80 ##pod的port
API资源对象DaemonSet
类似deployment。deamonset作用是在集群的每个节点上运行且只运行一个pod。
Daemonset和Deployment的差异很小,除了Kind不一样,还需要去掉replica配置
vi ds-demo.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:labels:app: ds-demoname: ds-demo
spec:selector:matchLabels:app: ds-demotemplate:metadata:labels:app: ds-demospec:containers:- name: ds-demoimage: nginx:1.23.2ports:- name: mysql-portcontainerPort: 80
只在两个node节点上启动了pod,没有在master上启动,这是因为默认master有限制。
kubectl describe node k8s01 |grep -i 'taint'
Taints: node-role.kubernetes.io/control-plane:NoSchedule
说明:Taint叫做污点,如果某一个节点上有污点,则不会被调度运行pod。
为了解决此问题 改一下YAML配置:
vi ds-demo.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:labels:app: ds-demoname: ds-demo
spec:selector:matchLabels:app: ds-demotemplate:metadata:labels:app: ds-demospec:tolerations:- key: node-role.kubernetes.io/control-planeeffect: NoSchedulecontainers:- name: ds-demoimage: nginx:1.23.2ports:- name: mysql-portcontainerPort: 80
API资源对象StatefulSet
pod根据有误数据存储分为有状态、无状态。无状态适合不会产生重要数据的应用,比如nginx、tomcat等。有状态会产生重要数据,比如MySQL、redis等。
deployment、daemonset适合做无状态,statefulset适合做有状态。
statefulset涉及到数据持久化,用到storageclass资源对象。下面实验先创建基于NFS的storageclass。
新主机配置NFS服务:
cat /etc/exports
/data/nfs 192.168.56.0/24(rw,sync,no_root_squash)三台k8s主机安装nfs
yum install -y nfs-utils
然后挂载nfs目录
showmount -e 192.168.56.124
Sts示例
vi redis-sts.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:name: redis-stsspec:serviceName: redis-svc ##这里要有一个serviceName,Sts必须和service关联volumeClaimTemplates:- metadata:name: redis-pvcspec:storageClassName: nfs-clientaccessModes:- ReadWriteManyresources:requests:storage: 500Mireplicas: 2selector:matchLabels:app: redis-ststemplate:metadata:labels:app: redis-stsspec:containers:- image: redis:6.2name: redisports:- containerPort: 6379volumeMounts:- name: redis-pvcmountPath: /data
vi redis-svc.yaml
apiVersion: v1
kind: Service
metadata:name: redis-svcspec:selector:app: redis-stsports:- port: 6379protocol: TCPtargetPort: 6379
kubectl apply -f redis-sts.yaml -f redis-svc.yaml
API资源对象Job
作用:一次性运行后就推出的pod。比如备份一次数据库这样的单次任务。
先来生成一个YAML文件:
kubectl create job job-demo --image=busybox --dry-run=client -o yaml > job-demo.yaml
vi job-demo.yaml ##编辑此配置
apiVersion: batch/v1
kind: Job
metadata:name: job-demo
spec:template: ##模板,基于此模板来创建pod,它用来定义pod的属性,比如containerspec:restartPolicy: OnFailure ##定义Pod运行失败时的策略,可以是OnFailure和Never,其中OnFailure表示失败的话需要重启容器,Never表示失败的话不重启容器,而是重新生成一个新的Podcontainers:- image: busyboxname: job-democommand: ["/bin/echo"]args: ["hellow", "world"]
几个特殊字段:
- activeDeadlineSeconds,设置 Pod 运行的超时时间。
- backoffLimit,设置 Pod 的失败重试次数。
- completions,Job 完成需要运行多少个 Pod,默认是 1 个。
- parallelism,它与 completions 相关,表示允许并发运行的 Pod 数量,避免过多占用资源。
vi myjob.yaml
apiVersion: batch/v1
kind: Job
metadata:name: sleep-jobspec:activeDeadlineSeconds: 15 #15s就超时backoffLimit: 2 #失败重试2次就放弃completions: 4 #要运行4个pod,才算完成parallelism: 2 #允许并发运行2个podtemplate:spec:restartPolicy: Nevercontainers:- image: busyboxname: echo-jobimagePullPolicy: IfNotPresentcommand:- sh- -c- sleep 10; echo done
API资源对象CronJob
CronJob简称(cj)是一种周期运行的Pod,比如有些任务需要每天执行一次,就可以使用CronJob。
先来生成一个YAML文件:
kubectl create cj cj-demo --image=busybox --schedule="" --dry-run=client -o yaml > cj-demo.yaml
vi job-demo.yaml ##编辑此配置
apiVersion: batch/v1
kind: CronJob
metadata:name: cj-demospec:schedule: '*/1 * * * *' #核心配置jobTemplate:spec:template:spec:restartPolicy: OnFailurecontainers:- image: busyboxname: cj-demoimagePullPolicy: IfNotPresentcommand: ["/bin/echo"]args: ["hello", "world"]
API资源对象Endpoint
简称ep,该资源是和service一一对应的,也就是说每个service都会对应一个endpoint。ep可以理解成service后端对应的资源。
有时候k8s里的pod需要访问外部资源,比如访问外部mysql(非k8s内的pod),就可以定义一个对外资源的endpoint,然后再定义一个service,就可以让k8s里的其他pod访问了(将mysql内化成k8s pod)。
kubectl get svc
kubectl get ep
vim testep.yaml
apiVersion: v1
kind: Endpoints
metadata:name: external-mysql
subsets:- addresses:- ip: 192.168.222.128ports:- port: 3306---
apiVersion: v1
kind: Service ##注意,该service里并不需要定义selector,只要Service name和Endpoint name保持一致即可
metadata:name: external-mysql
spec:ports:- port: 3306
API资源对象ConfigMap
简称cm,用来存储配置信息,比如服务端口、运行参数、文件路径等。
vi mycm.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: mycmdata:DATABASE: 'db'USER: 'wp'PASSWORD: '123456'ROOT_PASSWORD: '123456'
创建cm
kubectl apply -f mycn.yaml查看
kubectl get cm
kubectl describe cm mycm
在其他pod里引用configmap
vi testpod.yaml
apiVersion: v1
kind: Pod
metadata:name: testpodlabels:app: testpodspec:containers:- image: mariadb:10name: mariaimagePullPolicy: IfNotPresentports:- containerPort: 3306envFrom: ##将cm里的字段全部导入该pod- prefix: 'MARIADB_' ##将导入的字段名前面自动加上前缀,例如MARIADB_DATABASE, MARIADB_USERconfigMapRef: ##定义哪个cmname: mycm
测试
kubectl exec -it testpod -- bashecho $MARIADB_USER
API资源对象Secret
secret和cm的结构和用法类似,secret对象细分出很多类,比如:
- 访问私有镜像仓库的认证信息
- 身份识别的凭证信息
- HTTPS通信的证书和私钥
- 一般的机密信息(格式由用户自行解释)
YAML示例:
vi mysecret.yaml
apiVersion: v1
kind: Secret
metadata:name: mysecretdata:user: YW1pbmc= ## echo -n "rocky_k8s"|base64passwd: bGludXgxMjM= ## echo -n "linux123"|base64
查看
kubectl apply -f mysecret.yaml
kubectl get secret
kubectl describe secret mysecret
在其他pod中调用secret
vi testpod2.yaml
apiVersion: v1
kind: Pod
metadata:name: testpod2spec:containers:- image: busyboxname: busyimagePullPolicy: IfNotPresentcommand: ["/bin/sleep", "300"]env:- name: USERNAMEvalueFrom:secretKeyRef:name: mysecretkey: user- name: PASSWORDvalueFrom:secretKeyRef:name: mysecretkey: passwd
相关文章:

k8s API资源对象
API资源对象Deployment 最小的资源是pod,deployment是多个pod的集合(多个副本实现高可用、负载均衡等)。 使用yaml文件来配置、部署资源对象。 Deployment YAML示例: vi ng-deploy.yaml apiVersion: apps/v1 kind: Deployment…...

GB/T28181规范解读之编码规则详解
GB/T28181,即《安全防范视频监控联网系统信息传输、交换、控制技术要求》,是我国安防行业的重要标准之一。该标准详细规定了城市监控报警联网系统中信息传输、交换、控制的互联结构、通信协议结构,以及传输、交换、控制的基本要求和安全性要求…...

Vue封装的过度与动画(transition-group、animate.css)
目录 1. Vue封装的过度与动画1.1 动画效果11.2 动态效果21.3 使用第三方动画库animate.css 1. Vue封装的过度与动画 作用:在插入、更新或移除DOM元素时,在合适的时候给元素添加样式类名 1.1 动画效果1 Test1.vue: transition内部只能包含一个子标签。…...

免费云服务器申请教程
免费云服务器的申请流程通常包括以下几个步骤,但请注意,不同云服务提供商的具体步骤可能略有不同。以下是一个通用的申请流程: 一、选择合适的云服务提供商 首先,需要选择一家提供免费云服务器服务的云服务提供商。 免费云服务器汇…...

Spring Cloud Gateway中的常见配置
问题 最近用到了Spring Cloud Gateway,这里记录一下这个服务的常见配置。 spring:data:redis:host: ${REDIS_HOST:xxx.xxx.xxx.xxx}port: ${REDIS_PORT:2345wsd}password: ${REDIS_PASS:sdfsdfgh}database: ${REDIS_DB:8}session:redis:flush-mode: on_savenamespa…...

SelectDB 多计算集群核心设计要点揭秘与场景应用
需求起源 SelectDB 设计多计算集群架构初衷主要源于两类典型的使用场景: 写入与读取隔离:传统数仓架构中,数据的写入和读取在同一个计算集群,当遇到业务写入高峰期或突增的写入压力时,容易因资源相互抢占影响查询服务…...

Docker 清理和查看镜像与容器占用情况
查看容器占用磁盘大小 docker system df 查看单个image、container大小: docker system df -v 清理所有废弃镜像与Build Cache docker system prune -a...

如何在Android 12 aosp系统源码中添加三指下滑截图功能
如何在Android 12 aosp系统源码中添加三指下滑截图功能 系统中截图api非常简单: private static ScreenshotHelper sScreenshotHelper;sScreenshotHelper new ScreenshotHelper(mContext);//调用 sScreenshotHelper.takeScreenshot(WindowManager.TAKE_SCREENSHO…...

使用SQL语句查询MySQL数据表
6.1 创建单表基本查询 1.Select 语句的语法格式及其功能 (1)Select 语句的一般格式。 Select < 字段名称或表达式列表 > From < 数据表名称或视图名称 > [ Where < 条件表达式 > ] [ Group By < 分组的字段名称…...

【AI绘画、换脸、写作、办公】从零开始:使用AIStarter启动器发布AI应用
随着人工智能技术的快速发展,越来越多的开发者希望通过自己的创意来构建和分享AI应用。AIStarter启动器正是为此而设计的一个强大工具,它可以帮助开发者轻松打包并发布自己的AI应用项目。本文将详细介绍如何使用AIStarter启动器来实现这一目标。 注册账…...

eeprom使用 cubemx STM32F407ZGT6【IIC驱动AT24C02】
存储器的简单介绍 ROM(只读存储器)、RAM(随机存取存储器)、Flash(闪存)、和EEPROM(电可擦可编程只读存储器)是四种不同类型的存储介质。ROM用于存储固件或永久数据,不易…...

STL-stack/queue/deque(容器适配器)
目录 编辑 STL-stack 150. 逆波兰表达式求值 stack queue std::stack deque 性能测试 结构 STL-stack 栈的压入、弹出序列_牛客题霸_牛客网输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假。题目…...

NVDLA专题15:Runtime environment-核心模式驱动
核心模式驱动(Kernel Mode Driver) KMD主入口点在内存中接收一个推理作业,从多个可用的作业中选择要执行的作业(如果在多进程系统上),并将其提交给核心引擎调度程序。该核心引擎调度程序负责处理来自NVDLA的中断,调度每…...

计算机毕业设计选题推荐-班级管理系统-教务管理系统-Java/Python项目实战
✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…...

推荐一款开源、高效、灵活的Redis桌面管理工具:Tiny RDM!支持调试与分析功能!
1、引言 在大数据和云计算快速发展的今天,Redis作为一款高性能的内存键值存储系统,在数据缓存、实时计算、消息队列等领域发挥着重要作用。然而,随着Redis集群规模的扩大和复杂度的增加,如何高效地管理和运维Redis数据库成为了许…...

Java项目: 基于SpringBoot+mybatis+maven新闻推荐系统(含源码+数据库+毕业论文)
一、项目简介 本项目是一套基于SpringBootmybatismaven新闻推荐系统 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美观、操作简单、…...

《Python读取 Excel 数据》
关于如何在 Python 中读取excel数据。 方法一: 我们可以使用 pandas 库来读取 Excel 数据。 通过以下命令安装: pip install pandas 以下是读取 Excel 数据的代码: import pandas as pd # 读取 Excel 文件 data pd.read_excel(…...

Druid连接池
一.什么是Druid连接池? Druid 是阿里巴巴开源的一款数据库连接池(Database Connection Pool),具有高效、稳定、安全等特点。除了连接池的功能外,Druid 还提供了强大的 SQL 监控、统计、日志记录、防火墙等功能。它主要…...

Python3网络爬虫开发实战(14)资讯类页面智能解析
文章目录 一、详细页智能解析算法1.1 提取标题1.2 提取正文1.3 提取时间 二、列表页智能解析算法三、智能分辨列表页和详细页四、完整的库4.1 参考文献4.2 Project 页面智能解析就是利用算法从页面的 HTML 代码中提取想要的内容,算法会自动计算出目标内容在代码中的…...

社交媒体的未来:Facebook如何通过AI技术引领潮流
在数字化时代的浪潮中,社交媒体平台不断演变,以适应用户需求和技术发展的变化。作为全球领先的社交媒体平台,Facebook在这一进程中扮演了重要角色。尤其是人工智能(AI)技术的应用,正在深刻地改变Facebook的…...

Java 面试题:从源码理解 ThreadLocal 如何解决内存泄漏 ConcurrentHashMap 如何保证并发安全 --xunznux
文章目录 ThreadLocalThreadLocal 的基本原理ThreadLocal 的实现细节内存泄漏源码使用场景 ConcurrentHashMap 怎么实现线程安全的CAS初始化源码添加元素putVal方法 ThreadLocal ThreadLocal 是 Java 中的一种用于在多线程环境下存储线程局部变量的机制,它可以为每…...

使用人力劳务灵工安全高效的发薪工具
实现企业、劳务、蓝领工人三方的需求撮合、劳务交付、日结考勤、薪费结算一体化闭环,全面为人力企业降低用工成本、提高用工效率。 发薪难 日结/周结/临时工人员难管理,考勤难统计,发薪耗时间 发薪慢 人工核算时间长,微信转账发薪容易限额…...

使用W外链创建微信短链接的方法
创建短链是将长链接转换为更短、更易于分享和记忆的链接的过程。W外链是一个提供短链接生成服务的平台,它支持多种功能,包括但不限于: 短链制作:用户可以将长链接缩短为易于分享的短链接,还支持自定义短链后缀。防红防…...

【人工智能学习笔记】4_4 深度学习基础之生成对抗网络
生成对抗网络(Generative Adversarial Network, GAN) 一种深度学习模型,通过判别模型(Discriminative Model)和生成模型(Generative Model)的相互博弈学习,生成接近真实数据的数据分…...

基于MinerU的PDF解析API
基于MinerU的PDF解析API - MinerU的GPU镜像构建 - 基于FastAPI的PDF解析接口支持一键启动,已经打包到镜像中,自带模型权重,支持GPU推理加速,GPU速度相比CPU每页解析要快几十倍不等 主要功能 删除页眉、页脚、脚注、页码等元素&…...

猫头虎分享:看完百度内部讲话,整理出李彦宏关于大模型的10个判断
🦁 猫头虎分享:看完百度内部讲话,整理出李彦宏关于大模型的10个判断 📢 大家好!我是猫头虎技术团队的首席写作官。今天为大家带来一篇重量级内容:从百度内部讲话中,整理了李彦宏对大模型的10大…...

vue3透传、注入
属性透传 传递给子组件时,没有被子组件消费的属性或事件,常见的如id、class 注意1 1.class、style是合并的,style中如果出现重复的样式,以透传属性为准2.id属性是以透传属性为准,其他情况透传属性名相同,…...

数模原理精解【9】
文章目录 混合高斯分布概述定义性质参数估计计算Julia实现 详述定义原理 核心参数1. 均值(Means)2. 协方差矩阵(Covariance Matrices)3. 权重(Weights)4. 聚类个数(高斯模型个数,K&a…...

Java中的linkedList类及与ArrayList的异同
继承实现关系 public class LinkedList<E>extends AbstractSequentialList<E>implements List<E>, Deque<E>, Cloneable, java.io.Serializable 由于涉及的类过多,画起来过于繁琐,这里只展示最外层的继承实现关系 可以看到它是…...

【精选】文件摆渡系统:跨网文件传输的安全与效率之选
文件摆渡系统可以解决哪些问题? 文件摆渡系统(File Shuttle System)主要是应用于不同网络、网段、区域之间的文件数据传输流转场景, 用于解决以下几类问题: 文件传输问题: 大文件传输:系统可…...