K8S POD控制器:从基础到高级实战技巧

news2024/9/21 14:48:28

一、引言

在当今的云计算时代,Kubernetes(K8s)已成为最受欢迎的容器编排工具,它的核心组成部分之一——K8s POD控制器,扮演着至关重要的角色。这篇文章旨在深入探讨K8s POD控制器的内部工作原理、不同类型及其应用场景,并提供从基础到高级的实战技巧,以满足专业从业者对深度技术知识的需求。

本文适合具备一定Kubernetes基础知识的专业人士,包括云服务架构师、系统管理员、软件工程师等,他们希望通过深入了解POD控制器来优化和提升云服务的运行效率和稳定性。文章将从POD控制器的基本概念出发,逐步深入到其工作原理、不同控制器类型的应用场景,以及如何在实际中高效地应用这些知识。

二、Kubernetes POD控制器盘点

file

Kubernetes, 作为一种广泛使用的开源容器编排系统,其核心功能之一是自动化部署、扩展和管理容器化应用程序。在这个系统中,POD控制器是一个关键组件,负责确保指定数量的Pod副本始终运行。这个基础部分将详细介绍Kubernetes POD控制器的概念、种类和其在容器管理中的重要性。

Kubernetes和POD控制器简介

Kubernetes是由Google开发并捐赠给Cloud Native Computing Foundation的一个项目。它允许用户自动部署、扩展和管理容器化应用,并在提供这些服务的同时,保持高效和可靠。Kubernetes的核心组件之一是POD,它是Kubernetes应用程序的基本执行单元。一个POD中可以包含一个或多个容器,这些容器共享存储、网络和运行配置。

在Kubernetes中,POD控制器则是负责确保POD的生命周期管理。它们确保在任何给定时间,集群中都有正确数量的POD副本在运行。如果一个POD失败或被删除,POD控制器会自动替换它,保持服务的持续可用性和弹性。

POD控制器的种类和用途

POD控制器有多种类型,每种类型都有其特定的用途和应用场景。

ReplicaSet

ReplicaSet是最基本的POD控制器类型,它确保指定数量的Pod副本始终处于运行状态。如果有Pod失败,ReplicaSet将会替换它。它适用于那些需要高可用性但不需要更新管理的应用。

Deployment

Deployment是一种高级的POD控制器,它在ReplicaSet的基础上添加了版本控制和滚动更新功能。它允许用户以受控的方式更新POD,并在必要时回滚到之前的版本。这使得Deployment成为大多数Kubernetes应用的理想选择。

StatefulSet

StatefulSet是专门为需要持久存储和唯一网络标识的应用设计的。与Deployment不同,StatefulSet中的每个Pod都有一个固定的、持久的标识符。这适用于数据库等需要稳定身份和存储的应用。

DaemonSet

DaemonSet确保所有(或某些)节点上运行Pod的副本。当有新节点加入集群时,系统会自动在这些节点上添加Pod。这种类型的控制器适用于集群级别的服务,如日志收集器和监控代理。

Job 和 CronJob

Job和CronJob用于处理一次性和定时任务。Job保证一个或多个Pod成功完成任务,而CronJob则按照预定的时间表运行任务。

接下来的部分,我们将深入探讨每种POD控制器的工作原理和使用场景。

ReplicaSet工作原理

ReplicaSet通过定义一个所期望的副本数量来确保特定数量的Pod副本始终运行。它通过一个标签选择器来识别属于它管理的Pod。如果现有的Pod数量少于期望数量,ReplicaSet会创建新的Pod来填补缺口。

例如,如果你定义了一个ReplicaSet来管理三个副本,那么无论何时如果有一个Pod失败,ReplicaSet都会立刻创建一个新的Pod来替代它。这种机制保证了应用的可用性和扩展性。

Deployment的滚动更新

Deployment通过逐步替换旧的Pod版本来实现应用的更新,从而最大限度地减少应用的停机时间。这是通过创建新的ReplicaSet并逐渐增加其副本数量,同时减少旧ReplicaSet中的副本数量来实现的。

