其中 cpu.cfs_quota_us 就是 CPU 的限制值,如果要查看具体的容器的资源,我们也可以进入到容器目录下面去查看即可 。
最后我们了解下内存这块的资源控制,内存的单位换算比较简单:
1 MiB = 1024 KiB,内存这块在 Kubernetes 里一般用的是Mi单位,当然你也可以使用Ki、Gi甚至Pi,看具体的业务需求和资源容量 。
单位换算
这里注意的是MiB ≠ MB,MB 是十进制单位,MiB 是二进制,平时我们以为 MB 等于 1024KB,其实1MB=1000KB,1MiB才等于1024KiB 。中间带字母 i 的是国际电工协会(IEC)定的,走1024乘积;KB、MB、GB 是国际单位制,走1000乘积 。
这里要注意的是,内存是不可压缩性资源,如果容器使用内存资源到达了上限,那么会OOM,造成内存溢出,容器就会终止和退出 。我们也可以通过上面的方式去通过查看 CGroup 文件的值来验证资源限制 。
静态 Pod¶在 Kubernetes 集群中除了我们经常使用到的普通的 Pod 外,还有一种特殊的 Pod,叫做Static Pod,也就是我们说的静态 Pod,静态 Pod 有什么特殊的地方呢?
静态 Pod 直接由节点上的 kubelet 进程来管理,不通过 master 节点上的 apiserver 。无法与我们常用的控制器 Deployment 或者 DaemonSet 进行关联,它由 kubelet 进程自己来监控,当 pod 崩溃时会重启该 pod,kubelet 也无法对他们进行健康检查 。静态 pod 始终绑定在某一个 kubelet 上,并且始终运行在同一个节点上 。kubelet 会自动为每一个静态 pod 在 Kubernetes 的 apiserver 上创建一个镜像 Pod,因此我们可以在 apiserver 中查询到该 pod,但是不能通过 apiserver 进行控制(例如不能删除) 。
创建静态 Pod 有两种方式:配置文件和 HTTP 两种方式
配置文件
配置文件就是放在特定目录下的标准的 JSON 或 YAML 格式的 pod 定义文件 。用 kubelet --pod-manifest-path=<the directory>来启动 kubelet 进程,kubelet 定期的去扫描这个目录,根据这个目录下出现或消失的 YAML/JSON 文件来创建或删除静态 pod 。
比如我们在 node1 这个节点上用静态 pod 的方式来启动一个 nginx 的服务,配置文件路径为:
?~ cat /var/lib/kubelet/config.yaml......staticPodPath: /etc/kubernetes/manifests# 和命令行的 pod-manifest-path 参数一致......
打开这个文件我们可以看到其中有一个属性为 staticPodPath 的配置,其实和命令行的 --pod-manifest-path 配置是一致的,所以如果我们通过 kubeadm 的方式来安装的集群环境,对应的 kubelet 已经配置了我们的静态 Pod 文件的路径,默认地址为 /etc/kubernetes/manifests,所以我们只需要在该目录下面创建一个标准的 Pod 的 JSON 或者 YAML 文件即可,如果你的 kubelet 启动参数中没有配置上面的--pod-manifest-path 参数的话,那么添加上这个参数然后重启 kubelet 即可:
?~ cat <<EOF >/etc/kubernetes/manifests/static-web.yamlapiVersion: v1kind: Podmetadata:name: static-weblabels:app: staticspec:containers:- name: webimage: nginxports:- name: webcontainerPort: 80EOF
通过 HTTP 创建静态 Pods
kubelet 周期地从 –manifest-url= 参数指定的地址下载文件,并且把它翻译成 JSON/YAML 格式的 pod 定义 。此后的操作方式与–pod-manifest-path= 相同,kubelet 会不时地重新下载该文件,当文件变化时对应地终止或启动静态 pod 。
kubelet 启动时,由 --pod-manifest-path= 或 --manifest-url= 参数指定的目录下定义的所有 pod 都会自动创建,例如,我们示例中的 static-web:
?~ nerdctl -n k8s.io psCONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMES6add7aa53969Docker.io/library/nginx:latest"/docker-entrypoint.…"43 seconds agoUp......
现在我们通过kubectl工具可以看到这里创建了一个新的镜像 Pod:
?~ kubectl get podsNAMEREADYSTATUSRESTARTSAGEstatic-web-node11/1Running0109s
静态 pod 的标签会传递给镜像 Pod,可以用来过滤或筛选 。需要注意的是,我们不能通过 API 服务器来删除静态 pod(例如,通过kubectl命令),kubelet 不会删除它 。
?~ kubectl delete pod static-web-node1pod "static-web-node1" deleted?~ kubectl get podsNAMEREADYSTATUSRESTARTSAGEstatic-web-node11/1Running04s
静态 Pod 的动态增加和删除
运行中的 kubelet 周期扫描配置的目录(我们这个例子中就是 /etc/kubernetes/manifests)下文件的变化,当这个目录中有文件出现或消失时创建或删除 pods:
?~ mv /etc/kubernetes/manifests/static-web.yaml /tmp# sleep 20?~ nerdctl -n k8s.io ps// no nginx container is running?~ mv /tmp/static-web.yaml/etc/kubernetes/manifests# sleep 20?~ nerdctl -n k8s.io psCONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMES902be9190538docker.io/library/nginx:latest"/docker-entrypoint.…"14 seconds agoUp......
推荐阅读
- 平原游击队|演员潘德民在长春病逝享年97岁,演农民角色深入人心
- 粉色|好像理解宛瑜要的自由了!演员本人戏里戏外都漂亮自在,女星榜样
- 邓家佳|《全民目击》:邓家佳出演悬疑片受好评,影片内涵值得深入思考
- 天珠|关于天珠,你是怎么理解的?
- |成年人的放下:一半是理解,一半是算了
- 爱情的理解|一次比一次更心痛,《爱情的理解》第2集:看见安秀荣被拥抱
- 爱情的理解|《爱情的理解》柳演锡文佳煐上演成年人爱情,拉扯的办公室四角恋
- 爱情的理解|表白是件危险的事:文佳瑛的新剧《爱情的理解》第1集结尾很意外
- 惠英红|惠英红大不同,16岁就工作的她不能理解甜妹的世界
- 净资产的通俗理解."净资产"是什么意思,为什么在帐户结构中"净资产的减少"表示属于借方?