云原生系列(七)

简介: 云原生系列(七)

kubernetes资源对象的操作实操

在应用层面,所有的K8S资源对象都叫做API对象。

在k8s中,推荐使用配置文件运行一个或者多个容器,当然也支持命令行方式。API对象的配置文件可以是yaml格式的文件,也可以是json格式的文件。

yaml文件比较易懂,因此后面都会使用yaml风格的文件去描述一个k8s对象的各种属性,即:容器的定义,参数,配置,统统记录在一个yaml文件。

K8S对象yaml的构成:例如

在上述的.yaml文件中,如下字段是必须填写的:

①、apiVersion:用来创建对象时所使用的Kubernetes API版本

②、kind:被创建对象的类型

③、metadata:用于唯一确定该对象的元数据:包括name和namespace,如果namespace为空,则默认值为default。

④、spec描述对该对象的期望值

不同类型的kubernetes,其spec对象的格式不同(含有不同的内嵌字段),通过api手册官方文档可以查看kubernetes对象的字段和描述。

当在Kubernetes中创建一个对象时,必须提供对象规约spec,例如:

1、名称

2、使用什么镜像

3、多少个副本

4、挂载的文件或目录

5、使用多少资源等

spec是静态的,是存在yaml文件中的,

关于yaml文件的分割

多个资源对象的yaml文件,比如Deployment和Service,可以放在一个文件,可以放在不同的yaml文件中单独执行。如果放在同一个yaml文件中,需要用连续的三个短横线隔开

关于对象的CRUD以及对象Kubernetes系统的持久化实体,通过ercd持久化

①、操作kubernetes对象-无论是创建,修改,或者删除-需要使用kubernetes API.比如,当使用kubectl命令行接口时,CLI会执行必要的kubernetes API调用。

②、Kubernetes对象指的是Kubernetes系统持久化实体,所有这些对象合起来,代表了集群的实际情况。

常规的应用里,我们的应用程序的数据存储在数据库中,Kubernetes将其数据以Kubernetes对象的形式通过api server存储在etcd中。

具体来说,这些数据(Kubernetes对象)描述了:

①、集群中运行了哪些容器化应用程序(以及在哪个节点上运行)

②、集群中对应用程序可用的资源(网络,存储等)

③、应用程序相关的策略定义,例如:重启策略,升级策略,容错策略。

④、其他Kubernetes管理应用程序时所需要的信息

查看apiversion可用版本

在k8s中查看apiversion可用版本的命令如下:

a1d361228af87c5b8e0e35750661d37b.png

各种apiversion的含义

①、alpha

1、该软件可能包含错误,启用一个功能可能会导致bug

2、随时可能会丢弃对该功能的支持,恕不另行通知

②、beta

1、软件经过很好的测试,启用功能被认为是安全的

2、默认情况下功能是开启的

3、细节可能会改变,但功能在后续版本不会被删除。

③、stable

1、该版本名称命名方式:vX这里的X是一个整数

2、稳定版本,放心使用

3、将出现在后续发布的软件版本中

④、v1

1、Kubernetes API的稳定版本,包含了很多核心对象:pod,service等

⑤、apps/v1beta2

1、在Kubernetes1.8版本中,新增了apps/v1beta2的概念,apps/v1beta1同理。DaemonSet,Deployment,ReplicaSet和StatefulSet的当时版本迁入apps/v1beta2,兼容原有的extensions/v1beta1。

⑥、apps/v1

1、在kubernetes1.9版本中,引入了apps/v1,deployment等资源从extensions/v1beta1,apps/v1beta1和apps/v1beta2迁入apps/v1,原来的v1beta1等被废弃。

apps/v1代表:包含一些通用的应用层api组合,如:Deployments,RollingUpdates,andReplicaSets。

⑦、batch/v1

1、代表job相关的api组合

在Kubernetes1.8版本中,新增了batch/v1beta1,后CronJob已经迁移到了batch/v1beta1,然后再迁入batch/v1

⑧、autoscaling/v1

1、代表自动扩缩容的api组合,kubernetes1.8版本中引入,这个组合中后续的alpha和beta版本将支持基于memory使用量,其他监控指标进行扩缩容。

⑨、extensions/v1beta1

1、deployment等资源在1.6版本时放在这个版本中,后迁入到apps/v1beta2,再到apps/v1中统一管理。

⑩、certificates.k8s.io/v1beta1:安全认证相关的api组合

     authentication.k8s.io/v1:资源鉴权相关的api组合

补充说明:Kubernetes的官方文档中并没有对apiVersion的详细解释,而且因为K8S本身版本也在快速迭代,有些资源在低版本还在beta阶段,到了高版本就变成了stable。

获取各个属性字段的含义的命令如下:

Kubernetes对象的定义字段,非常多;如果需要了解各个属性的字段的含义,有两个方式:方式一:从命令行获取方式;方式二:官方API文档方式

方式一:从命令行获取方式:

kubectl explain 查看 创建对象所使用的API版本。