例如,如果你需要更新应用的新版本,Deployment将会逐步启动新版本的Pod,同时逐步关闭旧版本的Pod。这个过程是自动的,并且可以配置以满足不同的更新策略。

StatefulSet的身份管理

StatefulSet为每个Pod副本分配一个唯一的、持久的标识符,如序号或主机名。这意味着即使Pod被重新调度到其他节点上,它们的标识也不会改变。这对于需要稳定身份和持久存储的应用至关重要。

例如,在部署一个数据库集群时,StatefulSet能确保每个数据库实例都有一个稳定的网络标识,以及连接到持久存储的能力。这保证了数据的持续性和应用的稳定性。

DaemonSet的集群服务

DaemonSet确保在集群的每个节点(或指定节点)上运行Pod的副本。这对于需要在集群中每个节点上运行的服务来说非常有用,如日志收集器或监控代理。

例如,如果你部署了一个日志收集器的DaemonSet,那么它将在集群中的每个节点上启动一个Pod实例。这样可以保证所有节点的日志都被收集和监控。

Job 和 CronJob的定时任务处理

Job用于执行一次性任务,它会创建一个或多个Pod,并确保这些Pod成功地运行到完成。一旦所有的Pod都成功完成,Job就会标记为完成。CronJob则扩展了Job的概念,它按照预定的时间表运行Job。

例如,你可以使用CronJob来安排每晚执行数据库备份的任务。CronJob将在指定的时间创建一个Job,该Job启动一个Pod来执行备份操作。

通过理解这些不同类型的POD控制器及其工作原理,云服务架构师和系统管理员可以更有效地管理和优化Kubernetes环境。不仅如此,他们还能够为特定的应用和需求选择合适的控制器类型,从而提高系统的稳定性和可用性。

三、Kubernetes POD控制器配置示例

在Kubernetes中,配置POD控制器是一个关键步骤,它决定了应用如何在集群中部署、扩展和管理。本部分将通过具体的示例,详细介绍如何配置不同类型的POD控制器,包括ReplicaSet、Deployment、StatefulSet、DaemonSet、Job和CronJob。我们将深入探讨每种控制器的YAML配置文件,并讨论它们的关键配置项和最佳实践。

ReplicaSet配置示例

ReplicaSet的主要作用是确保指定数量的Pod副本始终运行。以下是一个简单的ReplicaSet配置示例:

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: my-replicaset
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp-container
        image: myapp:1.0

在这个示例中,我们定义了一个名为my-replicaset的ReplicaSet,它将确保有三个带有app: myapp标签的Pod副本始终运行。每个Pod包含一个名为myapp-container的容器,该容器运行myapp:1.0镜像。

关键配置项

  • replicas: 指定副本的数量。

  • selector: 定义用于选择Pod的标签。

  • template: 定义Pod的模板,包括容器镜像和其他配置。

Deployment配置示例

Deployment控制器用于管理Pod的生命周期,包括更新和回滚。以下是一个Deployment配置的示例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 3
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp-container
        image: myapp:2.0

这个Deployment名为my-deployment,它管理三个myapp:2.0镜像的Pod副本。更新策略被设置为滚动更新,最多一个Pod不可用,最多可以增加一个新的Pod。

关键配置项

  • strategy: 定义更新策略。

  • rollingUpdate: 指定滚动更新的参数。

StatefulSet配置示例

StatefulSet用于管理需要稳定身份和持久存储的应用。以下是一个StatefulSet的配置示例:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: my-statefulset
spec:
  serviceName: "myapp"
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp-container
        image: myapp:3.0

在这个配置中,my-statefulset管理着三个myapp:3.0镜像的Pod副本。每个Pod都有一个固定的标识符和网络地址。

关键配置项

  • serviceName: 关联的服务名称。

  • replicas: 副本数量。

DaemonSet配置示例

