企业级运维之云原生与Kubernetes实战课程 第三章第2讲 深入剖析linux容器&Pod(下)

简介: 理解容器和pod的基本原理以及差异 理解pod创建的过程 理解各个控制器的作用 理解ack集群的网络原理以及coredns的原理

企业级运维之云原生与Kubernetes实战课程

第三章第2讲 深入剖析linux容器&Pod(下)

 

视频地址:https://developer.aliyun.com/learning/course/913/detail/14555

 

 

三、资源限制(cgroup

 

1.  控制器组(cgroup

 

cgroupLinux control group的缩写,cgroup是内核的一个特性,进程可以通过树形结构的cgroup来监控和限制进程可以使用的资源,比如限制某个进程对cpumemory的使用量等。

 

cgroup 驱动:

  • systemd cgroup driver
  • cgroupfs cgroup driver

 

cgroup 类型:

  • cpu
  • memory
  • pid
  • blkio
  • device
  • freezer

 

查看podcgroup信息:

a.  登录pod所在的节点, docker ps |grep <pod name>找到容器的容器id

b.  找到容器的Pid : docker inspect <容器id> |grep Pid

c.  查看容器cgroup相对路径: cat /proc/ <Pid>/cgroup |grep memory

 

示例:

# docker inspect 0683e462045a |grep -i pid

# cat /proc/905215/cgroup

image.png

 

# kubectl exec -it multi-containers-6695d87b75-dsxgn -- bash

 image.png

 

2.  cgroup子系统

 

pod中最主要的2cgroup子系统: cpumemory

 

a.  子系统cpu

 

cpu子系统:观察cpu是否受限以及如何临时取消限制。

 

  • cpuacct.stat
  • cpu.cfs_period_us
  • cpu.cfs_quota_us
  • cpuacct.usage
  • cpu.shares
  • cpu.stat
  • tasks

 

示例:

 image.png

 

# kubectl exec -it multi-containers-6695d87b75-dsxgn -c nginx -- bash

# cat /sys/fs/cgroup/cpu.stat

 image.png

 

# ssh root@192.168.88.156

# docker ps |grep mu

# docker inspect 0683e462045a |grep -i -pid

# grep -i cpu /proc/905215/cgroup

 image.png

 

# grep -i cpu /proc/905215/cgroup

 image.png

 

# cat cpu.cfs_quota_us

50000

# cat cpu.cfs_period_us

100000

 

Top命令查看,Cat cpu使用在50%,然后临时取消catcpu限制:

#echo -1 >cpu.cfs_quota_us

cat 瞬时cpu使用达到100%

 image.png

 

b.  子系统memory

 

Memory子系统:观察memory是否受限以及如何临时取消限制。

 image.png

 

  • memory.failcnt
  • memory.limit_in_bytes
  • memory.max_ usage_in_ bytes
  • memory.usage_in_bytes
  • memory.stat
  • memory.oom_control
  • tasks

 image.png

 

3.  超好用的commandsystem-cg*

 

  • Systemd-cgtop:观察systemd驱动管理的cgroup相关资源使用情况;
  • Systemd-cgls:列出systemd驱动管理的cgroup相关资源;

 

四、Init容器

 

Init容器是一种特殊容器,Pod内的应用容器启动之前运行。Init容器可以包括一些应用镜像中不存在的实用工具和安装脚本。

 

特点:

 

  • Init容器总是运行到完成;
  • Init容器不支持lifecyclelivenessProbereadinessProbestartupProbe,因为它们必须在Pod就绪之前运行完成;
  • 每一个Init容器都必须在下一个容器启动之前成功完成;
  • Pod内多个Init容器会按顺序依次执行;

 

示例:

 

  • 安装定制化的工具或者下载文件等;
  • 等待依赖准备完毕;
  • 初始化pod内核参数;

 image.png

 

五、pause容器

 

Pause容器在K8s中,被当作pod中所有容器的父容器,它为Pod提供一个沙箱(sandbox)环境。

 

作用:

  • pod中容器准备所需共享的命名空间;
  • 启用pid命名空间,开启init进程,回收容器中的进程;

 

代码片段:

 image.png

 

六、最佳实践

 

pod中容器缺少需要的sh命令,可以创建一个临时容器去调试pod中的容器。

 

步骤:

 

a.  查看pod名称;

b.  登录到pod所在节点;

c.  创建容器并绑定pod容器的命名空间;

d.  执行ps -efnetstat -ntp等命令;

 image.png

image.png

 

本讲小结

 

1.  容器中命名空间隔离以及控制器组限制资源的原理;

2.  容器中/容器外如何查看命名空间以及cgroup的配置文件;

3.  podInit容器与pause容器的基本概念和作用;

4.  如何创建一个临时容器来调试pod容器。

 

思考:

1.   pod多容器之间,共享哪些命名空间?

2.   如何修改pod的内核参数?

3.   有哪几种方法查看pod里的tcp/udp连接信息?

4.   如何查看pod是否有cpu/memory受限与否?

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
11月前
|
Kubernetes Devops 应用服务中间件
基于 Azure DevOps 与阿里云 ACK 构建企业级 CI/CD 流水线
本文介绍如何结合阿里云 ACK 与 Azure DevOps 搭建自动化部署流程,涵盖集群创建、流水线配置、应用部署与公网暴露,助力企业高效落地云原生 DevOps 实践。
1235 2
|
11月前
|
存储 Kubernetes 网络安全
关于阿里云 Kubernetes 容器服务(ACK)添加镜像仓库的快速说明
本文介绍了在中国大陆地区因网络限制无法正常拉取 Docker 镜像的解决方案。作者所在的阿里云 Kubernetes 集群使用的是较旧版本的 containerd(1.2x),且无法直接通过 SSH 修改节点配置,因此采用了一种无需更改 Kubernetes 配置文件的方法。通过为 `docker.io` 添加 containerd 的镜像源,并使用脚本自动修改 containerd 配置文件中的路径错误(将错误的 `cert.d` 改为 `certs.d`),最终实现了通过多个镜像站点拉取镜像。作者还提供了一个可重复运行的脚本,用于动态配置镜像源。虽然该方案能缓解镜像拉取问题,
1164 3
|
存储 Kubernetes 监控
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
1318 33
|
Kubernetes Docker 容器
Kubernetes与Docker参数对照:理解Pod中的command、args与Dockerfile中的CMD、ENTRYPOINT。
需要明确的是,理解这些都需要对Docker和Kubernetes有一定深度的理解,才能把握二者的区别和联系。虽然它们都是容器技术的二个重要组成部分,但各有其特性和适用场景,理解它们的本质和工作方式,才能更好的使用这些工具,将各自的优点整合到生产环境中,实现软件的快速开发和部署。
655 25
|
Kubernetes Shell Windows
【Azure K8S | AKS】在AKS的节点中抓取目标POD的网络包方法分享
在AKS中遇到复杂网络问题时,可通过以下步骤进入特定POD抓取网络包进行分析:1. 使用`kubectl get pods`确认Pod所在Node;2. 通过`kubectl node-shell`登录Node;3. 使用`crictl ps`找到Pod的Container ID;4. 获取PID并使用`nsenter`进入Pod的网络空间;5. 在`/var/tmp`目录下使用`tcpdump`抓包。完成后按Ctrl+C停止抓包。
603 12
|
存储 Kubernetes 测试技术
企业级LLM推理部署新范式:基于ACK的DeepSeek蒸馏模型生产环境落地指南
企业级LLM推理部署新范式:基于ACK的DeepSeek蒸馏模型生产环境落地指南
928 12
|
人工智能 Kubernetes 异构计算
大道至简-基于ACK的Deepseek满血版分布式推理部署实战
大道至简-基于ACK的Deepseek满血版分布式推理部署实战
932 5
|
弹性计算 人工智能 资源调度
DeepSeek大解读系列公开课上新!阿里云专家主讲云上智能算力、Kubernetes容器服务、DeepSeek私有化部署
智猩猩「DeepSeek大解读」系列公开课第三期即将开讲,聚焦阿里云弹性计算助力大模型训练与部署。三位专家将分别讲解智能算力支撑、Kubernetes容器服务在AI场景的应用实践、以及DeepSeek一键部署和多渠道应用集成,分享云计算如何赋能大模型发展。欲观看直播,可关注【智猩猩GenAI视频号】预约。 (239字符)
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
382 1
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
503 0
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明

相关产品

  • 容器服务Kubernetes版