标准方式启动的pod
[root@k8s-master-1 nginx]# cat pod1.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-xiaojiahao
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
apiVersion: apps/v1 # 是k8s里对Deployment资源对象定义的api接口的版本,因为k8s会不断地升级,每个版本的k8s里的对Deployment操作的方法或者操作有改变,会增加或者删除某些内容
任何的资源对象都有对应版本的api,api接口的程序会升级,会增加或者删除某些内容,这个时候就该新的api接口的规范起一个新的名字
kind: Deployment #定义了资源的类型
metadata: #对上面的资源的描述 --》元数据: 描述其他数据的数据
name: nginx-deployment
labels:
app: nginx
author: fengdeyong
sex: m
spec: #资源对象具体的参数(属性)
https://raw.githubusercontent.com/kubernetes/website/main/content/zh-cn/examples/pods/resource/memory-request-limit.yaml
Container ID: docker://543ccd1c023e4ca50d5fa13ee2c2debfa002a0dfdf471e15265aa1495a8f2346
内存溢出(OOM) out of memory ---》程序需要使用的内存超出了允许使用内存的范围。
docker 1000
k8s 1个cpu核心 1000豪
8个cpu核心 8000豪
[root@k8s-master-1 nginx]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 3s
[root@k8s-master-1 nginx]# kubectl delete pod nginx --grace-period=1 (1s)优雅的删除 默认30秒
[root@k8s-master-1 nginx]# kubectl delete pod nginx --force=1 强制删除
[root@k8s-master-1 nginx]# kubectl delete pod nginx --force=true
1. 删除Pod的宽限期
当用户发送删除Pod的命令时,Kubernetes会为该Pod设置一个宽限期(Grace Period),默认情况下这个宽限期是30秒。
在这个宽限期内,Pod被视为“Terminating”状态,Kubernetes会尝试优雅地终止Pod中的容器。这通常涉及到向容器发送SIGTERM信号,并等待容器正常退出。
如果在宽限期内容器没有正常退出,Kubernetes会在宽限期结束时向容器发送SIGKILL信号,强制终止容器。
2. 自定义宽限期
kubectl delete --grace-period=<seconds>自定义Pod的删除宽限期。
如果将宽限期设置为0,并同时使用--force选项,Kubernetes将立即删除Pod,不会等待容器正常退出。但请注意,这种方式可能会导致数据丢失或不一致。
[root@k8s-master-1 volume]# cat hostpath.yaml
apiVersion: v1
kind: Pod
metadata:
name: hostpath-example-linux
spec:
nodeName: k8s-node-2 可以指定pod调度到k8s-node-2节点上
containers:
- name: example-container
image: nginx
volumeMounts:
- mountPath: /foo
name: example-volume
readOnly: true
volumes:
- name: example-volume
# 挂载 /data/foo,但仅当该目录已经存在时
hostPath:
path: /data/foo
type: DirectoryOrCreate
pod的类型:
静态pod: kubelet 根据一个配置文件启动的pod,不需要访问api server ,写到etcd数据库--》kube-proxy \calico --》管理类,基础类
动态pod: 一般的应用程序业务pod
pod里包含了容器,容器的类型:
until nslookup myservice.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local
do
echo waiting for myservice
sleep 2
done
k8s里的dns解析的对象名字
myservice.default.svc.cluster.local
myservice 是一个服务的名字
default 所在的命名空间
svc 表示资源的类型 service类型
.cluster.local 表示本地的k8s集群,默认就是这个名字
pod的对象名字myapp.default.pod.cluster.local
lsns 查看linux里的所有的进程对应的命名空间
/proc 是linux系统里存放的内核的信息 --》目录消耗的内存里的空间
cd /proc/4116
[root@k8s-master-1 ns]# ll
lrwxrwxrwx 1 1000 root 0 8月 6 16:59 ipc -> ipc:[4026532541] 与其他进程通信
lrwxrwxrwx 1 1000 root 0 8月 6 16:59 mnt -> mnt:[4026532622] 文件挂载
lrwxrwxrwx 1 1000 root 0 8月 6 16:59 net -> net:[4026532544] 网络通信
lrwxrwxrwx 1 1000 root 0 8月 6 16:59 pid -> pid:[4026532624] 进程
lrwxrwxrwx 1 1000 root 0 8月 6 16:59 user -> user:[4026531837] 用户
lrwxrwxrwx 1 1000 root 0 8月 6 16:59 uts -> uts:[4026532623] 主机名、时间等
cgroups 是用来限制进程的资源(cpu、内存、磁盘IO、网络IO)
层级关系--》会继承,子文件夹会继承父文件夹里所有的限制项目
子系统(具体需要限制的资源) 任务--》对应一个进程
[root@k8s-master-1 cgroup]# cd /sys/fs/cgroup/cpu,cpuacct/
[root@k8s-master-1 cpu,cpuacct]# ls
cgroup.clone_children cgroup.procs cpuacct.stat cpuacct.usage_percpu cpu.cfs_quota_us cpu.rt_runtime_us cpu.stat notify_on_release system.slice user.slice
cgroup.event_control cgroup.sane_behavior cpuacct.usage cpu.cfs_period_us cpu.rt_period_us cpu.shares kubepods.slice release_agent tasks
cpu.cfs_quota_us 可以限制进程使用的cpu的配额(比例)
tasks 存放受cpu资源限制的进程的名单
root@k8s-master-1 cpu,cpuacct]# cat cpu.cfs_quota_us
-1
[root@k8s-master-1 cpu,cpuacct]#
100000 --》100%
在cpu,cpuacct目录下创建一个sanchuang的cgroup文件夹
[root@k8s-master-1 cpu,cpuacct]# mkdir sanchuang
[root@k8s-master-1 cpu,cpuacct]# ls
cgroup.clone_children cgroup.procs cpuacct.stat cpuacct.usage_percpu cpu.cfs_quota_us cpu.rt_runtime_us cpu.stat notify_on_release sanchuang tasks
cgroup.event_control cgroup.sane_behavior cpuacct.usage cpu.cfs_period_us cpu.rt_period_us cpu.shares kubepods.slice release_agent system.slice user.slice
[root@k8s-master-1 cpu,cpuacct]# cd sanchuang/
[root@k8s-master-1 sanchuang]# ls
cgroup.clone_children cgroup.procs cpuacct.usage cpu.cfs_period_us cpu.rt_period_us cpu.shares notify_on_release cgroup.event_control cpuacct.stat cpuacct.usage_percpu cpu.cfs_quota_us cpu.rt_runtime_us cpu.stat tasks
[root@k8s-master-1 sanchuang]# cat cpu.cfs_quota_us
-1
[root@k8s-master-1 sanchuang]# cat cpu.cfs_quota_us
-1
设置sanchuang文件夹下管理的进程,最多可以使用10%的cpu资源 --》指定政策
[root@k8s-master-1 sanchuang]# echo 10000 >cpu.cfs_quota_us
[root@k8s-master-1 sanchuang]# cat cpu.cfs_quota_us
10000 --》10%
编写一个程序产生一个进程去消耗cpu资源
[root@k8s-master-1 sc]# vim test-cpu.py
[root@k8s-master-1 sc]# cat test-cpu.py
while True:
pass
[root@k8s-master-1 sc]# python test-cpu.py
top 查看cpu消耗
[root@k8s-master-1 sanchuang]# top
查看python允许的test-cpu.py的pid号
[root@k8s-master-1 sanchuang]# ps aux|grep python
root 114853 61.3 0.1 123456 4464 pts/1 R+ 17:20 1:36 python test-cpu.py
将pid加入到tasks文件里
[root@k8s-master-1 sanchuang]# cat tasks
[root@k8s-master-1 sanchuang]# echo 114853 >tasks
然后再去top查看python test-cpu.py消耗的cpu资源