首页 > 其他分享 >04、组件介绍

04、组件介绍

时间:2024-07-08 15:08:23浏览次数:15  
标签:容器 04 kubectl quota 介绍 yaml 组件 Pod pod

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: aming
  name: aming-quota

spec:
  hard:
    pods: 50 ## 该命名空间里最多支持启动50个Pods
    requests.cpu: 0.5 ##最低保证0.5个CPU资源
    requests.memory: 512Mi ##最低保证512M内存
    limits.cpu: 5 ##最多使用5核CPU
    limits.memory: 16Gi ##最多使用16G内存
    configmaps: 20 ##最多支持20个configMaps
    persistentvolumeclaims: 20 ##最多支持20个pvc
    replicationcontrollers: 20 ##最多支持20个replicationControllers
    secrets: 20 ##最多支持20个secrets
    services: 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: aming

spec:
  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重在保障,意思是至少要给到这么多

标签:容器,04,kubectl,quota,介绍,yaml,组件,Pod,pod
From: https://www.cnblogs.com/wangand/p/18289924

相关文章

  • Ubuntu 2204 安装使用 mariadb
    1.查看mariadb版本,实际上使用的还是mysqld命令:mysqld--version 2.安装完成之后它的生命周期依然由systemctl进行维护,服务名为:mariadb.servicectlstatusmariadb.service 3.它的服务端配置文件位于 /etc/mysql/mariadb.conf.d/50-server.cnf,修改端口也是在里面,一看......
  • Lucene-7.4.0简要介绍和初学者快速上手
    通过一个自建的索引案例,分几篇记录Lucene使用中的心得和存在的问题。本文的目的是能让初学者快速学会Lucene的使用,所以所涉及的原理都会十分粗浅,而不讨论更深层次的实现过程。一、什么是Lucene首先看一下摘自百度百科的定义:“Lucene是一套用于全文检索和搜寻的开源程式库,由Apac......
  • OC-NSArray的基本介绍
    NSArray是不可变的;存储不同类型的对象。这意味着一个NSArray可以同时包含NSString、NSNumber、NSDictionary等不同类型的对象。同时只能存储对象,不能直接存储基本数据类型(如int、float等)。如果需要存储基本数据类型,应该先将它们封装为相应的对象类型(如NSNumber或NSValue)。......
  • 打卡信奥刷题(267)用Scratch图形化工具信奥P10415 [普及组][蓝桥杯 2023 国 A] 切割
    [蓝桥杯2023国A]切割题目描述给定一个W×HW\timesHW×H的长方形,两边长度均为整数。小蓝想把它切割为......
  • AI绘画Stable Diffusion:ControlNet组件—Scribble(涂鸦)赋予用户精细控制权,让涂鸦草图焕
    大家好,我是画画的小强今天给大家分享一下AI绘画StableDiffusion当中的:ControlNetScribble组件,**Scribble(涂鸦)**技术是一种能够为用户提供独特的手动注释或标记图像(如:涂鸦、简笔画等)的方法技术,可被用来引导SD图像生成过程。ControlNetScribble简介ControlNetScribble......
  • iOS开发-WKWebView的介绍与基本使用
    WKWebView是iOS开发中用于显示网页内容的组件,它是在iOS8中引入的,作为UIWebView的替代品。WKWebView提供了更高的性能和更多的功能,它是基于WebKit引擎的,这也是Safari浏览器所使用的引擎。主要特性性能提升:相比于老旧的UIWebView,WKWebView在性能上有显著提升,包括......
  • Unity入门之重要组件和API(3) : Transform
    前言Transform类主要处理游戏对象(GameObject)的位移、旋转、缩放、父子关系和坐标转换。1.位置和位移1.1必备知识点:Vector3Vector3主要用来表示三维坐标系中的一个点或者一个向量。【声明】Vector3v1=newVector3();Vector3v2=newVector3(10,10);Vector3v3......
  • 人生低谷来撸C#--004
    今天记录:撸到关于C#的方法一个方法是把一些相关的语句组织在一起,用来执行一个任务的语句块。每一个C#程序至少有一个带有Main方法的类。要使用一个方法,您需要:定义方法调用方法当定义一个方法时,从根本上说是在声明它的结构的元素。在C#中,定义方法的语法如下:<AccessS......
  • <mvc:default-servlet-handler/>使用介绍
    Tomcat,Jetty等)默认的Servlet,以便能够处理静态资源请求,如HTML文件、图片、CSS文件、JavaScript文件等。在SpringMVC的上下文中,静态资源默认会被当作请求映射处理,这可能会导致静态资源无法正确加载。使用mvc:default-servlet-handler/可以解决这个问题。使用介绍添......
  • <mvc:annotation-driven/>使用介绍
    mvc:annotation-driven/是SpringMVC中的一个配置元素,它用于简化和加速SpringMVC应用的配置,尤其是那些使用注解的控制器。当你在SpringMVC配置文件中添加了mvc:annotation-driven/元素时,Spring会自动注册一系列的消息转换器(messageconverters)、数据绑定器(databinder......