DaemonSet确保在每个(或某些)节点上运行Pod的副本。以下是一个DaemonSet的配置示例:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: my-daemonset
spec:
  selector:
    matchLabels:
      app: mydaemon
  template:
    metadata:
      labels:
        app: mydaemon
    spec:
      containers:
      - name: mydaemon-container
        image: mydaemon:1.0
        resources:
          requests:
            memory: "256Mi"
            cpu: "500m"
          limits:
            memory: "512Mi"
            cpu: "1"
      nodeSelector:
        disktype: ssd

在此示例中,DaemonSet my-daemonset 被配置为在所有具有disktype: ssd标签的节点上运行mydaemon:1.0镜像。它还定义了资源请求和限制,确保每个Pod都有足够的资源运行。

关键配置项

  • nodeSelector: 选择运行Pod的节点。

  • resources: 定义CPU和内存的请求和限制。

Job配置示例

Job用于运行短期的一次性任务。以下是Job的配置示例:

apiVersion: batch/v1
kind: Job
metadata:
  name: my-job
spec:
  template:
    spec:
      containers:
      - name: myjob-container
        image: myjob:1.0
      restartPolicy: Never
  backoffLimit: 4

这个Job my-job 配置为运行myjob:1.0镜像,如果任务失败,它会尝试最多四次重试。

关键配置项

  • restartPolicy: Pod重启策略。

  • backoffLimit: 失败重试次数限制。

CronJob配置示例

CronJob用于按预定时间表运行任务。以下是CronJob的配置示例:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: my-cronjob
spec:
  schedule: "0 23 * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: mycronjob-container
            image: mycronjob:1.0
          restartPolicy: OnFailure

这个CronJob my-cronjob 被配置为每天晚上11点执行mycronjob:1.0镜像。如果任务失败,它将重启容器。

关键配置项

  • schedule: 定义CronJob的执行时间。

  • jobTemplate: 定义要运行的Job。

通过这些示例,我们可以看到Kubernetes POD控制器如何通过各种配置选项和参数来管理Pod的生命周期和行为。掌握这些控制器的配置对于有效管理Kubernetes集群至关重要。

四、Kubernetes POD控制器最佳实践

file

在Kubernetes环境中,合理地使用POD控制器对于确保应用的稳定性、可扩展性和高可用性至关重要。本部分将探讨在使用Kubernetes POD控制器时的一系列最佳实践,旨在帮助专业从业者更高效地管理和优化他们的Kubernetes集群。

理解和使用标签和选择器

在Kubernetes中,标签(Labels)和选择器(Selectors)是连接不同资源(如PODs和ReplicaSets)的关键。使用标签和选择器可以有效地组织和管理集群中的资源。

最佳实践

  • 明确的标签命名:使用直观明了的标签,如app: myapptier: frontend,以便快速识别资源。

  • 一致的标签应用:在相同类型的资源上应用一致的标签系统。

  • 使用选择器进行资源筛选:合理使用选择器进行资源筛选,以确保控制器只管理它们应该管理的Pods。

管理Pod的生命周期

合理管理Pod的生命周期对于保持应用的稳定性和可用性至关重要。这涉及到正确配置Pod的启动、更新和终止。

最佳实践

  • 定义资源限制和请求:为每个容器设置合理的CPU和内存限制。

  • 合理配置健康检查:利用存活探针(Liveness Probes)和就绪探针(Readiness Probes)来检查Pod的健康状况。

  • 优雅地处理终止:配置Pod以优雅地处理终止信号,确保清理和资源回收。

使用Deployment进行滚动更新

使用Deployment进行应用更新是一种常见的做法。合理配置滚动更新策略可以减少服务中断和故障。

最佳实践

  • 逐步滚动更新:配置滚动更新策略,以逐步替换旧版本的Pods,从而减少服务中断。

  • 监控部署状态:监控部署的状态,以便在出现问题时快速做出反应。

  • 使用回滚策略:在更新失败时,利用自动回滚机制恢复到之前的稳定版本。

高效使用StatefulSets

对于需要稳定身份和持久存储的应用,如数据库,高效使用StatefulSets是关键。

最佳实践

  • 持久化存储配置:确保为StatefulSet中的每个Pod配置持久化存储。

  • 稳定的网络标识:利用StatefulSets为每个Pod提供稳定的网络标识,确保服务的连续性。

  • 有序部署和扩展:配置StatefulSets以有序地进行部署和扩展操作。

