2.4 认识YAML

YAML 是 JSON 的超集,支持整数、浮点数、布尔、字符串、数组和对象等数据类型。

在K8s里,YAML用来声明API对象的,那么API对象都有哪些?我们之前接触过的pod、deployment、service、node都是,当然还有好多,可以这样查看:

kubectl api-resources

2.5 API资源对象Pod

Pod⾥的所有容器都会调度在同⼀个节点上运⾏,

Pod中的所有容器会共享同⼀⽹络,它们有⼀个唯⼀的IP,就叫PodIP;

Pod中还有⼀个特殊的容器叫 Pause ,它会优先启动然后进⾏IP分配,⽽后

将其他容器都link到该容器上,实现⽹络共享

2.6 Pod原理和生命周期

创建nginx.yaml

apiVersion: v1
kind: Pod
metadata:
  name: ngx-pod
  namespace: aming
  labels:  ## labels字段非常关键,它可以添加任意数量的Key-Value,目的是为了让pod的信息更加详细
    env: dev

spec:  ##用来定义该pod更多的资源信息,比如contain, 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

执行命令创建Pod: kubectl apply -f ngx-pod.yaml

删除pod:

kubectl delete -f ngx-pod.yaml

使用命令生成yaml文件:

kubectl create job job-demo --image=busybox  --dry-run=client  -o yaml > job-demo.yaml

2.7 Pod资源限制

资源限制是为了确保系统稳定运⾏的⽅法,它通过对 Pod 的资源使⽤(如 CPU 和内存)进⾏约束。当⼀个程序出现异常并占⽤⼤量系统资源时,如果没有对该 Pod 进⾏资源限制,可能会导致其他 Pod 的运⾏受到影响,从⽽降低整个系统的 稳定性。

Kubernetes 通过Requests 和 Limits 字段对 Pod 的资源进⾏限制,这有助于防 ⽌单个 Pod 消耗过多资源并影响其他 Pod 的正常运⾏: Requests:定义了 Pod 启动时所需的最⼩资源量。( Pod在调度的时候 re quests ⽐较重要 ) Limits:限制 Pod 在运⾏过程中能够使⽤的最⼤资源量。( Pod在运⾏时 limits ⽐较重要 )如果 Pod 使⽤的资源超过了这个限制,系统可能会终⽌ 其运⾏中的容器,尤其是在资源紧张的情况下

spec.containers[].resources.request.cpu

spec.containers[].resources.request.memory

spec.containers[].resources.limits.cpu

spec.containers[].resources.limits.memory

1、创建具有⼀个容器的 Pod。限制资源:

[root@master01 app]# cat limit01.yaml 
apiVersion: v1
kind: Pod
metadata:
 name: cpu-demo
spec:
 containers:
 - name: cpu-demo-ctr
   image: uhub.service.ucloud.cn/oldxu/virsh/stress:latest
   args: # 容器启动命令,容器尝试使⽤2核CPU
   - -cpus
   - "2"
   resources:
     requests: # 限制启动Pod时最多申请0.5核的CPU
       cpu: "500m"
     limits: # 限制Pod最多使⽤1核CPU
       cpu: "1000m"
[root@master01 app]#