如何使用Linux K8S进行微服务管理
导读:使用 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 .
- 示例 Dockerfile(Node.js):
- 用 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
- 示例:deployment.yaml
- 本地访问(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 暴露
访问地址:http://< 任意节点IP> :30001apiVersion: v1 kind: Service metadata: name: my-node-app-np spec: type: NodePort selector: app: my-node-app ports: - port: 80 targetPort: 3000 nodePort: 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
- 示例:ingress.yaml
- 性能与规模化建议:将 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 Dashboard、Prometheus + 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
- 示例:hpa.yaml(K8s 1.23+ 推荐 autoscaling/v2)
- 配置与密钥管理:使用 ConfigMap 与 Secret 注入配置与敏感信息
在 Pod 中引用:kubectl create configmap app-config --from-literal=LOG_LEVEL=info kubectl create secret generic app-secret --from-literal=DB_PASSWORD=xxxxenvFrom: - 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