优化DaemonSets的部署

DaemonSets用于确保在所有(或某些)节点上运行Pod的副本,通常用于日志收集、监控等。

最佳实践

  • 节点选择:使用节点选择器(Node Selectors)或亲和性(Affinity)规则来确定DaemonSet应该在哪些节点上运行。

  • 资源分配:合理分配资源,确保DaemonSet不会耗尽节点上的关键资源。

  • 及时更新:定期更新DaemonSet以保持其功能和安全性。

使用Jobs和CronJobs处理批处理任务

对于批处理任务,Jobs和CronJobs提供了灵活的配置选项。

最佳实践

  • 明确任务结束条件

为Job配置明确的成功和失败条件。

  • 合理安排执行时间:对于CronJobs,合理安排执行时间,以避免对系统性能产生不利影响。

  • 资源限制:为Job和CronJob设置资源限制,避免它们消耗过多资源。

通过采纳这些最佳实践,Kubernetes用户可以更有效地利用POD控制器,提高应用的稳定性和性能,同时降低运维复杂性。了解和应用这些实践将有助于建立一个更加健壮和高效的Kubernetes环境。

五、案例研究与应用

在本部分,我们将通过一个真实案例来分析如何在复杂的生产环境中应用POD控制器以优化云服务架构。我们选择的案例是一个大型电子商务公司,该公司通过Kubernetes POD控制器来管理其复杂的在线交易平台。

案例概述

该电子商务公司的在线交易平台包含多个服务,包括商品展示、订单处理、支付网关等。由于高流量和动态市场需求,平台需要高度的可扩展性和可靠性。公司采用Kubernetes作为其容器编排和管理工具,利用不同类型的POD控制器来优化服务。

部署策略

使用Deployment管理前端和API服务

公司使用Deployment控制器来管理其前端界面和API服务。这些服务对用户体验至关重要,因此需要保持高可用性和零停机部署。

优化点
  • 滚动更新策略:通过配置滚动更新策略,公司能够在不影响用户的情况下更新服务。

  • 自动扩缩容:基于流量和使用情况自动调整副本数量,以应对访问高峰和低谷。

使用StatefulSet运行数据库

数据库是交易平台的关键组成部分,需要稳定的状态和持久化存储。因此,公司选择使用StatefulSet来部署其数据库服务。

优化点
  • 持久化存储配置:确保每个数据库Pod都能够连接到持久化存储,以避免数据丢失。

  • 稳定的网络身份:每个数据库Pod都有一个固定的网络标识,保证服务间通信的一致性。

使用DaemonSet部署监控和日志收集

为了确保平台的稳定运行,公司利用DaemonSet在每个节点上部署监控和日志收集服务。

优化点
  • 全节点覆盖:通过DaemonSet确保每个集群节点都运行监控和日志收集Pod,实现全面的数据收集。

  • 资源分配:合理分配资源给这些Pod,以避免影响其他重要服务。

优化和挑战

自动化和性能优化

公司利用Kubernetes的自动化能力来优化资源使用和提高服务性能。通过设置合理的资源请求和限制,确保服务的响应速度和稳定性。

应对高流量事件

在促销或节假日期间,平台会经历巨大的流量压力。通过动态调整Deployment和StatefulSet的副本数量,公司能够灵活应对流量波动。

数据一致性和备份

对于StatefulSet部署的数据库服务,公司面临数据一致性和备份的挑战。通过设置定期备份和跨区域复制策略,公司能够减少数据丢失的风险。

安全性和合规性

在管理Kubernetes集群时,公司还必须确保满足安全性和合规性要求。通过实施严格的安全策略和访问控制,公司能够保护敏感数据和用户信息。

结论

通过这个案例,我们可以看到Kubernetes POD控制器在处理大规模、高可用性和高可扩展性需求的环境中的强大能力。该电子商务公司通过精心设计和优化POD控制器配置,成功地管理了其复杂的在线交易平台,确保了服务的稳定性和用户的满意度。