例如:查看pod使用的API版本如下

ab8592d7c61dc84901149ccb4f5af50c.png

管理K8S对象:

98f24093e2e3b80ef66394130a71fdec.png

注意:同一个Kubernetes对象应该只使用一种方式管理,否则可能会出现不可预期的结果。

下面使用指令性对象的配置来管理k8s资源对象的CRUD的操作

首先定义一个对象文件:如下

apiVersionapps/v1  #每种资源对象都归属到版本下的   可以通过kubectl  explain  deployment.apiVersion来查看#做pod的部署管理的  对Pod进行管理,可以有多个 副本的数量  所以在pod上有标号kind: Deployment  #根据标签做副本的调度所以要加上选择器metadata:  name: nginx-gateway-deployment  labels:    app: nginx-gateway #为该Deployment设置key为app,value为nginx的标签    #定义预期的行为spec:  replicas: 1 #pod的副本数量  selector: #标签选择器,与上面的标签共同作用 根据条件来管理副本,做副本的调度    matchLabels: #选择包含标签app:nginx的资源  根据标签查副本      app: nginx-gateway  #接收流量的pod所以要加上标签  template: #这是选择或创建的Pod的模板    metadata: #Pod的元数据  接收流量的和调度的      labels: #Pod的标签,上面的selector即选择包含标签app:nginx的Pod        app: nginx-gateway    spec: #期望Pod实现的功能(即在pod中部署)      hostAliases:        - ip: "192.168.49.1"          hostnames:            - "cdh1"      #下面可以定义多个容器,同属于一个pod      containers: #生成容器的container,与docker中的container是同一种        - name: nginx-gateway          image: harbor.daemon.io/demo/nginx-gateway:1.0-SNAPSHOT #使用镜像nginx 创建container,该container默认8008端口可访问          ports:            - containerPort: 8008  # 开启本容器的8008端口可访问              #和etc的profile文件的配置是一样的          env:            - name: env_flag              value: flag224455555555555333

---
apiVersion: v1#做pod的传输层的负载均衡的  4层的kind: Servicemetadata:  name: nginx-gateway-svcspec:  selector:    app: nginx-gateway    #选择包含标签app:nginx的资源  也加上标签:根据标签做流量的分发 也要加上选择器
  ports:    - port: 8008 #写nginx本身端口      protocol: TCP      targetPort: 8008 # 容器nginx对外开放的端口 上面的dm已经指定了      nodePort32701 #外网访问的端口   

部署资源文件

57f89d0414269a39cb584232ab989c61.png

查看pod:

6f1eff3e4a1c98ffab10817dab0daec9.png

查看service:

9e5b8098599d0289ed577435853c3383.png

我们如果访问svc的话,需要用minikube集群ip:32701来访问svc,然后svc把流量打到标签为nginx-gateway的Pod上。然后由对应的pod来处理

相关文章
|
7天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
4天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2463 14
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
|
4天前
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
1499 14
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
|
1月前
|
运维 Cloud Native Devops
一线实战:运维人少,我们从 0 到 1 实践 DevOps 和云原生
上海经证科技有限公司为有效推进软件项目管理和开发工作,选择了阿里云云效作为 DevOps 解决方案。通过云效,实现了从 0 开始,到现在近百个微服务、数百条流水线与应用交付的全面覆盖,有效支撑了敏捷开发流程。
19273 29
|
1月前
|
人工智能 自然语言处理 搜索推荐
阿里云Elasticsearch AI搜索实践
本文介绍了阿里云 Elasticsearch 在AI 搜索方面的技术实践与探索。
18822 20
|
1月前
|
Rust Apache 对象存储
Apache Paimon V0.9最新进展
Apache Paimon V0.9 版本即将发布,此版本带来了多项新特性并解决了关键挑战。Paimon自2022年从Flink社区诞生以来迅速成长,已成为Apache顶级项目,并广泛应用于阿里集团内外的多家企业。
17515 13
Apache Paimon V0.9最新进展
|
6天前
|
编解码 JSON 自然语言处理
通义千问重磅开源Qwen2.5,性能超越Llama
击败Meta,阿里Qwen2.5再登全球开源大模型王座
361 11
|
1月前
|
存储 人工智能 前端开发
AI 网关零代码解决 AI 幻觉问题
本文主要介绍了 AI Agent 的背景,概念,探讨了 AI Agent 网关插件的使用方法,效果以及实现原理。
18697 16
|
2天前
|
算法 Java
JAVA并发编程系列(8)CountDownLatch核心原理
面试中的编程题目“模拟拼团”,我们通过使用CountDownLatch来实现多线程条件下的拼团逻辑。此外,深入解析了CountDownLatch的核心原理及其内部实现机制,特别是`await()`方法的具体工作流程。通过详细分析源码与内部结构,帮助读者更好地理解并发编程的关键概念。
|
2天前
|
SQL 监控 druid
Druid连接池学习
Druid学习笔记,使用Druid进行密码加密。参考文档:https://github.com/alibaba/druid
195 82