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的…...

使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
HTML前端开发:JavaScript 获取元素方法详解
作为前端开发者,高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法,分为两大系列: 一、getElementBy... 系列 传统方法,直接通过 DOM 接口访问,返回动态集合(元素变化会实时更新)。…...
用鸿蒙HarmonyOS5实现国际象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的国际象棋小游戏的完整实现代码,使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├── …...