微服务架构已成为现代应用开发的主流模式,下面我将详细介绍在Linux环境下部署微服务架构的完整方案。
# 更新系统包
sudo apt update && sudo apt upgrade -y # Ubuntu/Debian
sudo yum update -y # CentOS/RHEL
# 安装基础工具
sudo apt install -y git curl wget unzip
# 安装Docker
curl -fsSL https://get.docker.com | sh
sudo systemctl enable --now docker
# 验证安装
docker --version
示例Java微服务Dockerfile:
FROM openjdk:17-jdk-slim
WORKDIR /app
COPY target/my-service.jar .
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "my-service.jar"]
# 构建镜像
docker build -t my-service:1.0 .
# 运行容器
docker run -d -p 8080:8080 --name my-service my-service:1.0
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
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
创建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
以Nacos为例:
docker run --name nacos -e MODE=standalone -p 8848:8848 -d nacos/nacos-server:latest
在application.properties中:
spring.cloud.nacos.discovery.server-addr=your-nacos-server:8848
spring.cloud.nacos.config.server-addr=your-nacos-server:8848
以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
# Prometheus
docker run -d -p 9090:9090 --name prometheus prom/prometheus
# Grafana
docker run -d -p 3000:3000 --name grafana grafana/grafana
# 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
docker run -d -p 8080:8080 -p 50000:50000 --name jenkins \
-v jenkins_home:/var/jenkins_home \
jenkins/jenkins:lts-jdk11
创建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'
}
}
}
}
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
# 生成证书
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout tls.key -out tls.crt -subj "/CN=my-service.example.com"
端口冲突问题:
netstat -tuln
检查端口占用容器间通信问题:
性能瓶颈:
top
/htop
监控资源使用日志收集问题:
通过以上步骤,您可以在Linux环境中成功部署一个完整的微服务架构。根据实际需求,您可以调整各个组件的配置和规模。