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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 理解容器和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搭建和管理企业级网站应用
相关文章
|
7天前
|
存储 缓存 算法
HashMap深度解析:从原理到实战
HashMap,作为Java集合框架中的一个核心组件,以其高效的键值对存储和检索机制,在软件开发中扮演着举足轻重的角色。作为一名资深的AI工程师,深入理解HashMap的原理、历史、业务场景以及实战应用,对于提升数据处理和算法实现的效率至关重要。本文将通过手绘结构图、流程图,结合Java代码示例,全方位解析HashMap,帮助读者从理论到实践全面掌握这一关键技术。
43 13
|
3天前
|
物联网 调度 vr&ar
鸿蒙HarmonyOS应用开发 |鸿蒙技术分享HarmonyOS Next 深度解析:分布式能力与跨设备协作实战
鸿蒙技术分享:HarmonyOS Next 深度解析 随着万物互联时代的到来,华为发布的 HarmonyOS Next 在技术架构和生态体验上实现了重大升级。本文从技术架构、生态优势和开发实践三方面深入探讨其特点,并通过跨设备笔记应用实战案例,展示其强大的分布式能力和多设备协作功能。核心亮点包括新一代微内核架构、统一开发语言 ArkTS 和多模态交互支持。开发者可借助 DevEco Studio 4.0 快速上手,体验高效、灵活的开发过程。 239个字符
142 13
鸿蒙HarmonyOS应用开发 |鸿蒙技术分享HarmonyOS Next 深度解析:分布式能力与跨设备协作实战
|
1天前
|
自然语言处理 搜索推荐 数据安全/隐私保护
鸿蒙登录页面好看的样式设计-HarmonyOS应用开发实战与ArkTS代码解析【HarmonyOS 5.0(Next)】
鸿蒙登录页面设计展示了 HarmonyOS 5.0(Next)的未来美学理念,结合科技与艺术,为用户带来视觉盛宴。该页面使用 ArkTS 开发,支持个性化定制和无缝智能设备连接。代码解析涵盖了声明式 UI、状态管理、事件处理及路由导航等关键概念,帮助开发者快速上手 HarmonyOS 应用开发。通过这段代码,开发者可以了解如何构建交互式界面并实现跨设备协同工作,推动智能生态的发展。
27 10
鸿蒙登录页面好看的样式设计-HarmonyOS应用开发实战与ArkTS代码解析【HarmonyOS 5.0(Next)】
|
1天前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
16 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
15天前
|
数据采集 DataWorks 搜索推荐
阿里云DataWorks深度评测:实战视角下的全方位解析
在数字化转型的大潮中,高效的数据处理与分析成为企业竞争的关键。本文深入评测阿里云DataWorks,从用户画像分析最佳实践、产品体验、与竞品对比及Data Studio公测体验等多角度,全面解析其功能优势与优化空间,为企业提供宝贵参考。
87 13
|
12天前
|
数据采集 存储 JavaScript
网页爬虫技术全解析:从基础到实战
在信息爆炸的时代,网页爬虫作为数据采集的重要工具,已成为数据科学家、研究人员和开发者不可或缺的技术。本文全面解析网页爬虫的基础概念、工作原理、技术栈与工具,以及实战案例,探讨其合法性与道德问题,分享爬虫设计与实现的详细步骤,介绍优化与维护的方法,应对反爬虫机制、动态内容加载等挑战,旨在帮助读者深入理解并合理运用网页爬虫技术。
|
1天前
|
Kubernetes 网络协议 应用服务中间件
Kubernetes Ingress:灵活的集群外部网络访问的利器
《Kubernetes Ingress:集群外部访问的利器-打造灵活的集群网络》介绍了如何通过Ingress实现Kubernetes集群的外部访问。前提条件是已拥有Kubernetes集群并安装了kubectl工具。文章详细讲解了Ingress的基本组成(Ingress Controller和资源对象),选择合适的版本,以及具体的安装步骤,如下载配置文件、部署Nginx Ingress Controller等。此外,还提供了常见问题的解决方案,例如镜像下载失败的应对措施。最后,通过部署示例应用展示了Ingress的实际使用方法。
14 2
|
13天前
|
存储 Kubernetes 关系型数据库
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
本文源自2024云栖大会苏雅诗的演讲,探讨了K8s集群业务为何需要灾备及其重要性。文中强调了集群与业务高可用配置对稳定性的重要性,并指出人为误操作等风险,建议实施周期性和特定情况下的灾备措施。针对容器化业务,提出了灾备的新特性与需求,包括工作负载为核心、云资源信息的备份,以及有状态应用的数据保护。介绍了ACK推出的备份中心解决方案,支持命名空间、标签、资源类型等维度的备份,并具备存储卷数据保护功能,能够满足GitOps流程企业的特定需求。此外,还详细描述了备份中心的使用流程、控制台展示、灾备难点及解决方案等内容,展示了备份中心如何有效应对K8s集群资源和存储卷数据的灾备挑战。
|
1月前
|
Kubernetes 监控 Cloud Native
Kubernetes集群的高可用性与伸缩性实践
Kubernetes集群的高可用性与伸缩性实践
72 1
|
2月前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景

推荐镜像

更多