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]#