Kubernetes 集群部署应用

news2025/5/12 13:29:37

部署 Nginx 应用

命令行的方式

1. 创建 deployment 控制器的 pod 

# --image=nginx:这个会从 docker.io 中拉取,这个网站拉不下来
# kubectl create deployment mynginx --image=nginx

# 使用国内镜像源拉取
kubectl create deployment mynginx --image=docker.m.daocloud.io/nginx

命令说明:

  • kubectl:Kubernetes 的命令行工具,用于和集群交互。
  • create:动作:创建资源。
  • deployment:创建的资源类型是 deployment 控制器类型
  • mynginx:自定义的 Deployment 名字
  • --image=nginx:1.28.0:指定 Deployment 中使用的容器镜像为 nginx(默认从 Docker Hub 拉取)。1.28.0 是指定nginx的版本号,如果不写版本号,默认使用的是 latest 标签

查看创建的 deployment

kubectl get deployment

查看创建的 pod

kubectl get pods

2. 对外暴露端口

kubectl expose deployment mynginx --type=NodePort --port=80

命令说明:

  • expose:暴露一个已有的资源(如 Pod、Deployment、ReplicaSet 等)为一个 Service
  • deployment mynginx:指定要暴露的资源是名为 mynginx 的 Deployment。
  • --type=NodePort:指定创建的 Service 类型是 NodePort,这表示可以通过集群中任意一个节点的 IP 和映射端口(30000~32767)访问服务。
  • --port=80:指定 Service 对外暴露的端口是容器的 80 端口。(现在还在容器内)

查看暴露的服务端口

kubectl get svc

 

删除服务的命令

kubectl delete svc mynginx

3. 外部浏览器访问服务

随机端口

浏览器访问:http://ip:31353           // 31353 是 kubectl get svc 命令查出来的 PORT 值


固定端口,转发

kubectl port-forward --address 0.0.0.0 svc/mynginx 80:80

命令说明:

  • port-forward:表示要启用端口转发(port forwarding)。这个功能可以将你本地的一个端口流量转发到 Kubernetes 内部资源(Pod 或 Service)。
  • --address 0.0.0.0:默认情况下,端口转发只监听 127.0.0.1(本机回环地址),这个参数让它监听所有 IP 地址(即:可以通过其他设备访问你的主机)。例如在局域网内用其他电脑访问这台机器的 80 端口。
  • svc/mynginx:表示要转发目标是名为 mynginx 的 Service。你也可以用 pod/<pod-name> 来转发到 Pod。
  • 80:80:表示将本地的 80 端口 转发到 Service 的 80 端口,格式是:本地端口:目标端口。

异常处理

kubectl get pods 查询 STATUS 不是成功的状态。

使用如下命令查看异常信息:

# kubectl describe pod <pod名称>
kubectl describe pod mynginx-xxxxxx-xxx

命令说明:

  • describe:显示资源的详细信息(比 get 更详细)。
  • pod:说明你要查看的资源类型是 Pod。
  • mynginx-xxxxxx-xxx:这是某个 Pod 的全名,由 Deployment 控制器自动生成,格式通常是:<Deployment名>-<随机哈希>。你可以用 kubectl get pods 查到真实名称。

修改完异常后,可以删除 deployment 再重新创建

kubectl delete deployment mynginx && kubectl create deployment mynginx --image=nginx

yaml 脚本文件的方式

创建一个名为 my-nginx.yaml 的文件,内容如下:

## 表示这个资源的 API 版本,apps/v1 是 Deployment 当前稳定的版本
apiVersion: apps/v1
## 表示这是一个 "Deployment" 类型的资源对象,用于声明一个应用如何部署和管理
kind: Deployment

## 元数据,name 是这个 Deployment 的名字,kubectl 管理时用到,比如 kubectl get deployment mynginx
metadata:
  name: mynginx

