k8s流程叙述

server/2024/9/29 15:59:56/

Kubernetes (K8s) 是一个开源的,用于管理容器化应用的平台,它提供了部署,扩展和管理容器化应用的机制。

以下是一个简单的Kubernetes部署流程的描述:

  • 1、安装和设置Kubernetes集群。

  • 2、创建一个Docker镜像,并把应用打包进去。

  • 3、创建一个Kubernetes的Deployment配置文件,用于定义应用容器的副本数量,使用的镜像,和其他配置信息。

  • 4、使用kubectl命令行工具来应用这个配置文件,这将创建一个Deployment对象。

  • 5、创建一个Service配置文件,用于暴露应用,以便外部访问。

  • 6、应用这个Service配置文件,创建一个Service对象。

  • 7、检查应用的状态,确保Pod正在运行,并且Service已经准备好接收流量。

以下是一个简单的示例,展示如何使用kubectl和YAML文件来部署一个简单的“Hello World”应用:

Deployment配置文件

# hello-world-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: hello-world
spec:replicas: 3selector:matchLabels:app: hello-worldtemplate:metadata:labels:app: hello-worldspec:containers:- name: hello-worldimage: "gcr.io/hello-minikube-zero-install/hello-world:v1"ports:- containerPort: 8080

解读hello-world-deployment.yaml

这个hello-world-deployment.yaml文件是一个Kubernetes的Deployment资源定义文件。它定义了一个名为hello-world的Deployment,用于在Kubernetes集群中部署和管理应用程序的实例(Pods)。下面是对这个YAML文件的详细解读:

apiVersion

apiVersion: apps/v1

这一行指定了Kubernetes API的版本,这里是apps/v1,它是管理Deployment等应用级别资源的稳定API版本。

kind

kind: Deployment

这指定了资源对象的类型,这里是Deployment。Deployment是Kubernetes中的一种控制器,用于声明式地更新应用程序和服务。它可以创建和管理一组Pod,确保Pod的数量和状态符合预期。

metadata

metadata:  name: hello-world

在metadata部分,定义了Deployment的名称,这里是hello-world。这个名字在Kubernetes集群中必须是唯一的。

spec

spec:  replicas: 3  selector:  matchLabels:  app: hello-world  template:  ...

spec部分包含了Deployment的规格说明:

  • replicas: 3:指定了需要运行的Pod副本数量为3。
  • selector:定义了如何选择一组Pods进行管理。这里通过标签选择器matchLabels选择所有标签为app: hello-world的Pods。
  • template:定义了如何创建Pod的模板。Kubernetes将使用此模板来创建新的Pod实例。

template

template:  metadata:  labels:  app: hello-world  spec:  containers:  - name: hello-world  image: "gcr.io/hello-minikube-zero-install/hello-world:v1"  ports:  - containerPort: 8080

在template部分:

  • metadata定义了Pod的标签,这里是app: hello-world。这些标签用于与Deployment的selector匹配,以便Deployment能够管理这些Pod。
  • spec定义了Pod中容器的具体信息:
    • containers列表中包含了一个容器,其名称是hello-world。
    • image指定了容器的镜像,这里是gcr.io/hello-minikube-zero- install/hello-world:v1。这意味着Kubernetes将从Google Container Registry(GCR)中拉取这个镜像来创建容器
    • ports定义了容器内部监听的端口,这里是8080。这并不会自动将端口暴露给外部网络,但可以在Service资源中使用这个端口来配置外部访问。
      总之,这个hello-world-deployment.yaml文件定义了一个名为hello-world的Deployment,它将确保有3个Pod实例运行,每个Pod都运行着gcr.io/hello-minikube-zero-install/hello-world:v1镜像的容器,并且这些容器都监听在8080端口上。这些Pod通过标签app: hello-world被Deployment管理。

Service配置文件

# hello-world-service.yaml
apiVersion: v1
kind: Service
metadata:name: hello-world-service
spec:type: NodePortports:- port: 80targetPort: 8080nodePort: 30007selector:app: hello-world

解读 Service配置文件

hello-world-service.yaml 文件定义了一个 Kubernetes Service 资源,用于提供对一组 Pod 的访问。在这个例子中,Service 名为 hello-world-service,并且它被配置为 NodePort 类型,允许从集群外部通过节点的 IP 地址和静态端口(在这个例子中是 30007)来访问服务。以下是该文件的详细解读:

apiVersion

apiVersion: v1

这指定了 Kubernetes API 的版本,v1 是 Service 资源的核心 API 版本。

kind

kind: Service

