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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 理解容器和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受限与否?

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
1天前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
16 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
27天前
|
Kubernetes Cloud Native 微服务
云原生入门与实践:Kubernetes的简易部署
云原生技术正改变着现代应用的开发和部署方式。本文将引导你了解云原生的基础概念,并重点介绍如何使用Kubernetes进行容器编排。我们将通过一个简易的示例来展示如何快速启动一个Kubernetes集群,并在其上运行一个简单的应用。无论你是云原生新手还是希望扩展现有知识,本文都将为你提供实用的信息和启发性的见解。
|
1月前
|
Kubernetes Cloud Native 开发者
云原生入门:Kubernetes的简易指南
【10月更文挑战第41天】本文将带你进入云原生的世界,特别是Kubernetes——一个强大的容器编排平台。我们将一起探索它的基本概念和操作,让你能够轻松管理和部署应用。无论你是新手还是有经验的开发者,这篇文章都能让你对Kubernetes有更深入的理解。
|
1月前
|
运维 Kubernetes Cloud Native
云原生技术入门:Kubernetes和Docker的协同工作
【10月更文挑战第43天】在云计算时代,云原生技术成为推动现代软件部署和运行的关键力量。本篇文章将带你了解云原生的基本概念,重点探讨Kubernetes和Docker如何协同工作以支持容器化应用的生命周期管理。通过实际代码示例,我们将展示如何在Kubernetes集群中部署和管理Docker容器,从而为初学者提供一条清晰的学习路径。
|
29天前
|
Kubernetes Cloud Native 云计算
云原生入门:Kubernetes 和容器化基础
在这篇文章中,我们将一起揭开云原生技术的神秘面纱。通过简单易懂的语言,我们将探索如何利用Kubernetes和容器化技术简化应用的部署和管理。无论你是初学者还是有一定经验的开发者,本文都将为你提供一条清晰的道路,帮助你理解和运用这些强大的工具。让我们从基础开始,逐步深入了解,最终能够自信地使用这些技术来优化我们的工作流程。
|
20天前
|
运维 Cloud Native 持续交付
深入理解云原生架构及其在现代企业中的应用
随着数字化转型的浪潮席卷全球,企业正面临着前所未有的挑战与机遇。云计算技术的迅猛发展,特别是云原生架构的兴起,正在重塑企业的IT基础设施和软件开发模式。本文将深入探讨云原生的核心概念、关键技术以及如何在企业中实施云原生策略,以实现更高效的资源利用和更快的市场响应速度。通过分析云原生架构的优势和面临的挑战,我们将揭示它如何助力企业在激烈的市场竞争中保持领先地位。
|
18天前
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
|
28天前
|
Cloud Native Devops 云计算
云计算的未来:云原生架构与微服务的革命####
【10月更文挑战第21天】 随着企业数字化转型的加速,云原生技术正迅速成为IT行业的新宠。本文深入探讨了云原生架构的核心理念、关键技术如容器化和微服务的优势,以及如何通过这些技术实现高效、灵活且可扩展的现代应用开发。我们将揭示云原生如何重塑软件开发流程,提升业务敏捷性,并探索其对企业IT架构的深远影响。 ####
42 3
|
29天前
|
Cloud Native 持续交付 云计算
云原生架构的演进与挑战
随着云计算技术的不断发展,云原生架构已成为企业数字化转型的重要支撑。本文深入探讨了云原生架构的概念、发展历程、核心技术以及面临的挑战,旨在为读者提供一个全面了解云原生架构的视角。通过分析Kubernetes、Docker等关键技术的应用,以及微服务、持续集成/持续部署(CI/CD)等实践案例,本文揭示了云原生架构在提高应用开发效率、降低运维成本、增强系统可扩展性等方面的显著优势。同时,也指出了云原生架构在安全性、复杂性管理等方面所面临的挑战,并提出了相应的解决策略。
|
18天前
|
运维 Cloud Native 持续交付
云原生技术深度探索:重塑现代IT架构的无形之力####
本文深入剖析了云原生技术的核心概念、关键技术组件及其对现代IT架构变革的深远影响。通过实例解析,揭示云原生如何促进企业实现敏捷开发、弹性伸缩与成本优化,为数字化转型提供强有力的技术支撑。不同于传统综述,本摘要直接聚焦于云原生技术的价值本质,旨在为读者构建一个宏观且具体的技术蓝图。 ####

相关产品

  • 容器服务Kubernetes版