## spec 是核心的配置部分。
spec:
  ## replicas: 2 表示所有节点运行应用的副本(Pod)数量是 2 个,用于高并发
  replicas: 2
  ## selector 选择器,表示这个 Deployment 会管理具有标签 app=nginx 的 Pod
  #  这个选择器必须和下面 template.metadata.labels 一致,才能绑定在一起
  selector:
    matchLabels:
      app: nginx
  ## template 是 Pod 的模板,Deployment 根据它创建实际运行的 Pod
  template:
    metadata:
      ## labels 是给 Pod 添加的标签,供上面 selector 匹配使用
      labels:
        app: nginx
    spec:
      ## 是一个容器数组,可以运行多个容器
      containers:
        ## 自定义容器名字
      - name: nginx
        ## 使用的镜像名,nginx 是 Docker Hub 上的官方镜像。这里使用 国内镜像源的 nginx
        image: docker.m.daocloud.io/nginx
        ports:
          ## 表示容器内部监听 80 端口
        - containerPort: 80
        ## 配置 pod 使用的资源
        resources:
          ## 表示容器启动和运行需要的最少资源
          requests:
            ## 表示容器至少需要 250 毫核 CPU(即 0.25 个 CPU)。单位:m:毫核1000m = 1 核。core 或 空值:核
            cpu: "250m"
            ## 表示容器至少需要 512MB 内存。单位:B:字节,Ki:千字节,Mi:兆字节,Gi:吉字节,M:十进制单位(用于文件系统)。1M:1,000,000 字节,G:十进制单位(用于文件系统)。1G:1,000,000,000 字节
            memory: "512Mi"  # 请求 512 MB 内存
          ## 表示容器启动和运行使用的最大资源。避免资源被单个容器占用过多,影响其他容器
          limits:
            ## 表示容器最多使用 500 毫核 CPU(即 0.5 个 CPU)。单位:m:毫核1000m = 1 核。core 或 空值:核
            cpu: "500m"
            ## 表示容器最多使用 1GB 内存。单位:B:字节,Ki:千字节,Mi:兆字节,Gi:吉字节,M:十进制单位(用于文件系统)。1M:1,000,000 字节,G:十进制单位(用于文件系统)。1G:1,000,000,000 字节
            memory: "1Gi"

## --- 是 YAML 文件中的分隔符,多资源之间必须存在分隔符
---
## 这是一个 Service 类型的资源,名字叫 my-nginx-service,用于暴露 Pod。
apiVersion: v1
kind: Service
metadata:
  name: my-nginx-service
spec:
  ## selector 表示这个 Service 会选中所有有标签 app=nginx 的 Pod,并转发请求给它们。
  selector:
    app: nginx
  ports:
    ## 表示客户端访问 Service 使用的端口(集群内部访问用)
  - port: 80
    ## 表示转发到 Pod 的容器监听的端口(即 containerPort)
    targetPort: 80
    ## 表示集群外访问使用的端口(绑定在每个 Node 的 30080 端口上)
    nodePort: 30080
  ## Service 类型。NodePort 允许从集群外访问服务,通过 <任意NodeIP>:30080。
  type: NodePort

然后执行

kubectl apply -f my-nginx.yaml

验证

kubectl get pods,svc

外部访问

http://<NodeIP>:30080

删除 yaml 文件中定义的所有资源

kubectl delete -f my-nginx.yaml

生成默认的 .yaml 文件

生成 Deployment 的默认 YAML 文件

kubectl create deployment mynginx --image=nginx --dry-run=client -o yaml > mynginx-deployment.yaml

参数说明:

  • mynginx:自定义的 deployment 名称
  • --dry-run=client:表示不实际创建资源,而是只生成 YAML 配置文件
  • -o yaml:用于指定输出格式为 YAML
  • > mynginx-deployment.yaml:将输出内容保存到 mynginx-deployment.yaml 文件中

生成 Service 的默认 YAML 文件

kubectl expose deployment mynginx --port=80 --target-port=80 --type=NodePort --dry-run=client -o yaml > mynginx-service.yaml

生成 Pod 的默认 YAML 文件

kubectl run mypod --image=nginx --dry-run=client -o yaml > mypod.yaml

生成 ConfigMap 的默认 YAML 文件

kubectl create configmap myconfig --from-literal=key=value --dry-run=client -o yaml > myconfigmap.yaml

生成 Secret 的默认 YAML 文件