文章转载自:techlead_krischang

原文链接:https://www.cnblogs.com/xfuture/p/18219570

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1930656.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构】树和二叉树及堆的深入理解

【数据结构】树和二叉树及堆的深入理解 🔥个人主页:大白的编程日记 🔥专栏:数据结构 文章目录 【数据结构】树和二叉树及堆的深入理解前言一.树1.1 树的概念1.2 树的相关概念1.3 树的表示1.4 树的应用 二.二叉树2.1 二叉树概念及…

clion中建立c文件工程,读取或创建sqlite3数据库文件

1.首先前往SQLite官网下载sqlite3所需文件 SQLite Download Page 2.解压文件,将其中的sqlite3.c和sqlite3.h拷贝到你对应的文件工程中 3.修改CMakeLists.txt文件,添加编译选项及连接文件 4.运行代码及查询数据库文件

实战:SpringBoot 15个功能强大Bean

下面这15个bean,可以很方便的帮我们获取当前环境信息,运行信息,参数信息等等 1. 应用程序参数Environment和ApplicationArguments SpringBoot程序在启动时,可以通过如下方式设置启动参数: java -jar app.jar --pack…

单链表算法 - 链表分割

链表分割_牛客题霸_牛客网现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的。题目来自【牛客题霸】https://www.nowcoder.com/practice/0e27e0b064de4eacac178676ef9c9d70思路: 代码: /* struct ListNode {int val;struct List…

iterator(迭代器模式)

引入 在想显示数组当中所有元素时&#xff0c;我们往往会使用下面的for循环语句来遍历数组 #include <iostream> #include <vector>int main() {std::vector<int> v({ 1, 2, 3 });for (int i 0; i < v.size(); i){std::cout << v[i] << &q…

正则表达式(Ⅲ)——分组匹配

简介 为了给表达式分组&#xff0c;我们需要将文本包裹在 () 中 有点类似于匹配子串&#xff0c;只不过是找出所有的子串&#xff0c;并且拼成一组 分组之间需要有分割符&#xff0c;,或者-或者_都可以 直接分组 引用分组 这个比较难以理解 \1和\2的作用有两个&#xff1a…

Ubuntu系统修改SSH默认端口号

1.查看系统和系统版本号 rootecs-c0fe:~# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 16.04.7 LTS Release: 16.04 Codename: xenial rootecs-c0fe:~# uname -a Linux ecs-c0fe 4.4.0-210-generic #242-Ubunt…

Python入门------多个版本--虚拟环境的创建(非anaconda方式)

说明介绍&#xff1a; 1. 什么是虚拟环境 在Python中&#xff0c;虚拟环境&#xff08;Virtual Environment&#xff09;是一个独立的、隔离的Python运行环境&#xff0c;它拥有自己的Python解释器、第三方库和应用程序。通过创建虚拟环境&#xff0c;可以确保项目之间的依赖关…

Python 实验五 高级数据结构

一、实验目的 &#xff08;1&#xff09;掌握序列的基本操作 &#xff08;2&#xff09;掌握集合、字典的基本操作 二、实验环境 联网计算机一台/每人&#xff0c;内装Windows 7以上操作系统和安装Python 3.7集成开发环境IDLE。 三、实验内容 Sy5-1 列表实现。编写一个…

数据库的约束条件和用户管理

约束条件&#xff1a; 主键&#xff1a;主键约束 primary key 用于标识表中的主键列的值&#xff0c;而且这个值是全表当中唯一的&#xff0c;而且只不能为null 一个表只能有一个主键。 外键&#xff1a;用来建立表与表之间的关系。确保外键中的值于另一个表的主键值匹配&a…

camtasia怎么剪掉不用的部分 屏幕录制的视频怎么裁剪上下不要的部分 camtasia studio怎么裁剪视频时长 camtasia怎么剪辑视频教程

有时我们录制的屏幕内容&#xff0c;并不一定全部需要。那么&#xff0c;屏幕录制的视频怎么裁剪上下不要的部分&#xff1f;可以使用视频剪辑软件&#xff0c;或者微课制作工具来进行裁剪。屏幕录制的视频怎么旋转&#xff1f;录制视频的旋转也是一样的&#xff0c;均在编辑步…

