K8S简介、使用教程

以下是关于 Kubernetes(通常缩写为 K8S)的简介和使用教程:

一、Kubernetes 简介

  1. 定义与作用
    Kubernetes 是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它最初由谷歌开发,后捐赠给云原生计算基金会(CNCF),并成为云原生领域中非常重要的基础设施。在如今的软件开发和部署场景中,随着容器技术(如 Docker)的广泛应用,Kubernetes 能够帮助开发者和运维团队高效地管理大量的容器,确保应用程序在不同的环境(如开发、测试、生产环境)中可靠且稳定地运行。

  2. 核心概念

    • Pod:是 Kubernetes 中最小的可部署和可管理的计算单元,它可以包含一个或多个紧密相关的容器。这些容器通常会共享网络和存储资源,并且总是一起被调度到同一个节点上运行。例如,一个包含 Web 服务器容器和数据库容器的组合,如果它们之间关联紧密,就可以放在一个 Pod 中(不过实际应用中更建议将数据库单独部署在不同的 Pod 中,这里只是为了便于理解举例)。
    • Node(节点):指的是集群中的一台机器,可以是物理机也可以是虚拟机,节点上运行着 Kubernetes 的相关组件(如 kubeletkube-proxy 等),并且可以用来运行 Pod。简单理解就是承载 Pod 的宿主主机。
    • Service(服务):用于将一组 Pod 暴露给其他应用或者外部网络,提供了稳定的网络访问入口。它可以通过不同的类型(如 ClusterIP 只在集群内部可访问、NodePort 可以通过集群中节点的特定端口访问、LoadBalancer 借助外部负载均衡器来对外提供服务等)实现不同的网络访问需求。
    • Deployment(部署):用于声明式地管理 Pod 的创建、更新和删除等操作,提供了应用程序的滚动更新、回滚等功能,方便开发者对应用进行版本升级等操作。
    • Namespace(命名空间):类似于操作系统中的文件夹,用于对集群中的资源进行隔离和分组管理,不同的命名空间中的资源可以同名,便于在多团队、多项目共用集群时划分资源和权限。

二、Kubernetes 使用教程

安装 Kubernetes
  1. 本地环境安装(以 Minikube 为例,适合用于学习和开发测试)

    • 前提条件:需要先安装好 Docker(因为 Minikube 依赖 Docker 来运行容器)以及对应的命令行工具(如 kubectl,用于与 Kubernetes 集群交互的客户端工具)。
    • 安装步骤
      • 根据操作系统下载对应的 Minikube 安装包(可以从官方网站获取),然后进行安装。
      • 安装完成后,在命令行执行 minikube start 命令来启动本地的 Kubernetes 集群。这个过程中,Minikube 会自动下载所需的镜像等资源并初始化集群。
      • 通过 kubectl get nodes 命令可以查看集群中的节点信息,若看到节点状态为 Ready,则表示集群启动成功。
  2. 生产环境安装(有多种方式,以基于云服务商提供的 Kubernetes 服务为例,如云原生的 Google Kubernetes Engine(GKE)、Amazon Elastic Kubernetes Service(EKS)、阿里云的容器服务 Kubernetes 版等)

    • 以 GKE 为例的步骤
      • 登录 Google Cloud 平台账号,在控制台中选择创建 Kubernetes 引擎集群,按照提示配置集群的相关参数,如节点数量、机器类型、网络配置等。
      • 完成配置后,点击创建,平台会自动完成集群的创建和初始化工作,创建完成后同样可以使用 kubectl get nodes 命令(前提是在本地配置好与 GKE 集群连接的 kubectl)来查看节点信息,确认集群状态。
创建和管理资源
  1. 创建 Pod
    • 使用 YAML 文件定义 Pod(推荐方式,便于版本控制和复用):创建一个例如名为 my-pod.yaml 的文件,内容示例如下:
      apiVersion: v1
      kind: Pod
      metadata:
        name: my-pod
        labels:
          app: my-app
      spec:
        containers:
        - name: my-container
          image: nginx:latest
          ports:
          - containerPort: 80