kubectl create secret generic mysecret --from-literal=password=secret --dry-run=client -o yaml > mysecret.yaml

部署 SpringBoot 应用

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

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

相关文章

Unity3D仿星露谷物语开发42之粒子系统

1、目标 使用例子系统&#xff0c;实现割草后草掉落的特效。 通过PoolManager获取特效预制体&#xff0c;通过VFXManager来触发特效。 2、配置例子特效 在Hierarchy -> PersistentScene下创建新物体命名为Reaping。 给该物体添加Particle System组件。 配置例子系统参数…

python 上海新闻爬虫, 东方网 + 澎湃新闻

1. 起因&#xff0c; 目的: 继续做新闻爬虫。我之前写过。此文先记录2个新闻来源。后面打算进行过滤&#xff0c;比如只选出某一个类型新闻。 2. 先看效果 过滤出某种类型的新闻&#xff0c;然后生成 html 页面&#xff0c;而且&#xff0c;自动打开这个页面。 比如科技犯罪…

[Java实战]Spring Boot 整合 Freemarker (十一)

[Java实战]Spring Boot 整合 Freemarker (十一) 引言 Apache FreeMarker 作为一款高性能的模板引擎&#xff0c;凭借其简洁语法、卓越性能和灵活扩展性&#xff0c;在 Java Web 开发中占据重要地位。结合 Spring Boot 的自动化配置能力&#xff0c;开发者能快速构建动态页面、…

LeetCode 高频题实战:如何优雅地序列化和反序列化字符串数组?

文章目录 摘要描述题解答案题解代码分析编码方法解码方法 示例测试及结果时间复杂度空间复杂度总结 摘要 在分布式系统中&#xff0c;数据的序列化与反序列化是常见的需求&#xff0c;尤其是在网络传输、数据存储等场景中。LeetCode 第 271 题“字符串的编码与解码”要求我们设…

C#游戏开发中的注意事项

目录 一、性能优化:提升游戏运行效率 1. 避免不必要的循环和迭代 2. 减少字符串拼接 3. 利用Unity的生命周期函数 4. 使用对象池(Object Pooling) 二、内存管理:避免内存泄漏和资源浪费 1. 及时释放非托管资源 2. 避免空引用异常 3. 合理使用引用类型和值类型 4. …

Spring Boot项目(Vue3+ElementPlus+Axios+MyBatisPlus+Spring Boot前后端分离)

下载地址&#xff1a; 前端&#xff1a;https://download.csdn.net/download/2401_83418369/90811402 后端&#xff1a;https://download.csdn.net/download/2401_83418369/90811405 一、前端vue部分的搭建 这里直接看另一期刊的搭建Vue前端工程部分 前端vue后端ssm项目_v…

Spyglass:在batch/shell模式下运行目标的顶层是什么?

相关阅读 Spyglasshttps://blog.csdn.net/weixin_45791458/category_12828934.html?spm1001.2014.3001.5482 除了可以在图形用户界面(GUI)中运行目标外&#xff0c;使用Batch模式或Shell模式也可以运行目标&#xff0c;如下面的命令所示。 % spyglass -project test.prj -ba…

微服务架构中如何保证服务间通讯的安全

在微服务架构中,保证服务间通信的安全至关重要。服务间的通信通常是通过HTTP、gRPC、消息队列等方式实现的,而这些通信链路可能面临多种安全风险。为了应对这些风险,可以采取多种措施来保证通信安全。 常见的服务间通信风险 1.数据泄露:在服务间通信过程中,敏感数据可能会…

工具篇-Cherry Studio之MCP使用

一、添加MCP 打开Cherry Studio,如果没有可以到官网下载:Cherry Studio 官方网站 - 全能的AI助手 按上面步骤打开同步服务器 1、先去注册ModelScope,申请令牌 2、再打开MCP广场,找到高德MCP 选择工具测试,这里有个高德的api key需要申请 打开如下地址高德开放平…

Python 运维脚本

1、备份文件 import os import shutil# 定义配置文件目录和备份目录的路径 config_dir "/root/python/to/config/files/" backup_dir "/root/python/to/backup/"# 遍历配置文件目录中的所有文件 for filename in os.listdir(config_dir):# 如果文件名以…