可视化工具选择指南:助力企业数字化转型和新质生产力发展

随着信息技术的快速发展和新质生产力概念的兴起&#xff0c;可视化工具在各个行业中的作用日益凸显。这些工具不仅能够帮助用户更直观地理解和分析数据&#xff0c;还能提升团队的协作效率和决策质量。 在当今数字化转型迅速发展的背景下&#xff0c;新质生产力的概念正在成为…

Spring Boot项目的404是如何发生的

问题 在日常开发中&#xff0c;假如我们访问一个Sping容器中并不存在的路径&#xff0c;通常会返回404的报错&#xff0c;具体原因是什么呢&#xff1f; 结论 错误的访问会调用两次DispatcherServlet&#xff1a;第一次调用无法找到对应路径时&#xff0c;会给Response设置一个…

【React笔记初学总结一】React新手的学习流程笔记总结,掰开了揉碎了,下载安装基础结构学习

REACT学习记录 一、React是什么&#xff1a;二、尝试安装下载&#xff1a;三、理解都有什么四、基础网页学习&#xff1a;1.几个比较重要的资源包例子2.第一个react示例&#xff1a;&#xff08;掰开了揉碎了&#xff0c;咱们先看懂它最简单的结构&#xff09;3.第二个react示例…

Vue--Router(路由)

目录 一 Router(路由) 1.作用 2.实现步骤 3.注意 一 Router(路由) 1.作用 Router又叫做路由&#xff0c;简单来说&#xff0c;就是用来实现vue的页面之间跳转的。 我们都知道&#xff0c;使用vue必然会涉及到很多个组件&#xff0c;也就是页面&#xff0c;而页面之间肯定需…

mars3d实现GraphicLayer获取当前相机视角内的可视点位(矢量数据

效果&#xff1a; mars3d实现GraphicLayer获取当前相机视角内的可视点位&#xff08;矢量数据 相关依赖api&#xff1a; 1. map.getExtent(); 提取地球当前视域边界,示例&#xff1a;{ xmin: 70, xmax: 140, ymin: 0, ymax: 55, height: 0, } 2.graphicLayer.eachGraphic遍…

Android12 MultiMedia框架之NuPlayer Surface

在学习NuPlayer创建Decoder和Renderer之前&#xff0c;得先看下video数据最终生产到什么地方去&#xff1f;答案是Surface&#xff0c;而且Surface是NuPlayer创建Decoder的条件。 APP会创建一层SurfaceView来显示视频层&#xff0c;同时内部会创建一个BLASTBufferQueue&#x…

睡前故事—绿色科技的未来:可持续发展的梦幻故事

欢迎来到《Bedtime Stories Time》。这是一个我们倾听、放松、并逐渐入睡的播客。感谢你收听并支持我们&#xff0c;希望你能将这个播客作为你睡前例行活动的一部分。今晚我们将讲述绿色科技的未来&#xff1a;可持续发展的梦幻故事的故事。一个宁静的夜晚&#xff0c;希望你现…

自适应简约大气科技数码产品公司网站源码系统 模版一键搭建 可自定义带源代码包以及搭建部署教程

系统概述 在当今这个数字化、信息化的时代&#xff0c;科技数码产品行业正处于高速发展的黄金时期。为了在这个竞争激烈的市场中脱颖而出&#xff0c;科技数码产品公司不仅需要拥有卓越的产品和技术&#xff0c;还需要一个能够完美展现其品牌形象和产品特色的网站。为此&#…

【PyTorch快速入门教程】02 Jupyter notebook安装及配置

文章目录 1 安装 Jupyter notebook2 安装 ipykernel3 更改 jupyter 默认配置3.1 生成配置文件3.2 关键配置信息 4 扩展插件推荐参考 1 安装 Jupyter notebook 一行命令搞定 python -m pip install jupyter 现在就可以打开Jupyter notebook来运行python啦。 jupyter notebook…