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

k8s服务搭建与实战案例

Kubernetes(K8s)作为一个开源的容器编排平台,广泛应用于现代的云原生应用架构中。以下是一些常见的 **Kubernetes 实战案例**,包括从基础部署到高级应用场景的使用。通过这些案例,可以更好地理解 K8s 的运作原理和最佳实践。

---

### 1. **部署一个简单的 Web 应用(Nginx)**
这是一个常见的入门级案例,适合刚接触 Kubernetes 的开发者。

#### 步骤:
1. **创建一个 Deployment**
   ```yaml
 

 apiVersion: apps/v1kind: Deploymentmetadata:name: nginx-deploymentspec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:latestports:- containerPort: 80


   ```

2. **创建一个 Service 来暴露应用**
   ```yaml
   

apiVersion: v1kind: Servicemetadata:name: nginx-servicespec:selector:app: nginxports:- protocol: TCPport: 80targetPort: 80type: LoadBalancer


   ```

3. **部署应用到 Kubernetes 集群**
   ```bash
 

  kubectl apply -f nginx-deployment.yamlkubectl apply -f nginx-service.yaml


   ```

4. **验证部署**
   ```bash
 

 kubectl get deploymentskubectl get podskubectl get services


   ```

通过这个案例,你可以学习如何部署一个简单的 Web 应用,如何利用 `Deployment` 和 `Service` 来实现容器管理和应用的暴露。

---

### 2. **自动扩容应用(Horizontal Pod Autoscaler)**
在生产环境中,应用的流量和负载是动态变化的,K8s 提供了 Horizontal Pod Autoscaler(HPA)来根据负载自动扩容和缩容 Pod。

#### 步骤:
1. **创建一个 Deployment(例如一个基于 CPU 使用率扩容的 Nginx 部署)**
   ```yaml
 

 apiVersion: apps/v1kind: Deploymentmetadata:name: nginx-deploymentspec:replicas: 2selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:latestresources:requests:cpu: 100mmemory: 100Milimits:cpu: 500mmemory: 500Miports:- containerPort: 80


   ```

2. **创建 HPA 对象**
   ```yaml
 

  apiVersion: autoscaling/v2kind: HorizontalPodAutoscalermetadata:name: nginx-hpaspec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: nginx-deploymentminReplicas: 2maxReplicas: 10metrics:- type: Resourceresource:name: cputarget:type: UtilizationaverageUtilization: 50


   ```

3. **部署 HPA**
   ```bash
 

  kubectl apply -f nginx-hpa.yaml


   ```

4. **监控 HPA 状态**
   ```bash
   

kubectl get hpa


   ```

通过这个案例,你可以学习如何使用 HPA 来动态扩容和缩容 Pod,确保应用在不同负载下的高可用性。

---

### 3. **基于 Helm 安装和管理应用**
Helm 是 Kubernetes 的包管理工具,可以方便地管理复杂应用的部署和版本控制。

#### 步骤:
1. **安装 Helm**
   ```bash
 

 curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash


   ```

2. **添加 Helm 仓库**
   ```bash
 

 helm repo add stable https://charts.helm.sh/stablehelm repo update


   ```

3. **使用 Helm 安装应用(例如安装 MySQL)**
   ```bash
 

 helm install my-mysql stable/mysql


   ```

4. **查看安装的应用**
   ```bash
 

 helm list


   ```

5. **删除 Helm 安装的应用**
   ```bash
 

 helm uninstall my-mysql


   ```

通过这个案例,你可以学习如何使用 Helm 来简化应用的安装、更新和管理,尤其是在多环境部署时非常有用。

---

### 4. **使用 Persistent Volumes 和 Persistent Volume Claims**
Kubernetes 提供了持久化存储(Persistent Volumes, PV)和持久化存储声明(Persistent Volume Claims, PVC),用来管理应用的持久化数据存储。