这个 YAML 文件定义了一个名为 my-pod 的 Pod,它包含一个基于 nginx:latest 镜像的容器,并且容器暴露了 80 端口。

  • 创建 Pod:在命令行执行 kubectl create -f my-pod.yaml 命令,Kubernetes 就会根据这个 YAML 文件创建对应的 Pod。可以通过 kubectl get pods 命令查看 Pod 的状态。
  1. 创建 Deployment
    • 同样使用 YAML 文件定义(例如 my-deployment.yaml
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: my-deployment
        labels:
          app: my-app
      spec:
        replicas: 3
        selector:
          matchLabels:
            app: my-app
        template:
          metadata:
            labels:
              app: my-app
          spec:
            containers:
            - name: my-container
              image: nginx:latest
              ports:
              - containerPort: 80

这里定义了一个名为 my-deployment 的 Deployment,它会创建 3 个副本(由 replicas 参数指定)的 Pod,Pod 中的容器基于 nginx:latest 镜像且暴露 80 端口。

  • 创建 Deployment:执行 kubectl create -f my-deployment.yaml 命令,通过 kubectl get deployments 和 kubectl get pods 命令可以分别查看 Deployment 和其创建的 Pod 的状态。
  1. 创建 Service
    • 使用 YAML 文件定义服务(例如 my-service.yaml),以下是创建一个 ClusterIP 类型服务的示例
      apiVersion: v1
      kind: Service
      metadata:
        name: my-service
        labels:
          app: my-app
      spec:
        type: ClusterIP
        selector:
          app: my-app
        ports:
          - protocol: TCP
            port: 80
            targetPort: 80

这个服务会选择所有带有 app: my-app 标签的 Pod,将它们的 80 端口(targetPort)映射到服务的 80 端口(port)上,并且服务类型为 ClusterIP,意味着只能在集群内部访问。

  • 创建 Service:执行 kubectl create -f my-service.yaml 命令,通过 kubectl get services 命令可以查看服务的相关信息。
应用更新与回滚
  1. 更新 Deployment 中的容器镜像(实现应用版本升级)
    执行 kubectl set image deployment/my-deployment my-container=nginx:new-version 命令(这里假设 nginx:new-version 是要更新的新镜像版本),Kubernetes 会自动进行滚动更新,逐个替换旧版本的 Pod 为新版本的 Pod,在更新过程中可以通过 kubectl rollout status deployment/my-deployment 命令查看更新进度。
  2. 回滚 Deployment
    如果更新后出现问题,可以执行 kubectl rollout undo deployment/my-deployment 命令进行回滚操作,将 Deployment 回滚到上一个版本的状态。
资源删除

要删除之前创建的资源,可以执行以下命令:

  • 删除 Podkubectl delete pod my-pod(不过通常更建议通过管理 Deployment 等上层资源来间接管理 Pod,直接删除 Pod 可能会被重新创建,如果是由 Deployment 管理的话)。
  • 删除 Deploymentkubectl delete deployment my-deployment,这会同时删除它管理的所有 Pod。
  • 删除 Servicekubectl delete service my-service

以上只是 Kubernetes 的一个非常基础的使用教程,实际应用中它还有很多高级的功能和配置选项,比如配置存储卷、网络策略、资源配额等,需要进一步深入学习和实践来掌握。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

能源电力企业安全数据内外网文件交换

在数字化浪潮的推动下,能源电力行业数据交换的频率急剧上升,涉及的视频、研发、设计等各类文件数量庞大。这些文件的内外网传输不仅要追求速度,更要确保数据安全。随着国家对数据安全重视程度的提高,《网络安全法》和《数据安全法…

突破内存限制:Mac Mini M2 服务器化实践指南

本篇文章,我们聊聊如何使用 Mac Mini M2 来实现比上篇文章性价比更高的内存服务器使用,分享背后的一些小的思考。 希望对有类似需求的你有帮助。 写在前面 在上文《ThinkPad Redis:构建亿级数据毫秒级查询的平民方案》中,我们…

C++ 二叉搜索树(Binary Search Tree, BST)深度解析与全面指南:从基础概念到高级应用、算法优化及实战案例

🌟个人主页:落叶 🌟当前专栏: C专栏 目录 ⼆叉搜索树的概念 ⼆叉搜索树的性能分析 ⼆叉搜索树的插⼊ ⼆叉搜索树的查找 二叉搜索树中序遍历 ⼆叉搜索树的删除 cur的左节点为空的情况 cur的右节点为空的情况 左,右节点都不为…

数据库、数据仓库、数据湖、数据中台、湖仓一体的概念和区别

数据库、数据仓库、数据湖、数据中台和湖仓一体是数据管理和分析领域的不同概念,各自有不同的特点和应用场景。以下是它们的主要区别: 1. 数据库(Database) 定义:结构化的数据存储系统,用于高效地存储、检…

RabbitMQ原理架构解析:消息传递的核心机制

文章目录 一、RabbitMQ简介1.1、概述1.2、特性 二、RabbitMQ原理架构三、RabbitMQ应用场景3.1、简单模式3.2、工作模式3.3、发布订阅3.4、路由模式3.5 主题订阅模式 四、同类中间件对比五、RabbitMQ部署5.1、单机部署5.2、集群部署(镜像模式)5.3、K8s部署…

idea_常用设置

相关设置 项目的JDK设置out目录取消自动更新设置主题设置菜单和窗口字体大小滚轮调节字体大小显示行号与方法分隔符代码智能提示忽略大小写自动导包配置设置项目文件编码设置控制台的字符编码修改类头的文档注释信息设置自动编译 项目的JDK设置 File -> Project Structure -…

Redis的管道操作

在现代应用程序中,Redis作为一种高性能的内存数据库,被广泛用于缓存、消息队列、实时分析等场景。为了进一步提高Redis的性能,Redis提供了管道(Pipeline)操作,允许客户端将多个命令一次性发送到服务器&…

详解登录MySQL时出现SSL connection error: unknown error number错误

目录 登录MySQL时出错SSL connection error: unknown error number 出错原因 使用MySQL自带的工具登录MySQL 登陆之后,使用如下命令进行查看 解决方法 找到MySQL8安装目录下的my.ini配置文件 记事本打开my.ini文件,然后按下图所示添加配置 此时再…

E2、UML类图顺序图状态图实训

一、实验目的 在面向对象的设计里面,可维护性复用都是以面向对象设计原则为基础的,这些设计原则首先都是复用的原则,遵循这些设计原则可以有效地提高系统的复用性,同时提高系统的可维护性。在掌握面向对象七个设计原则基础上&…

Angular面试题汇总系列一

1. 如何理解Angular Signal Angular Signals is a system that granularly tracks how and where your state is used throughout an application, allowing the framework to optimize rendering updates. 什么是信号 信号是一个值的包装器,可以在该值发生变化时…

我要成为算法高手-递归篇

目录 题目1:汉诺塔题目2:合并两个有序链表题目3:反转链表题目4:两两交换链表中的结点题目5:Pow(x,n) 题目1:汉诺塔 面试题 08.06. 汉诺塔问题 - 力扣(LeetCode) 解题思路&#xff1…

【大数据技术基础】 课程 第8章 数据仓库Hive的安装和使用 大数据基础编程、实验和案例教程(第2版)

第8章 数据仓库Hive的安装和使用 8.1 Hive的安装 8.1.1 下载安装文件 访问Hive官网(http://www.apache.org/dyn/closer.cgi/hive/)下载安装文件apache-hive-3.1.2-bin.tar.gz 下载完安装文件以后,需要对文件进行解压。按照Linux系统使用的…

js.二叉树的层序遍历2

链接:107. 二叉树的层序遍历 II - 力扣(LeetCode) 题目: 给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历&#xff09…

kafka生产者和消费者命令的使用

kafka-console-producer.sh 生产数据 # 发送信息 指定topic即可 kafka-console-producer.sh \ --bootstrap-server bigdata01:9092 \ --topic topicA # 主题# 进程 29124 ConsoleProducer kafka-console-consumer.sh 消费数据 # 消费数据 kafka-console-consumer.sh \ --boo…

基于Springboot的心灵治愈交流平台系统的设计与实现

基于Springboot的心灵治愈交流平台系统 介绍 基于Springboot的心灵治愈交流平台系统,后端框架使用Springboot和mybatis,前端框架使用Vuehrml,数据库使用mysql,使用B/S架构实现前台用户系统和后台管理员系统,和不同级别…

从入门到精通数据结构----四大排序(上)

目录 首言: 1. 插入排序 1.1 直接插入排序 1.2 希尔排序 2. 选择排序 2.1 直接选择排序 2.2 堆排序 3. 交换排序 3.1 冒泡排序 3.2 快排 结尾: 首言: 本篇文章主要介绍常见的四大排序:交换排序、选择排序、插入排序、归并排…

SpringCloud+SpringCloudAlibaba学习笔记

SpringCloud 服务注册中心 eureka ap 高可用 分布式容错 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency><groupId…

Sentinel服务保护

Sentinel是阿里巴巴开源的一款服务保护框架&#xff0c;目前已经加入SpringCloudAlibaba中。官方网站&#xff1a; home | Sentinel Sentinel 的使用可以分为两个部分: 核心库&#xff08;Jar包&#xff09;&#xff1a;不依赖任何框架/库&#xff0c;能够运行于 Java 8 及以…

【Redis 】Bitmap 使用

Redis Bitmap介绍 Redis Bitmap 是一种特殊的数据类型&#xff0c;它通过字符串类型键来存储一系列连续的二进制位&#xff08;bits&#xff09;&#xff0c;每个位可以独立地表示一个布尔值&#xff08;0 或 1&#xff09;。这种数据结构非常适合用于存储和操作大量二值状态的…

【spark-spring boot】学习笔记

目录 说明RDD学习RDD介绍RDD案例基于集合创建RDDRDD存入外部文件中 转换算子 操作map 操作说明案例 flatMap操作说明案例 filter 操作说明案例 groupBy 操作说明案例 distinct 操作说明案例 sortBy 操作说明案例 mapToPair 操作说明案例 mapValues操作说明案例 groupByKey操作说…