04、组件介绍

news/2024/11/20 10:32:27/文章来源:https://www.cnblogs.com/wangand/p/18289924

k8s里的资源对象

在k8s里,yaml用来声明API对象的,那么API对象都有哪些?
可以这样查看资源对象
kubectl api-resources

yaml

  • 使用缩进表示层次,缩进不允许使用tab,只能用空格,缩进空格数多少不要求,只要保证同一层级空格数一样多即可
  • 使用 # 书写注释
  • 数组(列表)是使用 - 开头的清单形式
  • 对象(字典)的格式与JSON基本相同,但Key不需要使用双引号。
  • 表示对象的 : 和表示数组的 - 后面都必须要有空格。
  • 可以使用 --- 在一个文件里分隔多个YAML对象

![[yaml基本介绍.png]]

yaml简单使用

01、运行一个pod
可以使用kubectl命令快速启动一个pod
kubectl run pod-demo --image=busybox
说明:Pod名字为pod-demo,镜像为busybox

然后从已知的pod到处yaml文件:
kubectl get pod pod-demo -o yaml > pod-demo.yaml

以下为一个pod的yaml文件示例内容:

apiVersion: v1
kind: Pod
metadata:
  name: ngx-pod
  namespace: aming
  labels:  ## labels字段非常关键,它可以添加任意数量的Key-Value,目的是为了让pod的信息更加详细
    env: dev
spec:  ##用来定义该pod更多的资源信息,比如containers, volume, storage
  containers:  ##定义容器属性
  - image: nginx:1.23.2
    imagePullPolicy: IfNotPresent  ##镜像拉取策略,三种:Always/Never/IfNotPresent,一般默认是IfNotPresent,也就是说只有本地不存在才会远程拉取镜像,可以减少网络消耗。
    name: ngx
    env:  ##定义变量,类似于Dockerfile里面的ENV指令
      - name: os
        value: "Rocky Linux"
    ports:
    - containerPort: 80

这个yaml文件,可以创建一个临时pod导出一个模板yaml文件
然后基于模板yaml去修改即可

03、基于yaml文件创建和删除pod
工作中创建pod,更多的是基于yaml来创建。而非使用bukectl命令
创建:
kubectl apply -f ngx-pod.yaml
删除:
kubectl delete -f ngx-pod.yaml

04、查看pod信息
常见的观察和管理pod方法
列出pod:

列出默认命名空间的pod

kubectl get pod

列出kube-system命名空间的pod

kubectl get pod -n kube-system

查看pod的详细信息:
kubectl describe pod ngx-pod
可以看到pod的相关信息,比如镜像是什么、IP是什么、pod的创建日志等

查看pod日志:

kubectl logs ngx-pod##动态查看日志,类似于tail -f
kubectl logs -f ngx-pod##查看最后100行日志
kubectl logs --tail=100 ngx-pod

一、API资源对象Pod

Pod原理和生命周期

Pod为k8s里最小、最简单的资源对象。它和docker容器还是有一定区别的,它比容器单元更大一些,也就是说在Pod里面会包含容器,一个pod里面可以有多个容器。
![[pod对象01.png]]

1.pod原理

Pod 是在 K8s集群中运行部署应用或服务的最小单元。
在同一个Pod中其实可以同时运行多个容器,这些容器能够共享网络、存储以及 CPU/内存等资源。
每个Pod都有一个特殊的被称为 “根容器” 的Pause容器。Pause容器的主要作用是为Pod中的其他容器提供一些基本的功能,比如网络和PID命名空间的共享、 负责管理Pod内其他容器的生命周期。
网络命名空间共享:pause容器为整个Pod创建一个网络命名空间,Pod内的其他容器都将加入这个网络命名空间。这样,Pod中的所有容器都可以共享同一个IP地址和端口空间,从而实现容器间的紧密通信。
PID命名空间共享:pause容器充当Pod内其他容器的父容器,它们共享同一个PID命名空间。这使得Pod内的容器可以通过进程ID直接发现和相互通信,同时也使得Pod具有一个统一的生命周期。
生命周期管理:pause容器作为Pod中其他容器的父容器,负责协调和管理它们的生命周期。当pause容器启动时,它会成为Pod中其他容器的根容器。当pause容器终止时,所有其他容器也会被自动终止,确保了整个Pod的生命周期的一致性。
保持Pod状态:pause容器保持运行状态,即使Pod中的其他容器暂时停止或崩溃,也可以确保
Pod保持活跃。这有助于Kubernetes更准确地监视和管理Pod的状态。

