---
title: '通过配置文件简化 Kubernetes 部署的参数端口配置'
ShowRssButtonInSectionTermList: true
date: 2023-09-18T22:49:14+08:00
draft: false
showtoc: true
tocopen: false
type: posts
author: '熊鑫伟，我'
keywords: ['Kubernetes', '配置', '端口', '简化部署', '容器化']
tags: ["Kubernetes", "Cloud Native", "Microservices", "Deployment"]
categories: ["AI & Technology"]
description: '本文介绍了如何通过配置文件简化 Kubernetes 部署的端口配置，提升了配置的灵活性和部署的便捷性。'
tldr:
  - "配置文件方式优先用于简化Kubernetes部署，通过ConfigMap传递预定义端口值替代直接传递多个端口的复杂方式。"
  - "参数优先级体系分为三层：直接参数传递优先级最高，环境变量其次，配置文件最低，确保部署灵活性和向后兼容。"
  - "模块需支持三种配置方式（配置文件、直接参数、环境变量）并完整测试各场景，提升部署便捷性同时满足不同用户偏好。"
---

## 介绍

当前模块的执行中，直接传递了众多端口（ws、api、rpc、Prometheus）。 这种方法可能很麻烦，并且不符合 Kubernetes 的最佳实践，即 pod 通常只公开一个端口（80 或 443）。 该提案建议过渡到以配置文件为中心的方法，同时仍然保留在需要时直接传递端口的功能。

## 目标

1. 简化Kubernetes部署的端口配置。
2. 作为参数传递的端口值优先于配置文件值。
3. 为希望使用传统的基于端口或基于环境变量的部署的用户提供灵活性。

## 建议的解决方案

### 1.配置文件

不会直接传递多个端口，而是引入一个配置文件。 默认情况下，该文件将包含预定义的端口。 可以使用 Kubernetes 的“ConfigMap”将该配置文件传递给模块。

**配置文件示例**：

```bash
ws_端口：3000
api_端口：3001
rpc_端口：3002
普罗米修斯端口：9090
```

### 2. 直接传递端口

虽然 Kubernetes 部署建议使用配置文件方式，但用户仍然可以直接传递端口。 如果端口作为参数传递，这些值将覆盖配置文件中的值。

### 3.基于环境变量的部署

对于喜欢使用环境变量进行源代码部署的用户，该模块可以设计为读取 Linux 系统上设置为环境变量的端口值。 如果设置了这些环境变量，它们将覆盖配置文件值，但优先级低于直接作为参数传递的端口值。

**示例**：如果`WS_PORT`环境变量设置为3005，它将覆盖配置文件中的`ws_port`值，除非`ws_port`作为参数传递。

## 实施步骤

1. **更新模块以读取配置文件**：修改模块以从提供的配置文件中读取端口值。
2. **基于参数的覆盖**：实现逻辑以覆盖配置文件端口值（如果它们作为参数提供）。
3. **基于环境变量的覆盖**：实现逻辑来检查环境变量并使用这些值（如果设置）。 确保直接参数值具有最高优先级。
4. **文档**：更新文档以提供有关设置端口值的三种方法的清晰说明：配置文件、直接参数和环境变量。
5. **测试**：在不同场景下彻底测试模块：
    + 仅使用配置文件。
    + 将端口作为参数传递。
    + 设置环境变量。

## 结论

采用配置文件方法可以简化部署过程，尤其是在 Kubernetes 环境中。 虽然配置文件优先考虑简单性，但直接传递端口或使用环境变量的灵活性确保了向后兼容性并满足各种用户偏好。