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 的基本操作,并能够在实际的生产环境中高效地管理容器化应用。

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

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

相关文章

PYQT5程序框架

pyqt5程序框架_哔哩哔哩_bilibili 1.UI代码 Qhkuja.py # -*- coding: utf-8 -*-# Form implementation generated from reading ui file Qhkuja.ui # # Created by: PyQt5 UI code generator 5.15.7 # # WARNING: Any manual changes made to this file will be lost when py…

基于MobileNet v2模型的口罩实时检测系统实现

基于kaggle数据集训练的模型其实现结果如下: 代码结构如下: 实时口罩检测器: 从导航栏中的链接“实时的口罩检测器”功能,该系统包含一个实时检测用户是否佩戴口罩的功能。基于图片的口罩检测器: 从另一个导航链接“基…

高效项目托管指南:从本地到 GitHub 的完整流程

在现代软件开发中,将项目托管在 GitHub 上是一个常见且高效的方式。GitHub 不仅可以用作版本控制工具,还能帮助你与团队协作或展示自己的项目。本文将带你一步步完成项目的打包和上传。 高效项目托管指南:从本地到 GitHub 的完整流程 1. 准备…

用TPS54531绘制BUCK电路板

首先,这TPS54531 是一款非同步降压转换器芯片(异步)。 这是BUCK的基本原理图,它是异步的。 我们用这款芯片来控制MOS管的高频开关,以此实现降压。 这里使用的应该是CCM模式。 这里: Vi为24V,…

【新人系列】Python 入门(十六):正则表达式

✍ 个人博客:https://blog.csdn.net/Newin2020?typeblog 📝 专栏地址:https://blog.csdn.net/newin2020/category_12801353.html 📣 专栏定位:为 0 基础刚入门 Python 的小伙伴提供详细的讲解,也欢迎大佬们…

人工智能增强的音频和聊天协作服务

论文标题:AI-enabled Audio and Chat Collaboration Services 中文标题:人工智能增强的音频和聊天协作服务 作者信息: Emil P. Andersen, Norwegian Defence Research Establishment (FFI), Kjeller, NorwayJesper R. Goksr, Sindre E. Ha…

【原创】- 澳门预约医疗系统 - 一个基于Vue3编写的程序

在空余时间写了一个前端预约医疗系统,用Vue3写的一套前端模块,里面数据都是本地模拟,一个练手的简单项目。 此项目主要功能有: 1.预约挂号、挂号记录 2.疫苗接种 3.就医记录 4.科室导航 5.AI问诊 6.个人病例 7.支付可配置化 8.健康…

Cadence学习笔记 3 MCU主控原理图绘制

基于Cadence 17.4,四层板4路HDMI电路 更多Cadence学习笔记:Cadence学习笔记 1 原理图库绘制Cadence学习笔记 2 PCB封装绘制 目录 3、MCU主控原理图绘制 快捷键总结: 3、MCU主控原理图绘制 新建原理图Design,选择好SCH文件夹&…

vue2实现答题组件

需求 实现一个答题组件,点击正确的选项,该选项背景变绿色;点击错误的选项,该选项背景变红色。不管点击了什么选项,延迟一秒后切换下一题。 每次出题,从题库中选随机选择一道用户此次进入这个页面后还没有…

3D相框案例讲解(详细)

前言 通过现阶段的学习,我们已经掌握了HTML,CSS和JS部分的相关知识点,现在让我们通过一篇案例,来巩固我们近期所学的知识点。 详细视频讲解戳这里 任务一 了解目标案例样式 1.1了解案例 3D相框 1.2 分析案例 首先我们看到一个…

SuperMap GIS基础产品FAQ集锦(20241216)

一、SuperMap iDesktopX 问题1:想问一下 SuperMap iDesktopX可以修改倾斜入库后数据的位置吗 11.2.1 【解决办法】在配置文件(*.scp)中找打position属性,修改其中的xyz值,用于改变位置;修改后如果想要相机…

2.11.静态链表

一.静态链表的基本概念: 1.上图说明:索引为0处是头结点,头结点不存储数据,但存储下一个结点的数组下标,本例中头结点里存储的下一个结点的数组下标为2,即索引为2的结点为头结点后的第一个结点,以…

【Childishness and Playfulness】

奥迪双钻,旋风冲锋龙卷风,巨无霸 智能芯片 东西南北中,好像已经忘了怎么折叠了,折千纸鹤,折小船,折舞狮,折飞机 红外线小灯,纽扣电池,各种形状投影 爷爷的手电筒&am…

【C++初阶】第9课—标准模板库STL(string_3)

文章目录 1. string类对象的查找操作1.1 c_str返回c格式字符串1.2 substr获取string类对象子串1.3 find和rfind查找字符串内容1.4 find_first_of与find_first_not_of1.5 find_last_of与find_last_not_of1.6 copy复制string类对象内的字符串内容1.7 compare对比string类字符串1.…

【教程】如何下载WandB平台的运行数据?

【教程】如何下载WandB平台的运行数据? 前言 CSDN主页:https://blog.csdn.net/rvdgdsva 博客园主页:https://www.cnblogs.com/hassle Weights & Biases (WandB)是一个用于机器学习的平台,它提供了一套工具来帮助你跟踪、比…

vscode设置终端代理

转载请标明出处:小帆的帆的博客 设置终端代理 修改项目的.vscode/settings.json {"terminal.integrated.env.windows": {"http_proxy": "http://127.0.0.1:7890","https_proxy": "http://127.0.0.1:7890"}, }…

【Linux】自定义项目-进度条

更多精彩内容..... 🎉❤️播主の主页✨😘 Stark、-CSDN博客 准备工作:"\r"与"\n"字符 ①:基本含义 在C语言和Linux环境中,\r是回车符,\n是换行符,用于控制文本格式和输出…

Linux从0到1——初识线程【什么是线程/线程控制/详解tid】

Linux从0到1——初识线程 1. 什么是线程?1.1 线程的概念1.2 结合代码理解线程1.3 重谈地址空间1.4 线程的优缺点 2. 线程异常和线程用途3. Linux进程VS线程4. 详解pthread_create的arg参数4.1 给线程传参4.2 一次创建多个线程 5. 线程控制5.1 线程退出5.2 线程分离5…

[免费]SpringBoot+Vue校园社团管理系统(优质版)【论文+源码+SQL脚本】

大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue校园社团管理系统(优质版),分享下哈。 项目视频演示 【免费】SpringBootVue校园社团管理系统(优质版) Java毕业设计_哔哩哔哩_bilibili 项目介绍 随着信息技术的迅速发展&#x…

114 二叉树展开为链表

解题思路: \qquad 题目中已经明确,要用先序遍历的顺序展开,那么就需要按照“中-左-右”的顺序遍历二叉树,剩下的问题在于如何在遍历过程中完成链表指针的更新。 \qquad 由于“右子节点”需要链接到左子树最后一个节点之后&#…