当前位置: 首页 > 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提供了基本的云计算模拟功能,如数据中心、虚拟机、任务…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

计算机基础知识解析:从应用到架构的全面拆解

目录 前言 1、 计算机的应用领域&#xff1a;无处不在的数字助手 2、 计算机的进化史&#xff1a;从算盘到量子计算 3、计算机的分类&#xff1a;不止 “台式机和笔记本” 4、计算机的组件&#xff1a;硬件与软件的协同 4.1 硬件&#xff1a;五大核心部件 4.2 软件&#…...

MyBatis中关于缓存的理解

MyBatis缓存 MyBatis系统当中默认定义两级缓存&#xff1a;一级缓存、二级缓存 默认情况下&#xff0c;只有一级缓存开启&#xff08;sqlSession级别的缓存&#xff09;二级缓存需要手动开启配置&#xff0c;需要局域namespace级别的缓存 一级缓存&#xff08;本地缓存&#…...

0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化

是不是受够了安装了oracle database之后sqlplus的简陋&#xff0c;无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话&#xff0c;配置.bahs_profile后也能解决上下翻页这些&#xff0c;但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可&#xff0c…...

【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?

FTP&#xff08;File Transfer Protocol&#xff09;本身是一个基于 TCP 的协议&#xff0c;理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况&#xff0c;主要原因包括&#xff1a; ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...

Java并发编程实战 Day 11:并发设计模式

【Java并发编程实战 Day 11】并发设计模式 开篇 这是"Java并发编程实战"系列的第11天&#xff0c;今天我们聚焦于并发设计模式。并发设计模式是解决多线程环境下常见问题的经典解决方案&#xff0c;它们不仅提供了优雅的设计思路&#xff0c;还能显著提升系统的性能…...

Redis上篇--知识点总结

Redis上篇–解析 本文大部分知识整理自网上&#xff0c;在正文结束后都会附上参考地址。如果想要深入或者详细学习可以通过文末链接跳转学习。 1. 基本介绍 Redis 是一个开源的、高性能的 内存键值数据库&#xff0c;Redis 的键值对中的 key 就是字符串对象&#xff0c;而 val…...