2.pod生命周期

Pod生命周期包括以下几个阶段:

  • Pending:在此阶段,Pod已被创建,但尚未调度到运行节点上。此时,Pod可能还在等待被调度,或者因为某些限制(如资源不足)而无法立即调度。

  • Running:在此阶段,Pod已被调度到一个节点,并创建了所有的容器。至少有一个容器正在运行,或者正在启动或重启。

  • Succeeded:在此阶段,Pod中的所有容器都已成功终止,并且不会再次重启。

  • Failed:在此阶段,Pod中的至少一个容器已经失败(退出码非零)。这意味着容器已经崩溃或以其他方式出错。

  • Unknown:在此阶段,Pod的状态无法由Kubernetes确定。这通常是因为与Pod所在节点的通信出现问题。

除了这些基本的生命周期阶段之外,还有一些更详细的容器状态,用于描述容器在Pod生命周期中的不同阶段:

  • ContainerCreating:容器正在创建,但尚未启动。
  • Terminating:容器正在终止,但尚未完成。
  • Terminated:容器已终止。
  • Waiting:容器处于等待状态,可能是因为它正在等待其他容器启动,或者因为它正在等待资源可用。
  • Completed:有一种Pod是一次性的,不需要一直运行,只要执行完就会是此状态。

Pod创建

Pod创建

Pod删除

Pod删除

pod资源限制

01、Resource Quota

资源配额Resource Quotas(简称quato)是对namespace进行资源配额,限制资源使用的一种策略。

k8s是一个多用户架构,当多用户或者团队共享一个k8s系统时,SA使用quota防止用户(基于namespace的)的资源抢占,定义好资源分配策略。

Quota应用在namespace上,默认情况下,没有resource quota 的,需要另外创建quota,并且每个namespace最多只能有一个quota对象。

resource quota可限定资源类型,主要有三大类:计算资源、存储资源以及资源个数。

计算资源:
主要针对CPU和内存的限制
limit.cpu | requests.cpu | limits.memory | requests.memory

存储资源:
包括存储资源的总量以及指定storage class的总量
request.storage:存储资源总量,如500Gi
persistentvolumeclaims:pvc的个数

对象数:
即可创建的对象个数
pods,replicationcontrollers,configmaps,secrets,
persistentvolueclaims,services,
services.loadbalancers,service.nodeports

resource quota 依赖于资源管理器,可以使用资源对象limits或者在创建资源对象时为pod设置资源限制(resources),如果不设置,资源对象无法创建。

当该namespace中的任意个额度达到预设Quota时,将无法创建资源对象。

resource quota示例

cat > quota.yaml <<EOF
apiVersion: v1
kind: ResourceQuota
metadata:namespace: amingname: aming-quotaspec:hard:pods: 50 ## 该命名空间里最多支持启动50个Podsrequests.cpu: 0.5 ##最低保证0.5个CPU资源requests.memory: 512Mi ##最低保证512M内存limits.cpu: 5 ##最多使用5核CPUlimits.memory: 16Gi ##最多使用16G内存configmaps: 20 ##最多支持20个configMapspersistentvolumeclaims: 20 ##最多支持20个pvcreplicationcontrollers: 20 ##最多支持20个replicationControllerssecrets: 20 ##最多支持20个secretsservices: 50 ##最多支持50个services
EOF##############################
## 生效
kubectl apply -f quota.yaml## 查看
kubectl get quota -n aming

测试

为了显示限额效果,修改quota.yaml,将pod限制数改为5,其它先删除掉

命令行创建deployment,指定Pod副本为7

kubectl create deployment testdp --image=nginx:1.23.2 -n aming --replicas=7

查看deployment和pod

kubectl get deploy,po -n aming

02、pod 的 limits 和 requests

resources quota 是针对namespace下面所有的pod的限制,而pod本身也有限制。

eg:

cat > quota-pod.yaml <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: quota-pod
  namespace: amingspec:
  containers:
  - image: nginx:1.23.2
    name: ngx
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 80
    resources:
      limits:
        cpu: 0.5  ##限制Pod CPU资源最多使用500m,这里的0.5=500m,1=1000m
        memory: 2Gi ##限制内存资源最多使用2G
      requests:
        cpu: 200m  ##K8s要保证Pod使用的最小cpu资源为200m,如果node上资源满足不了,则不会调度到该node上
        memory: 512Mi ##K8s要保证Pod使用最小内存为512M,如果node上资源满足不了,则不会调度到该node上
EOF