#### 步骤:
1. **创建一个 Persistent Volume(PV)**
   ```yaml
 

  apiVersion: v1kind: PersistentVolumemetadata:name: my-pvspec:capacity:storage: 1GiaccessModes:- ReadWriteOncehostPath:path: /mnt/data

2. **创建 Persistent Volume Claim(PVC)**
   ```yaml

   apiVersion: v1kind: PersistentVolumeClaimmetadata:name: my-pvcspec:resources:requests:storage: 1GiaccessModes:- ReadWriteOnce


   ```

3. **在 Pod 中使用 PVC**
   ```yaml
 

  apiVersion: v1kind: Podmetadata:name: nginx-podspec:containers:- name: nginximage: nginxvolumeMounts:- mountPath: /usr/share/nginx/htmlname: nginx-storagevolumes:- name: nginx-storagepersistentVolumeClaim:claimName: my-pvc


   ```

4. **部署应用**
   ```bash
 

  kubectl apply -f pv.yamlkubectl apply -f pvc.yamlkubectl apply -f nginx-pod.yaml


   ```

通过这个案例,你可以了解如何配置 Kubernetes 中的持久化存储,使应用能够在容器重启或迁移时保持数据。

---

### 5. **使用 Ingress 实现 HTTP 路由和负载均衡**
Ingress 允许你配置 HTTP 路由和负载均衡,能够将外部流量路由到 Kubernetes 集群内的不同服务。

#### 步骤:
1. **创建一个 Ingress Controller(例如使用 Nginx)**
   ```bash

   kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml


   ```

2. **创建一个 Deployment 和 Service(例如部署两个不同版本的 Web 应用)**
   ```yaml

   apiVersion: apps/v1kind: Deploymentmetadata:name: webapp-v1spec:replicas: 1selector:matchLabels:app: webapp-v1template:metadata:labels:app: webapp-v1spec:containers:- name: webappimage: webapp:v1ports:- containerPort: 80


   ```

3. **创建 Ingress 规则**
   ```yaml
 

  apiVersion: networking.k8s.io/v1kind: Ingressmetadata:name: webapp-ingressspec:rules:- host: webapp.example.comhttp:paths:- path: /v1pathType: Prefixbackend:service:name: webapp-service-v1port:number: 80


   ```

4. **应用配置**
   ```bash

   kubectl apply -f webapp-deployment.yamlkubectl apply -f ingress.yaml


   ```

通过这个案例,你可以学习如何使用 Ingress 配置 HTTP 路由、负载均衡和 SSL/TLS 终端节点。

---

### 总结

以上是一些常见的 Kubernetes 实战案例,涵盖了应用的部署、扩容、管理、持久化存储和流量路由等方面。学习这些案例有助于你熟练掌握 Kubernetes 的基本操作,并能够在实际的生产环境中高效地管理容器化应用。

相关文章:

k8s服务搭建与实战案例

Kubernetes(K8s)作为一个开源的容器编排平台,广泛应用于现代的云原生应用架构中。以下是一些常见的 **Kubernetes 实战案例**,包括从基础部署到高级应用场景的使用。通过这些案例,可以更好地理解 K8s 的运作原理和最佳…...

JavaScript学习难点

一、语法的灵活性 动态类型: JavaScript 是一种动态类型语言,这意味着变量的类型可以在运行时改变。这与静态类型语言(如 Java、C)形成鲜明对比,在静态类型语言中,变量的类型在编译时就已经确定。 例如&am…...

Qt WORD/PDF(一)使用 QtPdfium库实现 PDF 预览

文章目录 一、简介二、下载 QtPdfium三、加载 QtPdfium 动态库四、Demo 使用 关于QT Widget 其它文章请点击这里: QT Widget 姊妹篇: Qt WORD/PDF(一)使用 QtPdfium库实现 PDF 操作 Qt WORD/PDF(二)使用 QtPdfium库实现…...

解决创建laravel项目,使用国外镜像超时,国内镜像缺包的问题

解决创建laravel项目,使用国外镜像超时,国内镜像缺包的问题 一、前言二、切换镜像三、创建最新版本四、创建指定版本 一、前言 最近想下载 laravel 框架看看,但也遇到了些麻烦,这里做个记录。 二、切换镜像 先查看镜像源&#…...

Java泛型设计详解

引言 在日常Java开发中,泛型是一个非常重要的特性。它提供了编译时的类型安全检查,增强了代码的可读性和可维护性。然而,对于初学者甚至一些有经验的开发者来说,泛型的使用和理解仍然是一个挑战。本文旨在深入探讨Java泛型的诞生…...

用ue5打开网址链接

需要用到 Launch URL 这个函数 字面意思就是打开填写的链接网页 这里填写的是百度,按下Tab键后就会打开百度的网页...

【大数据】-- 读放大和写放大

目录 一、定义 1. 读放大(Read Amplification) 定义 原因 优化方法 2. 写放大(Write Amplification) 定义 原因 优化方法 对比与联系 二、举例 1. Hadoop(HDFS) 读放大 写放大 2. Flink 读放大 写放大 3. Hive 读放大 写放大 4. Presto 读放大 写放…...

【前端】JavaScript 抽取字符串特定部分题目详解与实现思路

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 💯前言💯题目描述💯核心步骤与实现解析1. 分割字符串为数组(split 方法)2. 使用 filter 提取名字(偶数索引判断)3. 使…...

CNCF云原生生态版图-分类指南(一)- 观测和分析

CNCF云原生生态版图-分类指南(一)- 观测和分析 CNCF云原生生态版图-分类指南一、观测和分析(Observability and Analysis)(一)可观测性(Observablility)1. 是什么?2. 解决…...

热更新解决方案3 —— xLua

概述 xLua框架导入和AB包相关准备 xLua导入 其它的导入 C#调用Lua 1.Lua解析器 using System.Collections; using System.Collections.Generic; using UnityEngine; //引用命名空间 using XLua;public class Lesson1_LuaEnv : MonoBehaviour {// Start is called before the fi…...

如何让ai在游戏中更像一个人?

开题开了一整年是我没想到的,还因此延毕了……我重新梳理一下我想做的研究以及相关痕迹。 我2023年3月找到的导师。起初我发现了在玩RTS游戏中会出现很多固定的套路,选手为此要做大量的练习,我就在想如何把这部分内容借助状态机这种流程给…...

websocket_asyncio

WebSocket 和 asyncio 指南 简介 本指南涵盖了使用 Python 中的 websockets 库进行 WebSocket 编程的基础知识,以及 asyncio 在异步非阻塞 I/O 中的作用。它提供了构建高效 WebSocket 服务端和客户端的知识,以及 asyncio 的特性和优势。 1. 什么是 WebS…...

如何在NGINX中实现基于IP的访问控制(IP黑白名单)?

大家好,我是锋哥。今天分享关于【如何在NGINX中实现基于IP的访问控制(IP黑白名单)?】面试题。希望对大家有帮助; 如何在NGINX中实现基于IP的访问控制(IP黑白名单)? 1000道 互联网大…...

Y3编辑器文档4:触发器1(界面及使用简介、变量作用域、入门案例)

文章目录 一、触发器简介1.1 触发器界面1.2 ECA语句编辑及快捷键1.3 参数设置1.4 变量设置1.5 实体触发器1.6 触发器复用 二、触发器的多层结构2.1 子触发器(在游戏内对新的事件进行注册)2.2 触发器变量作用域 三、入门案例3.1 使用触发器实现瞬间移动3.…...

echarts图表自定义配置(二)——代码封装

下图是初版,火山图的代码。可以看出,里面的变量,逻辑,函数存在冗余,基本上都是改了参数,同样的get和set,去刷新图表;对于往后继续开发十几二十个图表,会很麻烦。因此需要…...

02、10个富士胶片模拟的设置

二色彩 1、色彩的加减控制全局的饱和度增减; 2、色彩效果只提升暖色系饱和度; 3、FX蓝色大幅度提升蓝色系饱和度; 4、三个参数都不改变颜色的色相。 2.1 色彩 色彩调整的是拍摄画面整体的色彩饱和程度 2.2色彩效果 调整的是画面中暖色…...

鸿蒙系统-前端0帧起手

鸿蒙系统-前端0帧起手 先search 一番 找到对应的入门文档1. 运行项目遇到问题 如下 (手动设计npm 的 registry 运行 npm config set registry https://registry.npmjs.org/)2.运行后不支持一些模拟器 配置一下(如下图,运行成功&am…...

211-基于FMC的1路1.5G ADC 1路 2.5G DAC子卡

一、板卡概述 FMC-1AD-1DA-1SYNC是我司自主研发的一款1路1G AD采集、1路2.5G DA回放的FMC、1路AD同步信号子卡。板卡采用标准FMC子卡架构,可方便地与其他FMC板卡实现高速互联,可广泛用于高频模拟信号采集等领域。 二、功能介绍 2.1 原理框图 2.2 硬件…...

获取微信用户openid

附上开发文档:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html 开发之前,准备事项 一个已认证过的服务号|基本信息配置js域名和网站授权域名配置最后确认当前账号网页授权功能是否开通,没有开通的无法获取到用户授权开发人…...

MultiRECloudSim使用

MultiRECloudSim使用 简介 MultiRECloudSim是一个用于云计算环境下的模拟器相关工具,它主要用于模拟和评估云计算中的资源分配、任务调度等多种场景。它可能是基于CloudSim这个基础的云计算模拟器进行扩展而来,CloudSim提供了基本的云计算模拟功能,如数据中心、虚拟机、任务…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

NPOI Excel用OLE对象的形式插入文件附件以及插入图片

static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...

Leetcode33( 搜索旋转排序数组)

题目表述 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...

水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关

在水泥厂的生产流程中&#xff0c;工业自动化网关起着至关重要的作用&#xff0c;尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关&#xff0c;为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多&#xff0c;其中不少设备采用Devicenet协议。Devicen…...