首页主机资讯如何使用Linux K8S进行微服务管理

如何使用Linux K8S进行微服务管理

时间2026-01-22 00:15:03发布访客分类主机资讯浏览1131
导读:使用 Linux 上的 Kubernetes 管理微服务的实操指南 一 环境准备与集群搭建 在 Linux 上准备容器运行时与 kubectl,选择本地开发用 Minikube 或生产级用 kubeadm 搭建集群。 快速启动 Minik...

使用 Linux 上的 Kubernetes 管理微服务的实操指南

一 环境准备与集群搭建

  • 在 Linux 上准备容器运行时与 kubectl,选择本地开发用 Minikube 或生产级用 kubeadm 搭建集群。
  • 快速启动 Minikube(适合本地开发与验证):
    • 安装与启动:
      curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 \
        &
          &
           chmod +x minikube &
          &
           sudo mv minikube /usr/local/bin/
      minikube start
      
    • 验证:
      kubectl cluster-info
      kubectl get nodes
      
  • 生产环境建议使用 kubeadm 部署多节点集群,并接入容器镜像仓库与负载均衡。

二 构建镜像与部署微服务

  • 为每个微服务编写 Dockerfile 并构建镜像,推送到镜像仓库(或 Minikube 内置 Docker 环境)。
    • 示例 Dockerfile(Node.js):
      FROM node:14
      WORKDIR /usr/src/app
      COPY package*.json ./
      RUN npm install
      COPY . .
      EXPOSE 3000
      CMD ["npm","start"]
      
    • 构建与(Minikube 场景)加载镜像:
      docker build -t my-node-app:latest .
      eval $(minikube docker-env)   # 仅在 Minikube 本地环境使用
      docker build -t my-node-app:latest .
      
  • Deployment 管理微服务副本与滚动更新,用 Service 提供稳定访问入口(标签匹配实现服务发现与负载均衡)。
    • 示例:deployment.yaml
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: my-node-app
        labels:
          app: my-node-app
      spec:
        replicas: 3
        selector:
          matchLabels:
            app: my-node-app
        template:
          metadata:
            labels:
              app: my-node-app
          spec:
            containers:
            - name: app
              image: my-node-app:latest
              ports:
              - containerPort: 3000
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: my-node-app
      spec:
        type: ClusterIP
        selector:
          app: my-node-app
        ports:
        - port: 80
          targetPort: 3000
      
    • 部署与验证:
      kubectl apply -f deployment.yaml
      kubectl get pods -l app=my-node-app
      kubectl get svc my-node-app
      
  • 本地访问(Minikube):
    minikube service my-node-app --url
    
  • 扩展与回滚:
    kubectl scale deployment my-node-app --replicas=5
    kubectl rollout status deployment/my-node-app
    kubectl rollout undo deployment/my-node-app
    

三 服务暴露与流量治理

  • Service 类型与用途
    类型 访问范围 典型用途
    ClusterIP 集群内部 微服务间内部通信(默认类型)
    NodePort 节点 IP + 静态端口 开发/测试环境对外暴露
    LoadBalancer 云平台负载均衡器 生产环境对外暴露
    ExternalName DNS CNAME 将服务映射为外部域名
  • 示例:NodePort 暴露
    apiVersion: v1
    kind: Service
    metadata:
      name: my-node-app-np
    spec:
      type: NodePort
      selector:
        app: my-node-app
      ports:
      - port: 80
        targetPort: 3000
        nodePort: 30001
    
    访问地址:http://< 任意节点IP> :30001
  • 七层路由与域名统一入口:使用 Ingress(需部署 Ingress Controller,如 Nginx Ingress)
    • 示例:ingress.yaml
      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        name: my-ingress
        annotations:
          nginx.ingress.kubernetes.io/rewrite-target: /
      spec:
        rules:
        - host: app.example.com
          http:
            paths:
            - path: /
              pathType: Prefix
              backend:
                service:
                  name: my-node-app
                  port:
                    number: 80
      
  • 性能与规模化建议:将 kube-proxy 切换为 IPVS 模式以支持更多连接与更优负载均衡算法(生产推荐)
    kubectl -n kube-system edit cm kube-proxy   # 将 mode: 改为 "ipvs"
    # 重启 kube-proxy Pod 生效
    kubectl -n kube-system delete pod -l k8s-app=kube-proxy
    ipvsadm -Ln   # 验证 IPVS 规则
    
  • 可观测性:部署 Kubernetes DashboardPrometheus + Grafana 做指标与可视化
    minikube dashboard
    

四 弹性伸缩与运维管理

  • 自动扩缩容(HPA,基于指标)
    • 示例:hpa.yaml(K8s 1.23+ 推荐 autoscaling/v2)
      apiVersion: autoscaling/v2
      kind: HorizontalPodAutoscaler
      metadata:
        name: my-node-app-hpa
      spec:
        scaleTargetRef:
          apiVersion: apps/v1
          kind: Deployment
          name: my-node-app
        minReplicas: 2
        maxReplicas: 10
        metrics:
        - type: Resource
          resource:
            name: cpu
            target:
              type: Utilization
              averageUtilization: 50
      
    • 应用与验证:
      kubectl apply -f hpa.yaml
      kubectl get hpa
      
  • 配置与密钥管理:使用 ConfigMapSecret 注入配置与敏感信息
    kubectl create configmap app-config --from-literal=LOG_LEVEL=info
    kubectl create secret generic app-secret --from-literal=DB_PASSWORD=xxxx
    
    在 Pod 中引用:
    envFrom:
    - configMapRef:
        name: app-config
    - secretRef:
        name: app-secret
    
  • 健康检查与优雅终止
    readinessProbe:
      httpGet:
        path: /health
        port: 3000
      initialDelaySeconds: 5
      periodSeconds: 5
    livenessProbe:
      httpGet:
        path: /health
        port: 3000
      initialDelaySeconds: 15
      periodSeconds: 10
    lifecycle:
      preStop:
        exec:
          command: ["/bin/sh","-c","sleep 15"]
    
  • 日志与排障
    kubectl logs -f deployment/my-node-app
    kubectl describe pod <
        pod-name>
        
    kubectl get events --sort-by=.metadata.creationTimestamp
    

五 落地清单与最佳实践

  • 建议按服务拆分 Deployment + Service,并用 Namespace 做环境/团队隔离(如 dev、staging、prod)。
  • 对外域名统一由 Ingress 管理,内部通信优先 ClusterIP,生产对外暴露优先 LoadBalancer 或云厂商 Ingress。
  • 镜像管理采用 私有仓库(Harbor 等),镜像标签使用 不可变标签(如 git sha 或语义版本),避免 latest。
  • 为所有服务配置 readiness/liveness 探针与 resource requests/limits,提升稳定性与调度效率。
  • 接入 Prometheus + Grafana 与日志采集(如 Loki/Fluentd),建立 SLO 与告警;定期演练 滚动升级/回滚HPA 策略。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: 如何使用Linux K8S进行微服务管理
本文地址: https://pptw.com/jishu/789285.html
Debian回收站如何使用 如何在Linux上部署Kubernetes集群

游客 回复需填写必要信息