插件窝 干货文章 如何在Linux上部署微服务架构

如何在Linux上部署微服务架构

service Docker 部署 Kong 138    来源:    2025-04-16

在Linux上部署微服务架构的完整指南

微服务架构已成为现代应用开发的主流模式,下面我将详细介绍在Linux环境下部署微服务架构的完整方案。

一、准备工作

1. 环境要求

  • Linux服务器(推荐Ubuntu 20.04+/CentOS 7+)
  • Docker 20.10+
  • Kubernetes 1.20+(可选)
  • Java/Python/Node.js等运行时环境(根据微服务语言)
  • Git版本控制工具

2. 基础设施准备

# 更新系统包
sudo apt update && sudo apt upgrade -y  # Ubuntu/Debian
sudo yum update -y                      # CentOS/RHEL

# 安装基础工具
sudo apt install -y git curl wget unzip

二、容器化微服务

1. 安装Docker

# 安装Docker
curl -fsSL https://get.docker.com | sh
sudo systemctl enable --now docker

# 验证安装
docker --version

2. 为每个微服务创建Dockerfile

示例Java微服务Dockerfile:

FROM openjdk:17-jdk-slim
WORKDIR /app
COPY target/my-service.jar .
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "my-service.jar"]

3. 构建和运行容器

# 构建镜像
docker build -t my-service:1.0 .

# 运行容器
docker run -d -p 8080:8080 --name my-service my-service:1.0

三、使用编排工具(推荐Kubernetes)

1. 安装Minikube(开发环境)

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
minikube start --driver=docker

2. 安装kubectl

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

3. 部署微服务到Kubernete

创建deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-service
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-service
  template:
    metadata:
      labels:
        app: my-service
    spec:
      containers:
      - name: my-service
        image: my-service:1.0
        ports:
        - containerPort: 8080

创建service.yaml:

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-service
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
  type: LoadBalancer

部署到集群:

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

四、服务发现与配置中心

1. 部署Consul/Nacos/Eureka

以Nacos为例:

docker run --name nacos -e MODE=standalone -p 8848:8848 -d nacos/nacos-server:latest

2. 微服务集成配置

在application.properties中:

spring.cloud.nacos.discovery.server-addr=your-nacos-server:8848
spring.cloud.nacos.config.server-addr=your-nacos-server:8848

五、API网关部署

1. 部署Spring Cloud Gateway/Kong

以Kong为例:

# 安装PostgreSQL
sudo apt install -y postgresql postgresql-contrib

# 部署Kong
docker run -d --name kong \
  -e "KONG_DATABASE=postgres" \
  -e "KONG_PG_HOST=your-postgres-host" \
  -e "KONG_PG_USER=kong" \
  -e "KONG_PG_PASSWORD=kong" \
  -e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
  -e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
  -e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
  -e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
  -e "KONG_ADMIN_LISTEN=0.0.0.0:8001" \
  -p 8000:8000 \
  -p 8443:8443 \
  -p 8001:8001 \
  -p 8444:8444 \
  kong:latest

六、监控与日志

1. 部署Prometheus + Grafana

# Prometheus
docker run -d -p 9090:9090 --name prometheus prom/prometheus

# Grafana
docker run -d -p 3000:3000 --name grafana grafana/grafana

2. 集中式日志ELK Stack

# Elasticsearch
docker run -d -p 9200:9200 -p 9300:9300 --name elasticsearch elasticsearch:7.9.3

# Logstash
docker run -d --name logstash logstash:7.9.3

# Kibana
docker run -d -p 5601:5601 --name kibana kibana:7.9.3

七、CI/CD流水线

1. 安装Jenkins

docker run -d -p 8080:8080 -p 50000:50000 --name jenkins \
  -v jenkins_home:/var/jenkins_home \
  jenkins/jenkins:lts-jdk11

2. 配置自动化部署

创建Jenkinsfile示例:

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                sh 'mvn clean package'
            }
        }
        stage('Test') {
            steps {
                sh 'mvn test'
            }
        }
        stage('Docker Build') {
            steps {
                sh 'docker build -t my-service:$BUILD_NUMBER .'
            }
        }
        stage('Deploy') {
            steps {
                sh 'kubectl set image deployment/my-service my-service=my-service:$BUILD_NUMBER'
            }
        }
    }
}

八、安全加固

1. 网络策略

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  - Egress

2. 服务间TLS加密

# 生成证书
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout tls.key -out tls.crt -subj "/CN=my-service.example.com"

常见问题解决方案

  1. 端口冲突问题:

    • 使用netstat -tuln检查端口占用
    • 修改服务配置或使用不同端口
  2. 容器间通信问题:

    • 确保使用正确的服务名称(DNS解析)
    • 检查Kubernetes Service配置
  3. 性能瓶颈:

    • 使用top/htop监控资源使用
    • 考虑水平扩展(Pod副本数增加)
  4. 日志收集问题:

    • 确保Fluentd/Filebeat配置正确
    • 检查Elasticsearch索引模式

通过以上步骤,您可以在Linux环境中成功部署一个完整的微服务架构。根据实际需求,您可以调整各个组件的配置和规模。