limits重在限制,意思为不允许超过这么多
requests重在保障,意思是至少要给到这么多

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/740587.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营第25天 | 491.递增子序列

491.递增子序列 给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2。 示例: 输入: [4, 6, 7, 7] 输出: [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7, 7], [7,7], [4,7,7]] 说明: 给定数组的长度不会超过15。 数组中的整数范围是…

零基础 用unity做一款FPS射击游戏-下载安装unity(1)

【【Unity教程】零基础制作一个简单的FPS游戏案例-基于Unity2023】https://www.bilibili.com/video/BV1gH4y1575r?p=2&vd_source=5458d6a330cf989012a60998192e4cc2 这是我所看的教程 首先要下载Unity Hub(管理各种版本的unity) 进入 Unity官方下载_Unity最新版_从Unity …

离线安装tcpdump

链接:https://pan.baidu.com/s/1Jbos9YwIgt6oETmBA5lezQ 提取码:fwgj 检查gcc环境若无gcc环境 执行以下命令: tar -xvf gcc.tar cd gcc rpm -Uvh *.rpm --nodeps –forcem4包安装tar -xvf m4-1.4.19.tar.gz cd m4-1.4.19 ./configure make make installbison包安装tar -xvf …

关于苹果设备接力失效的处理办法

处理苹果设备接力无法使用的问题RT 简述 遇到该问题的原因可能有很多,甚至可能只是因为升级了一次系统。 网上有很多乱七八糟杂七麻八的办法,不可行,于是自己写一份做之后的留档。 关于这个问题已经咨询过了apple的客户支持部门,看起来他们也不知道该怎么做,试了一圈之后没…

当非遗遇上AI,简直美不可言!

本文由 ChatMoney团队出品 大家好,今天我要跟大家分享的是关于非遗与AI结合!我是用ChatmoneyAI-ChatAI聊天系统AI绘画制作的,你敢相信这些照片都是AI生成的吗?一、引言: 随着科技的飞速发展,传统文化与现代科技的融合愈发引人注目。最近,非遗与人工智能(AI)的奇妙结合…

Kutools-for-Excel学习版下载

一、软件介绍在处理 Excel 文件时,经常会遇到一些繁琐但又不可避免的操作,严重影响到文档编辑效率。Kutools for Excel 与 Excel 2007 / 2010 / 2013 / Microsoft 365 的界面完美融合,超过 300+ 的功能都提供了详细操作提示,即使是从未接触过的功能,也能立马上手使用,是你…

MRU算法实现

MRU(Most Recently Used)算法是一种缓存替换策略,与LRU(Least Recently Used)算法相反。MRU算法优先移除最近使用的缓存项,而保留较久未使用的缓存项。MRU算法适用于某些特定的访问模式,例如当数据访问具有较强的局部性时,MRU可能比LRU更有效。 基本原理 MRU算法的核心…

py-》生成自定义文件大小

生成自定义文件大小import os import time# 获取username, 如chinaren def getusername():namelist = os.popen(echo %username%).readlines()username = namelist[0].replace("\n", "")# 获取当前的usernamereturn username# 获取时间和日期 def getnowda…

【可视化还能免费做?!】用这款免费可视化工具做智慧港口建设,实现港口统一调度

在智慧港口的建设中,实现港口的统一调度是一项关键任务。山海鲸可视化,这款免费可视化工具,通过其卓越的功能和特色,为智慧港口的建设提供了强大的支持。从智慧港口的需求出发,结合船舶调度和货物转运的需求,山海鲸可视化能够实现二三维融合,将二维面板与三维场景无缝结…

你真的了解Java内存模型JMM吗?

面试连环call: 1. 什么是Java内存模型(JMM)? 为什么需要JMM? 2. Java线程的工作内存和主内存各自的作用? 3. Java缓存一致性问题? 4. Java的并发编程问题?哈喽,大家好🎉,我是世杰。 本文我为大家介绍面试官经常考察的「Java内存模型JMM相关内容」面试连环call什么是J…

Lucene-7.4.0简要介绍和初学者快速上手

通过一个自建的索引案例,分几篇记录Lucene使用中的心得和存在的问题。 本文的目的是能让初学者快速学会Lucene的使用,所以所涉及的原理都会十分粗浅,而不讨论更深层次的实现过程。 一、什么是Lucene 首先看一下摘自百度百科的定义:“Lucene是一套用于全文检索和搜寻的开源程…

Ubuntu 2204 安装使用 mariadb

1. 查看mariadb版本,实际上使用的还是mysqld命令: mysqld --version 2. 3. 4. 5. 6. 7.