Linux云原生微服务架构搭建:从零开始部署与验证

很多朋友想尝试在Linux上搭建云原生微服务架构,但又被一大堆新概念吓住。
其实只要理清思路,跟着步骤走,你也能在自己的服务器上跑起来一个简单的微服务示例。
本文会从零开始,带你完成环境准备、代码容器化、Kubernetes部署以及最后的验证,每一步都给出可直接执行的命令和配置。

搭建前的环境准备

你需要一台Linux服务器(CentOS 7/8或Ubuntu 20.04+均可,虚拟机或云主机都行)。
为了在本地跑Kubernetes,推荐使用minikube,它能在单机上启动一个完整的K8s集群。
先安装Docker:

# CentOS
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io -y
sudo systemctl start docker && sudo systemctl enable docker

接着安装kubectl和minikube:

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl && sudo mv kubectl /usr/local/bin/
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
chmod +x minikube && sudo mv minikube /usr/local/bin/

启动minikube(驱动选docker):minikube start --driver=docker
看到Done!
kubectl is now configured
就代表环境就绪。

编写并容器化微服务代码

我们准备两个简单的Python Flask服务:user-service(返回用户信息)和order-service(返回订单信息,并调用user-service)。
先在服务器上创建项目目录:

mkdir microservices && cd microservices
mkdir user-service order-service

user-service的app.py

from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/user')
def get_user():
    return jsonify({"id": 1, "name": "Alice"})
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

对应的Dockerfile:

FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install flask
COPY . .
CMD ["python", "app.py"]

注意requirements.txt里只写flask
同样方式创建order-service,区别是它额外调用user-service(通过环境变量USER_SERVICE_URL获取用户信息)。
构建镜像:

cd user-service && docker build -t user-service:v1 .
cd ../order-service && docker build -t order-service:v1 .

构建完成后,用minikube image load user-service:v1 order-service:v1将镜像加载到minikube的Docker环境。

在Kubernetes中部署服务

每个服务都需要一个Deployment和一个Service。
创建user-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: user-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: user
  template:
    metadata:
      labels:
        app: user
    spec:
      containers:
      - name: user
        image: user-service:v1
        ports:
        - containerPort: 5000

再创建user-service.yaml(类型为ClusterIP,供内部调用):

apiVersion: v1
kind: Service
metadata:
  name: user-service
spec:
  selector:
    app: user
  ports:
  - protocol: TCP
    port: 5000
    targetPort: 5000

用相同方式创建order-deployment.yaml和order-service.yaml(其中order-service的Service类型设为NodePort,方便外部访问)。
在order-deployment的环境变量中指定USER_SERVICE_URL=http://user-service:5000。
然后应用所有YAML:

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

几分钟后,用kubectl get pods查看所有Pod是否Running。

常见问题与避坑经验

  • 镜像拉取失败:如果minikube内的容器无法拉取本地镜像,一定要先用minikube image load把镜像导入。也可以设置imagePullPolicy为Never。
  • Pod一直Pending:检查资源是否足够:kubectl describe pod 。minikube默认分配2核CPU和2G内存,如果不够,启动时加参数--cpus=4 --memory=4096
  • 服务之间调用不通:确保Service名称和端口正确,且在同一个Namespace。可以在order-service Pod内用curl http://user-service:5000/user测试。
  • 外部无法访问order-service:如果Service类型用了NodePort,先通过minikube service order-service --url获取访问地址,通常是http://192.168.49.2:随机端口

验证微服务架构是否正常工作

执行以下命令获取order-service的访问地址:

minikube service order-service --url

在浏览器或通过curl访问该URL下的/order路径(假设order-service的/order会返回订单信息并包含用户数据),例如:curl http://192.168.49.2:32456/order
返回的JSON应该包含订单详情和用户数据,这证明两个微服务已经通过Kubernetes内部的Service发现成功通信,一个完整的Linux云原生微服务架构搭建完成。

如果你在搭建过程中遇到其他问题,建议先核对环境版本(Docker 20+、Kubernetes 1.24+),然后按照本文的避坑点逐个排查。
掌握了这套流程,以后部署更复杂的云原生微服务架构也会轻松很多。

分享到:
上一篇
Linux KVM虚拟化虚拟机部署从入门到实战
下一篇
Linux监控工具部署实时查看状态
1
系统公告

泽御云五一特惠活动🔥

泽御云持证合规运营,资质齐全可查,长久稳定! 五一限时多重福利同步开启: ✅ 香港 2 核 2G 云服务器超值拼团,低价入手团长免费 ✅ 4 核 4G 多机房年付拼团,性价比拉满 ✅ 内蒙古新区限时 7 折(zeyuyunnmg)特惠,专属优惠码锁价续费 ✅ 全站通用 75 折优惠,老用户充值享专属赠金 官方站点:zeyuyun.com 合规资质齐全|售后有保障|活动限时错过不再有
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意