大模型项目:普通蓝牙音响接入DeepSeek,解锁语音交互新玩法

本文附带视频讲解 【代码宇宙019】技术方案&#xff1a;蓝牙音响接入DeepSeek&#xff0c;解锁语音交互新玩法_哔哩哔哩_bilibili 目录 效果演示 核心逻辑 技术实现 大模型对话&#xff08;技术&#xff1a; LangChain4j 接入 DeepSeek&#xff09; 语音识别&#xff08;…

单链表设计与实现

01. 单链表简介 在数据结构中&#xff0c;单链表的实现可以分为 带头结点 和 不带头结点 两种方式&#xff0c;这里我们讨论第二种方式。 头结点&#xff1a;链表第一个节点不存实际数据&#xff0c;仅作为辅助节点指向首元节点&#xff08;第一个数据节点&#xff09;。头指…

springboot生成二维码到海报模板上

springboot生成二维码到海报模板上 QRCodeController package com.ruoyi.web.controller.app;import com.google.zxing.WriterException; import com.ruoyi.app.domain.Opportunity; import com.ruoyi.app.tool.QRCodeGenerator; import com.ruoyi.common.core.page.TableDat…

SEO长尾关键词布局优化法则

内容概要 在SEO优化体系中&#xff0c;长尾关键词的精准布局是突破流量瓶颈的关键路径。相较于竞争激烈的核心词&#xff0c;长尾词凭借其高转化率和低竞争特性&#xff0c;成为内容矩阵流量裂变的核心驱动力。本节将系统梳理长尾关键词布局的核心逻辑框架&#xff0c;涵盖从需…

python:trimesh 用于 STL 文件解析和 3D 操作

python&#xff1a;trimesh 是一个用于处理三维模型的库&#xff0c;支持多种格式的导入导出&#xff0c;比如STL、OBJ等&#xff0c;还包含网格操作、几何计算等功能。 Python Trimesh 库使用指南 安装依赖库 pip install trimesh Downloading trimesh-4.6.8-py3-none-any.w…

应急响应基础模拟靶机-security2

PS:杰克创建的流量包(result.pcap)在root目录下&#xff0c;请根据已有信息进行分析 1、首个攻击者扫描端口使用的工具是&#xff1f; 2、后个攻击者使用的漏洞扫描工具是&#xff1f; 3、攻击者上传webshell的绝对路径及User-agent是什么&#xff1f; 4、攻击者反弹shell的…

OpenCV定位地板上的书

任务目标是将下面的图片中的书本找出来&#xff1a; 使用到的技术包括&#xff1a;转灰度图、提取颜色分量、二值化、形态学、轮廓提取等。 我们尝试先把图片转为灰度图&#xff0c;然后二值化&#xff0c;看看效果&#xff1a; 可以看到&#xff0c;二值化后&#xff0c;书的…

NHANES稀有指标推荐:MedHi

文章题目&#xff1a;Association of dietary live microbe intake with frailty in US adults: evidence from NHANES DOI&#xff1a;10.1016/j.jnha.2024.100171 中文标题&#xff1a;美国成人膳食活微生物摄入量与虚弱的相关性&#xff1a;来自 NHANES 的证据 发表杂志&…

关于我在实现用户头像更换时遇到的图片上传和保存的问题

目录 前言 前端更换头像 后端处理 文件系统存储图片 数据库存储图片 处理图片文件 生成图片名 保存图片 将图片路径存储到数据库 完整代码 总结 前言 最近在实现一个用户头像更换的功能&#xff0c;但是因为之前并没有处理过图片的上传和保存&#xff0c;所以就开始…

10.二叉搜索树中第k小的元素(medium)

1.题目链接&#xff1a; 230. 二叉搜索树中第 K 小的元素 - 力扣&#xff08;LeetCode&#xff09;230. 二叉搜索树中第 K 小的元素 - 给定一个二叉搜索树的根节点 root &#xff0c;和一个整数 k &#xff0c;请你设计一个算法查找其中第 k 小的元素&#xff08;从 1 开始计数…