企业级运维之云原生与Kubernetes实战课程 - 第三章 Kubernetes集群原理深度解析

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 理解容器和pod的基本原理以及差异理解pod创建的过程理解各个控制器的作用理解ack集群的网络原理以及coredns的原理

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

第三章 Kubernetes集群原理深度解析

 

 

本章目标

 

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

 

本章目录

 

  • 深入剖析linux容器&Pod
  • 集群创建Pod的过程
  • 阿里云ACK集群控制器
  • 阿里云ACK集群网络

 

第三章第1讲 深入剖析linux容器&Pod(上)

 

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

 

目录

 

  • 什么是容器
  • 资源隔离(namespace
  • 资源限制(cgroup
  • Init容器
  • Pause容器
  • 最佳实践

 

一、什么是容器

 

容器提供了一种逻辑打包机制,以这种机制打包的应用,可以脱离其实际运行的环境。

 image.png

 

传统OS上应用的特点:

 

  • 应用进程可以互相看到,互相通信,意味着进程可以相互攻击;
  • 进程使用的同一个文件系统,可以对其他进程的文件进行增删改查;除此之外,进程间的依赖也可能会存在冲突;
  • 使用相同的宿主机资源,存在资源抢占的问题。

 

容器具有视图隔离、资源可限制、独立文件系统等特点,容器中用到的主要技术是命名空间隔离Namespace和控制器组Cgroup

 

二、命名空间隔离( namespace )

 

1.  什么是命名空间隔离

 

命名空间是对全局资源的一种抽象,命名空间使得一些进程只能看到自己相关的资源,但是对于命名空间外的其它进程是不可见的。使用命名空间隔离技术的一个例子就是容器。

 image.png

 

2.  Namespace类型

 

Linux 内核实现了6 Namespace

  • mount:隔离文件系统挂载点
  • Network:隔离网络资源
  • PID:隔离进程ID
  • UTS:隔离主机名和域名
  • User:隔离用户和用户组
  • IPC:进程间通信隔离

 

问题:不同的Pod之间资源是隔离的,而在同一个Pod里,多个容器间哪些资源是共享的?哪些是隔离的呢?

 

3.  Pod中共享的命名空间

 

UTShostnameNIS域名;IPC:进程间通信。

 

Yaml文件示例:

 

Pod编排文件,Pod中创建了nginxbusybox两个容器:

 

apiversion:apps/v1

kind: Deployment

metadata:

 labels:

   app: multi-containers

 name: multi-containers

spec:

 replicas:1

 selector:

   matchLabels:

     app:multi-containers

   template:

     metadata:

       labels:

          app:multi-containers

     spec:

       containers:

         - command:

             - sleep

             - '36000'

           image: 'nginx:1.7.9'

           imagePullPolicy: IfNotPresent

           name: nginx

         - command:

              - sleep

              - '360000'

           image: 'busybox:latest'

           imagePullPolicy: Always

           name: busybox

 

a.  Pod中共享UTS命名空间

 

一个pod里,有多个containers,他们之间共享hostname

UTS:最简单的namespace,只作用hostnameNIS域名两个资源。

 image.png

 

示例:

 

# kubectl get deployments.apps multi-containers

 

切换到nginxhostname

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

# hostname

 

切换到busyboxhostname

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

# hostname

 

b.  Pod中共享IPC命名空间

 

IPC:进程间通信,只有同一个namespace的进程之间才能够通信,常用于MessageQ

 image.png

 

c.  Pod中共享NET命名空间

 

Net:网络相关资源隔离,如网络设备、路由表、防火墙(iptables) socket ( ss

netstat )等等。

在排查问题时,经常会出现网络丢包、连接不上、解析不了等各种各样的问题,如何通过抓包找到问题,这个将在后续介绍。

 image.png

 

示例:

 

# netstat -antpl

image.png

 

d.  非共享USER命名空间

 

USER :在不同的namespace中用户可以有相同的UIDGID ,它们之间互相不影响。

 

e.  Pod中非共享pid命名空间

 

PID:隔离进程的pid属性,即不同的namespace中的进程可以有相同的pid,相同的namespace 可以看到其他进程的pid

 image.png

image.png

 

f.  Pod中非共享mnt命名空间

 

MNT:隔离的是mount points (挂载点) ,即不同namespace下面的进程看到的文件系统结构是不同的。不同的containers依赖不同的环境,mnt去共享,会存在冲突。

 

非共享MNT示例:

image.png

 

示例:

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

# ls -l

 image.png

 

# kubectl exec -it multi-containers-6695d87b75-dsxgn -c busybox -- sh

# ls -l

 image.png

 

g.  超好用的commandlsns

 

lsns:列出有关所有当前可访问的名称空间或给定名称空间的信息。命名空间标识符是一个索引节点号。

 

常用参数:

 

-J  使用 JSON 输出格式

-l  使用列表格式的输出

-n  不打印标题

-r  使用原生输出格式

-u  不截断列中的文本

-t  名字空间类型(mnt, net, ipc, user, pid, uts, cgroup)

 

示例:

# lsns

image.png

# lsns -t net

image.png

 

# lsns -t mnt

 image.png

 

# ps -ef |grep tomcat

# ps -ef |grep 1208542

# ps -ef |grep 1208523

 image.png

 

# pstree -sp 1208608

# ps -ef |grep 1208523

image.png

 

h.  超好用的commandnsenter

 

nsenter:在指定进程的指定命令空间下运行指定程序的命令,它最典型的用途就是进入容器的网络命令空间。

 

用法:

nsenter [options] <program> [<argument>...]

Run a program with namespaces of other processes.

 

选项:

-t, --target <pid>     要获取名字空间的目标进程

-m, --mount[=<file>]   enter mount namespace

-u, --uts[=<file>]     enter UTS namespace (hostname etc)

-i, --ipc[=<file>]     enter System V IPC namespace

-n, --net[=<file>]     enter network namespace

-p, --pid[=<file>]     enter pid namespace

-U, --user[=<file>]    enter user namespace

-S, --setuid <uid>     set uid in entered namespace

-G, --setgid <gid>     set gid in entered namespace

    --preserve-credentials do not touch uids or gids

-r, --root[=<dir>]     set the root directory

-w, --wd[=<dir>]       set the working directory

-F, --no-fork          执行 <程序> 前不 fork

-Z, --follow-context   set SELinux context according to --target PID

 

-h, --help    显示此帮助并退出

-V, --version 输出版本信息并退出

 

命令解析:

 image.png

 

演示示例:

 

# ipconfig eth0

# kubectl get pods multi- containers-6695d87b75-dsxgn -o wide

 image.png

 

# docker ps |grep multi

# docker inspect 0683e462045a |grep -i -pid

# lsns -p 905215

image.png

 

# nsenter -n -t 905215

# tcpdump -i any host 223.5.5.5 -nnvv -xxx & [1]1015386

 image.png

 

# pkill tcpdump

# lsns -p 905215

# nsenter -p -m -t 905215

 image.png

 

# nsenter -p -m -i -u -n -t 905215

# ps -ef

image.png

 

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
1月前
|
机器学习/深度学习 安全 大数据
揭秘!企业级大模型如何安全高效私有化部署?全面解析最佳实践,助你打造智能业务新引擎!
【10月更文挑战第24天】本文详细探讨了企业级大模型私有化部署的最佳实践,涵盖数据隐私与安全、定制化配置、部署流程、性能优化及安全措施。通过私有化部署,企业能够完全控制数据,确保敏感信息的安全,同时根据自身需求进行优化,提升计算性能和处理效率。示例代码展示了如何利用Python和TensorFlow进行文本分类任务的模型训练。
102 6
|
1月前
|
Kubernetes 监控 API
深入解析Kubernetes及其在生产环境中的最佳实践
深入解析Kubernetes及其在生产环境中的最佳实践
48 1
|
1月前
|
存储 Cloud Native 块存储
EBS深度解析:云原生时代企业级块存储
企业上云的策略,从 Cloud-Hosting 转向 Serverless 架构。块存储作为企业应用上云的核心存储产品,将通过 Serverless 化来加速新的计算范式全面落地。在本话题中,我们将会介绍阿里云块存储企业级能力的创新,深入解析背后的技术细节,分享对未来趋势的判断。
110 2
|
1月前
|
运维 Kubernetes Cloud Native
Kubernetes云原生架构深度解析与实践指南####
本文深入探讨了Kubernetes作为领先的云原生应用编排平台,其设计理念、核心组件及高级特性。通过剖析Kubernetes的工作原理,结合具体案例分析,为读者呈现如何在实际项目中高效部署、管理和扩展容器化应用的策略与技巧。文章还涵盖了服务发现、负载均衡、配置管理、自动化伸缩等关键议题,旨在帮助开发者和运维人员掌握利用Kubernetes构建健壮、可伸缩的云原生生态系统的能力。 ####
|
1月前
|
存储 Kubernetes 调度
深度解析Kubernetes中的Pod生命周期管理
深度解析Kubernetes中的Pod生命周期管理
|
2月前
|
消息中间件 中间件 数据库
NServiceBus:打造企业级服务总线的利器——深度解析这一面向消息中间件如何革新分布式应用开发与提升系统可靠性
【10月更文挑战第9天】NServiceBus 是一个面向消息的中间件,专为构建分布式应用程序设计,特别适用于企业级服务总线(ESB)。它通过消息队列实现服务间的解耦,提高系统的可扩展性和容错性。在 .NET 生态中,NServiceBus 提供了强大的功能,支持多种传输方式如 RabbitMQ 和 Azure Service Bus。通过异步消息传递模式,各组件可以独立运作,即使某部分出现故障也不会影响整体系统。 示例代码展示了如何使用 NServiceBus 发送和接收消息,简化了系统的设计和维护。
65 3
|
2月前
|
存储 SQL 分布式计算
湖仓一体架构深度解析:构建企业级数据管理与分析的新基石
【10月更文挑战第7天】湖仓一体架构深度解析:构建企业级数据管理与分析的新基石
149 1
|
2月前
|
存储 Kubernetes 监控
深度解析Kubernetes在微服务架构中的应用与优化
【10月更文挑战第18天】深度解析Kubernetes在微服务架构中的应用与优化
137 0
|
2月前
|
存储 运维 监控
实时计算Flink版在稳定性、性能、开发运维、安全能力等等跟其他引擎及自建Flink集群比较。
实时计算Flink版在稳定性、性能、开发运维和安全能力等方面表现出色。其自研的高性能状态存储引擎GeminiStateBackend显著提升了作业稳定性,状态管理优化使性能提升40%以上。核心性能较开源Flink提升2-3倍,资源利用率提高100%。提供一站式开发管理、自动化运维和丰富的监控告警功能,支持多语言开发和智能调优。安全方面,具备访问控制、高可用保障和全链路容错能力,确保企业级应用的安全与稳定。
52 0
|
21天前
|
运维 Cloud Native 持续交付
深入理解云原生架构及其在现代企业中的应用
随着数字化转型的浪潮席卷全球,企业正面临着前所未有的挑战与机遇。云计算技术的迅猛发展,特别是云原生架构的兴起,正在重塑企业的IT基础设施和软件开发模式。本文将深入探讨云原生的核心概念、关键技术以及如何在企业中实施云原生策略,以实现更高效的资源利用和更快的市场响应速度。通过分析云原生架构的优势和面临的挑战,我们将揭示它如何助力企业在激烈的市场竞争中保持领先地位。

推荐镜像

更多