当前位置: 首页 > news >正文

Kubernetes 集群部署应用

部署 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 根据它创建实际运行的 Podtemplate:metadata:## labels 是给 Pod 添加的标签,供上面 selector 匹配使用labels:app: nginxspec:## 是一个容器数组,可以运行多个容器containers:## 自定义容器名字- name: nginx## 使用的镜像名,nginx 是 Docker Hub 上的官方镜像。这里使用 国内镜像源的 nginximage: docker.m.daocloud.io/nginxports:## 表示容器内部监听 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: nginxports:## 表示客户端访问 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.xdnf.cn/news/389809.html

相关文章:

  • Web 性能优化三:页面首屏加载优化全流程:从服务器到骨架屏
  • Model Context Protocol(MCP)入门
  • C++中什么是函数指针?
  • DAY 22 复习日kaggle泰坦里克号人员生还预测
  • 第一章 例行性工作(任务计划)
  • Python基础总结(十)之函数
  • Go语言安装proto并且使用gRPC服务(2025最新WINDOWS系统)
  • 广东省省考备考(第八天5.11)—言语:片段阅读(每日一练)
  • 数据库备份与策略【全量备份、增量备份、日志恢复】
  • python:trimesh 用于 STL 文件解析和 3D 操作
  • 深入剖析缓存与数据库一致性:Java技术视角下的解决方案与实践
  • 【连载14】基础智能体的进展与挑战综述-多智能体系统设计
  • MySQL 数据库故障排查指南
  • 网络安全设备配置与管理-实验5-p150虚拟防火墙配置
  • 【计算机网络】NAT技术、内网穿透与代理服务器全解析:原理、应用及实践
  • JVM中的安全点是什么,作用又是什么?
  • python 新闻 api + react js 客户端。
  • MinIO自定义权限策略语法深度解析
  • 苍穹外卖-创建阿里云oss工具包
  • Agent杂货铺
  • 大模型知识蒸馏(Qwen2.5系列模型KL散度蒸馏)
  • leetcode热题100——day26
  • 当虚拟照进现实——《GTA6》如何重新定义开放世界的可能性‌
  • Git的核心作用详解
  • pwm控制
  • istio in action之服务网格和istio组件
  • LLM框架
  • Ubuntu 24服务器部署abp vnext应用程序的完整教程
  • 模块自动导入的小工具
  • 使用go开发安卓程序