这表示资源对象的类型是 Service。Service 定义了 Pod 的逻辑集合和访问它们的策略。

metadata

metadata:  name: hello-world-service

在 metadata 部分,定义了 Service 的名称,这里是 hello-world-service。

spec

spec:  type: NodePort  ports:  - port: 80  targetPort: 8080  nodePort: 30007  selector:  app: hello-world

spec 部分包含了 Service 的规格说明:

- type: NodePort:这指定了 Service 的类型为 NodePort。在这种类型下,Kubernetes 集群的每个节点都会将 Service 的端口(在这个例子中是 30007)暴露给外部流量。通过访问任何节点的 IP 地址和端口 30007,都可以访问到这个 Service。
- ports:定义了 Service 监听的端口和如何将流量转发到后端 Pods。这里定义了一个端口映射:
- port: 80:这是 Service 集群内部的端口,集群内的其他服务或 Pods 可以通过这个端口访问 hello-world-service。
- targetPort: 8080:这是后端 Pods 上实际监听的端口,Service 会将流量转发到这个端口。
- nodePort: 30007:这是分配给 Service 的 NodePort 端口,外部流量可以通过这个端口访问 Service。
- selector:定义了 Service 如何选择一组 Pods。这里通过标签选择器 app: hello-world 来选择所有标签为 app: hello-world 的 Pods。这意味着 hello-world-service 将把流量转发到所有具有这个标签的 Pods。

部署应用:

kubectl apply -f hello-world-deployment.yaml
kubectl apply -f hello-world-service.yaml

检查状态:

kubectl get pods
kubectl get svc

访问应用:

minikube service hello-world-service
或者使用任何一个节点的IP和端口30007访问服务。

以上是一个基本的Kubernetes部署流程,具体的步骤可能会根据集群的配置和应用的需求有所不同。


http://www.ppmy.cn/server/106101.html

相关文章

pdf怎么加水印?5个pdf加水印小妙招,学会就不愁了!(亲测有效)

水印是一种半透明的图案,通常包含徽标或印章,用以标识文档或图像的创作者。除了用于标识,水印还可以有效地保护机密信息。如果您想在pdf文件中添加水印,有两种主要方法:您可以直接将水印嵌入到pdf文件中,或…

vscode自用插件分享

1. Image preview 通过此插件,当鼠标悬浮在图片的链接上时,可以实时预览该图片,除此之外,还可以看到图片的大小和分辨率。 2. Auto Rename Tag 使用该插件,可以在重命名一个 HTML 标签时,自动重命名 HTML 标…

pnpm快速入门

pnpm快速入门 1.使用pnpm启动项目 pnpm是一个优化的包管理器,它通过锁定工作树的方式来减少依赖安装的开销。要在pnpm环境中启动项目,首先你需要确保已经全局安装了pnpm。然后按照以下步骤操作 克隆项目:如果项目还没有下载,使用…

Nginx: 配置项之main段核心参数用法梳理

概述 我们了解下配置文件中的一个全局段,有哪些配置参数,包括后面的 events 字段,有哪些配置参数这里面也有一些核心参数, 对于我们Nginx运行的性能也是有很重要的帮助我们现在首先关注整个 main 段的一个核心参数用法所谓 main 段&#xff…

PHP 全攻略:从环境搭建到实战项目的深度探索

一、引言 PHP(Hypertext Preprocessor)是一种广泛应用于 Web 开发的服务器端脚本语言。它具有简单易学、功能强大、开源免费等特点,被众多开发者和企业所青睐。本文将详细介绍 PHP 的开发环境搭建、基本语法格式、变量与变量作用域、常量与数…

滑块自动化分析

大家好!我是炒青椒不放辣,关注我,收看每期的编程干货。 滑块分析是爬虫工程师进阶必备技能,当我们遇到一个问题时可能会有多种解决途径,而如何做出高效的抉择和完善的解决流程又需要经验的积累。本期文章将以实战的方式,带你使用 playwright 进行滑块分析,不仅会告诉你应…

回归分析在因果分析中的应用:原理、方法与局限性

目录 1. 引言2. 回归分析的基本原理3. 线性回归与因果分析4. 多元回归与因果分析5. 回归分析的优势与局限6. 结论1. 引言 在数据分析的世界中,回归分析不仅是揭示数据背后故事的强大工具,它还是理解因果关系的重要方法。无论你是在探索广告投入对销售的影响,还是在研究教育…

学习记录:js算法(十三):移动零、验证回文串

文章目录 移动零我的思路网上思路 验证回文串我的思路网上思路 总结 移动零 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意: 必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: …