1.Pod概述
Pod 是 k8s 系统中可以创建和管理的最小单元,是资源对象模型中由用户创建或部署的最
小资源对象模型,也是在 k8s 上运行容器化应用的资源对象,其他的资源对象都是用来支
撑或者扩展 Pod 对象功能的,比如控制器对象是用来管控 Pod 对象的,Service 或者
Ingress 资源对象是用来暴露 Pod 引用对象的,PersistentVolume 资源对象是用来为 Pod
提供存储等等,k8s 不会直接处理容器,而是 Pod,Pod 是由一个或多个 container 组成
Pod 是 Kubernetes 的最重要概念,每一个 Pod 都有一个特殊的被称为”根容器“的 Pause
容器。Pause 容器对应的镜 像属于 Kubernetes 平台的一部分,除了 Pause 容器,每个 Pod
还包含一个或多个紧密相关的用户业务容器
2.Pod基本概念
- 最小部署的单元
- Pod里面是由一个或多个容器组成【一组容器的集合】
- 一个pod中的容器是共享网络命名空间
- Pod是短暂的
- 每个Pod包含一个或多个紧密相关的用户业务容器
3.Pod存在的意义
- 创建容器使用docker,一个docker对应一个容器,一个容器运行一个应用进程
- Pod是多进程设计,运用多个应用程序,也就是一个Pod里面有多个容器,而一个容器里面运行一个应用程序
- Pod的存在是为了亲密性应用
两个应用之间进行交互
网络之间的调用【通过127.0.0.1 或 socket】
两个应用之间需要频繁调用
4.Pod 两种机制
4.1 Pod 网络共享机制
- 首先会创建Pause容器,也叫作info容器
- 之后创建业务容器
- 创建会后,把业务容器的 ip mac port 加入到info容器中,使得所有业务容器和在同一namespace中,实现网络共享
4.2 共享机制
当节点node1宕机,运行周期node1的数据,如业务数据等是否会丢失呢?
我们之前了解到,K8S有自我修复能力,意思是如果node挂掉了,那么该节点的Pod会转移到其他node中,如node2
可是如果pod在node2节点运行,node2是不是又要重新拉去镜像,那么之前数据不就没了?
K8S做了一个持久化存储,也叫数据卷;通过持久化存储,当node1挂掉之后,n该节点的Pod会持久化存储,之后node2会从中读取数据
5.镜像拉取策略
主要有三种策略:
- IfNotPresent:默认值,镜像在宿主机上不存在才拉取
- Always:每次创建Pod都会重新拉取一次镜像
- Never:Pod永远不会主动拉取这个镜像
6.Pod资源限制
也就是我们Pod在进行调度的时候,可以对调度的资源进行限制,例如我们限制 Pod调度是使用的资源是 2C4G,那么在调度对应的node节点时,只会占用对应的资源,对于不满足资源的节点,将不会进行调度
- request:表示调度所需的资源
- limits:表示最大所占用的资源
7.Pod重启策略
重启策略主要分为以下三种
- Always:当容器终止退出后,总是重启容器,默认策略 【nginx等,需要不断提供服务】
- OnFailure:当容器异常退出(退出状态码非0)时,才重启容器。
- Never:当容器终止退出,从不重启容器 【批量任务】
8.Pod健康检查
9.创建Pod流程
master节点
- 首先创建一个pod,会进入到API Server 进行创建,之后通过API Server 将pod信息存储在 Etcd中
- 在Etcd存储完成后,Etcd将存储结果返回给API Server,告诉它,我已经存储成功
- 然后是Scheduler,监控API Server是否有新的Pod,如果有的话,先是通过API server读取存储在Etcd的pod信息,之后会通过调度算法,把pod调度某个node上
node节点
- 在node节点,会通过 kubelet – apiserver 读取etcd 拿到分配在当前node节点上的pod,然后通过docker创建容器
- 创建成功后 ,会将创建结果返回给Kubectl ,通过Kubectl 更新API Server的Pod状态,之后通过API Server更新etc存储状态
- 更新后,Etcd返回给API Server,之后通过API Server 返回给Kubectl
10.影响Pod调度的属性
10.1.Pod资源限制对Pod的调度会有影响,这个之前已经提到,不再赘述
10.2.节点选择器标签影响Pod调度
关于节点选择器,其实就是有两个环境,然后环境之间所用的资源配置不同
以通过以下命令,给我们的节点新增标签,然后节点选择器就会进行调度了
[root@localhost manifests]# kubectl get nodes k8s-node1 --show-labels
NAME STATUS ROLES AGE VERSION LABELS
k8s-node1 Ready 6h6m v1.22.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node1,kubernetes.io/os=linux
[root@localhost manifests]# kubectl label node k8s-node1 env_role=dev
node/k8s-node1 labeled
[root@localhost manifests]# kubectl get nodes k8s-node1 --show-labels
NAME STATUS ROLES AGE VERSION LABELS
k8s-node1 Ready 6h8m v1.22.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,env_role=dev,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node1,kubernetes.io/os=linux
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
10.3.节点亲和性
节点亲和性 nodeAffinity 和 之前nodeSelector 基本一样的,根据节点上标签约束来决定Pod调度到哪些节点上
- 硬亲和性:约束条件必须满足
- 软亲和性:尝试满足,不保证
支持常用操作符:in、NotIn、Exists、Gt、Lt、DoesNotExists
反亲和性:就是和亲和性刚刚相反,如 NotIn、DoesNotExists等
10.4. 污点和污点容忍
-
nodeSelector 和 NodeAffinity,都是Prod调度到某些节点上,属于Pod的属性,是在调度的时候实现的。
-
Taint 污点:节点不做普通分配调度,是节点属性
场景
- 专用节点【限制ip】
- 配置特定硬件的节点【固态硬盘】
- 基于Taint驱逐【在node1不放,在node2放】
污点相关命令
查看污点情况
kubectl describe node k8smaster | grep Taint
- 1
删除污点
kubectl taint node k8snode1 env_role:NoSchedule-
- 1
未节点添加污点
kubectl taint node [node] key=value:污点的三个值
kubectl taint node k8snode1 env_role=yes:NoSchedule
- 1
污点值类型
- NoSchedule:一定不被调度
- PreferNoSchedule:尽量不被调度【也有被调度的几率】
- NoExecute:不会调度,并且还会驱逐Node已有Pod
污点容忍
就是某个节点可能被调度,也可能不被调度
演示例子
正常情况下,node1,node2是都有的
[root@localhost ~]# kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 1/1 1 1 6h3m
[root@localhost ~]# kubectl scale deployment nginx --replicas=5
deployment.apps/nginx scaled
[root@localhost ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-6799fc88d8-9gdz2 1/1 Running 0 14s 10.244.1.4 k8s-node1
nginx-6799fc88d8-ct4v9 1/1 Running 0 14s 10.244.2.4 k8s-node2
nginx-6799fc88d8-dfcrn 1/1 Running 0 14s 10.244.2.3 k8s-node2
nginx-6799fc88d8-n692z 1/1 Running 0 6h6m 10.244.1.3 k8s-node1
nginx-6799fc88d8-r6dp6 1/1 Running 0 14s 10.244.1.5 k8s-node1
[root@localhost ~]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
[root@localhost ~]# kubectl delete deployment nginx
deployment.apps "nginx" deleted
[root@localhost ~]# kubectl get deployment
No resources found in default namespace.
- 1
- 2
- 3
- 4
对node1添加污点,类型为一定不会调度NoSchedule,发现创建pod后,pod运行节点只有node2
[root@localhost ~]# kubectl taint node k8s-node1 env_role=yes:NoSchedule
node/k8s-node1 tainted
[root@localhost ~]# kubectl create deployment web --image=nginx
deployment.apps/web created
[root@localhost ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
web-96d5df5c8-276vj 1/1 Running 0 8s 10.244.2.5 k8s-node2
[root@localhost ~]# kubectl scale deployment nginx --replicas=5
Error from server (NotFound): deployments.apps "nginx" not found
[root@localhost ~]# kubectl scale deployment web --replicas=5
deployment.apps/web scaled
[root@localhost ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
web-96d5df5c8-276vj 1/1 Running 0 30s 10.244.2.5 k8s-node2
web-96d5df5c8-8b4gz 0/1 ContainerCreating 0 3s k8s-node2
web-96d5df5c8-n5cg2 1/1 Running 0 3s 10.244.2.7 k8s-node2
web-96d5df5c8-qpb2q 1/1 Running 0 3s 10.244.2.6 k8s-node2
web-96d5df5c8-xdvkt 0/1 ContainerCreating 0 3s k8s-node2
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
查看污点是否添加
[root@localhost ~]# kubectl describe node k8s-node1 | grep Taint
Taints: env_role=yes:NoSchedule
- 1
- 2
删除污点,之后扩容发现可以调度到节点node1了
[root@localhost ~]# kubectl taint node k8s-node1 env_role:NoSchedule-
node/k8s-node1 untainted
[root@localhost ~]# kubectl describe node k8s-node1 | grep Taint
Taints:
[root@localhost ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
web-96d5df5c8-276vj 1/1 Running 0 9m13s 10.244.2.5 k8s-node2
web-96d5df5c8-8b4gz 1/1 Running 0 8m46s 10.244.2.8 k8s-node2
web-96d5df5c8-n5cg2 1/1 Running 0 8m46s 10.244.2.7 k8s-node2
web-96d5df5c8-qpb2q 1/1 Running 0 8m46s 10.244.2.6 k8s-node2
web-96d5df5c8-xdvkt 1/1 Running 0 8m46s 10.244.2.9 k8s-node2
[root@localhost ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
web-96d5df5c8-276vj 1/1 Running 0 9m17s 10.244.2.5 k8s-node2
web-96d5df5c8-8b4gz 1/1 Running 0 8m50s 10.244.2.8 k8s-node2
web-96d5df5c8-n5cg2 1/1 Running 0 8m50s 10.244.2.7 k8s-node2
web-96d5df5c8-qpb2q 1/1 Running 0 8m50s 10.244.2.6 k8s-node2
web-96d5df5c8-xdvkt 1/1 Running 0 8m50s 10.244.2.9 k8s-node2
[root@localhost ~]# kubectl scale deployment web --replicas=7
deployment.apps/web scaled
[root@localhost ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
web-96d5df5c8-276vj 1/1 Running 0 9m33s 10.244.2.5 k8s-node2
web-96d5df5c8-8b4gz 1/1 Running 0 9m6s 10.244.2.8 k8s-node2
web-96d5df5c8-9zm59 0/1 ContainerCreating 0 3s k8s-node1
web-96d5df5c8-b6mbj 0/1 ContainerCreating 0 3s k8s-node1
web-96d5df5c8-n5cg2 1/1 Running 0 9m6s 10.244.2.7 k8s-node2
web-96d5df5c8-qpb2q 1/1 Running 0 9m6s 10.244.2.6 k8s-node2
web-96d5df5c8-xdvkt 1/1 Running 0 9m6s 10.244.2.9 k8s-node2
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
随着人工智能(AI)技术的迅猛发展,它已成为推动现代科技革命的核心动力之一。作为微软云平台Azure的基础认证之一,AI-900认证不仅让我们深入了解人工智能的基本概念,更加了解如何在Azure平台上应用AI技术。本文将详细探讨人工智能的层次架构,机器学习(ML)、深度学习(DL)等技术,以及如何通过AI-900认证考试,为进入人工智能领域打下坚实基础。
一、人工智能的基础概念
1.1 什么是人工智能?
人工智能(AI)是一门模拟、扩展和增强人类智能的技术,它能够自主执行任务,做出智能决策并解决复杂问题。AI的目标不仅仅是模仿人类的行为,还能够在自适应学习的基础上,不断改进决策和预测能力。在AI-900认证的背景下,理解AI的基本定义和应用范围至关重要。
AI的定义
人工智能的基本概念是通过计算机系统来模仿人类的智能活动,包括学习、推理、计划、决策等。AI不仅仅是一个简单的程序,而是一种系统化的模拟人类思维和行为的方式。
AI的应用范围
AI的应用已经涉及多个领域,以下是几个重要的应用领域:
- 智能决策:AI可以处理大量数据并做出决策,在金融、医疗和制造业等行业应用广泛。
- 自适应学习:机器学习是AI的核心组成部分,能够根据数据不断进行学习并优化模型。
- 复杂问题解决:AI在自然语言处理、自动驾驶、智能推荐等复杂问题上取得了巨大突破。
通过深入理解AI的基础概念,您将能够有效地应对AI-900认证考试中关于人工智能技术的考察内容。
1.2 AI的基本组成
人工智能的构建主要依赖于以下几个技术模块:
- 机器学习(Machine Learning):机器学习让计算机能够通过数据学习和优化,而无需明确编程。机器学习是AI的核心部分,推动了自动化和智能化的进程。
- 深度学习(Deep Learning):深度学习是机器学习的一种方法,基于人工神经网络(ANN)模型,特别适用于处理图像、语音、文本等大规模数据。
- 自然语言处理(NLP):NLP是让计算机理解、分析、生成自然语言的技术,广泛应用于聊天机器人、自动翻译、情感分析等领域。
二、机器学习:AI的核心驱动力
机器学习(ML)是人工智能的支柱技术之一。它能够让计算机通过数据学习并改进自身的决策能力。机器学习的强大之处在于它能够处理复杂数据并自动发现数据中的模式和规律。
2.1 机器学习的特点
机器学习技术拥有以下几个显著特点:
- 自动化学习过程:机器学习能够根据已有的数据和模式自动学习,无需人类手动干预。模型会根据新的数据进行优化,从而提高其预测和决策的准确性。
- 数据驱动的决策:机器学习是建立在数据基础上的,随着数据的增加,模型会变得更加准确。数据在机器学习中的作用不可忽视,它决定了模型的训练效果。
- 持续优化能力:机器学习模型具备通过持续学习来优化和改进的能力,使得它们能够随着时间的推移变得更加智能。
- 适应性强:机器学习能够适应不同的场景和任务,能够根据不同的数据特性进行灵活调整,广泛应用于各种业务场景。
2.2 机器学习与AI-900考试
AI-900考试的一个重要部分就是对机器学习技术的理解,尤其是如何在Azure平台上应用机器学习工具。在Azure上,您可以利用Azure Machine Learning Studio、Azure Databricks等服务来构建、训练和部署机器学习模型。熟悉这些工具将大大提升您在AI-900考试中的竞争力。
三、深度学习:突破性的技术革新
深度学习作为机器学习的一部分,已经取得了非常突出的技术突破,尤其在处理复杂数据(如图像和语音)方面表现出色。
3.1 深度学习的核心要素
深度学习的最大特点是其基于人工神经网络(ANN)来模仿人脑神经元的工作原理,分层次处理信息。这种多层次的信息处理能力让深度学习能够在处理复杂问题时,展现出机器学习所无法比拟的能力。
- 人工神经网络:深度学习通过人工神经网络来模拟人脑的工作原理,使得机器能够从大量数据中提取出有价值的特征。
- 多层次学习结构:神经网络包含多个层次,每一层都处理数据的不同特征。网络越深,能够提取出的特征就越为复杂。
- 复杂模式识别:深度学习擅长处理复杂的模式识别任务,如图像识别、语音识别等。通过多层的网络结构,深度学习能够有效识别复杂的非线性数据模式。
- 高级特征提取:与传统的机器学习方法不同,深度学习能够自动从数据中提取出高级特征,不需要人工设计特征。
3.2 深度学习与Azure平台
Azure不仅提供了强大的机器学习支持,还为深度学习提供了强大的工具支持。Azure上的GPU计算实例(如Azure Machine Learning)为深度学习的模型训练提供了高效的硬件资源,确保了计算密集型的深度学习任务可以快速完成。
四、数据科学家:AI生态系统的缔造者
数据科学家是人工智能生态系统中的核心角色,他们通过将统计学、编程技术和领域知识相结合,推动机器学习和深度学习技术的实际应用。理解数据科学家所需的核心技能对通过AI-900考试非常重要。
4.1 数据科学家的必备技能
数据科学家需要掌握多项技能,这些技能不仅限于数学和统计学,还需要了解如何运用现代技术来处理和分析数据。
- 数学与统计学知识:数据科学家需要具备扎实的数学基础,尤其是在概率论、统计学、线性代数等领域。
- 预测建模能力:数据科学家需要能够构建和验证预测模型,进行数据的回归分析、分类任务等。
- 机器学习专业知识:对机器学习算法有深刻的理解,能够选择和应用适合的模型来解决特定问题。
- 数据分析技能:数据科学家需要熟悉如何从海量数据中提取有价值的信息,进行数据清洗、处理和可视化。
4.2 数据科学家的工具:Azure支持
Azure为数据科学家提供了多个工具,助力他们更高效地完成任务。Azure Machine Learning Studio、Azure Databricks、Azure Synapse Analytics等工具可以帮助数据科学家进行数据的处理、建模、训练和部署。
五、AI、机器学习和深度学习的关系
AI、机器学习和深度学习这三者之间有着层次分明的关系。AI作为最外层的技术框架,涵盖了机器学习和深度学习这两个重要的实现方法。
5.1 技术层次架构
- AI(人工智能):是一个广泛的概念,涵盖了所有与智能化任务相关的技术,包括机器学习、自然语言处理、专家系统等。
- 机器学习(ML):是实现AI的核心技术之一,机器学习侧重于通过数据和算法让计算机自主学习并改进表现。
- 深度学习(DL):是机器学习的一个特定实现,使用神经网络来处理更为复杂的数据和任务。
5.2 AI-900考试中的知识点
AI-900考试中,考生需要了解AI、ML和DL的基本概念、关系和应用场景。这不仅帮助您理解技术背后的原理,还能帮助您在实际工作中更加高效地运用这些技术。
六、实际应用案例分析
6.1 常见应用场景
- 图像识别系统:深度学习被广泛应用于图像分类和物体识别任务,例如,自动驾驶汽车中的视觉系统。
- 自然语言处理:机器学习和深度学习被广泛用于语音识别、机器翻译、情感分析等任务。
- 推荐算法:AI通过用户历史行为来预测用户的兴趣,从而提供个性化的推荐。
- 自动驾驶技术:AI和深度学习技术在自动驾驶中发挥了重要作用,通过实时感知和决策来确保驾驶安全。
七、总结与备考建议
通过深入学习AI、机器学习、深度学习的
层次架构,您不仅能掌握人工智能的核心技术,还能为顺利通过AI-900认证考试做好准备。建议考生从基础概念入手,掌握相关技术的应用场景和实践方法,并通过Azure平台进行实践操作,提升自己的技能。
备考建议:
- 理论学习:系统学习AI、机器学习、深度学习的理论知识,理解每个技术的工作原理和应用。
- 实践操作:通过Azure机器学习服务、Azure Databricks等平台进行实际项目的训练,增强操作经验。
- 模拟考试:参加AI-900模拟考试,熟悉考试题型,并根据模拟结果调整备考策略。
通过这些准备,您将能够顺利通过AI-900认证考试,并为未来进入人工智能领域奠定坚实基础。
Azure基础认证(AI-900)完全指南
-
认证概述:认证概述
-
考试的核心内容:考试核心内容
-
AI层级:AI层级
-
AI基础概念:AI基础概念
-
数据集:数据集
-
数据标注:数据标注
-
监督学习与无监督强化学习:监督学习与无监督强化学习
-
神经网络与深度学习:神经网络与深度学习
-
GPU:GPU
-
CUDA:CUDA
-
ML Pipeline:ML Pipeline
-
预测和预报:预测和预报
-
评估指标:评估指标
-
Jupyter Notebooks:Jupyter Notebooks
-
回归分析:回归分析
-
分类:分类
-
聚类:聚类
-
混淆矩阵:混淆矩阵
本文为原创内容,未经许可不得转载。
评论记录:
回复评论: