摘要:在华为云上使用Kubernetes(k8s)部署微服务时,可能会遇到多个环节的挑战。以下是对常见问题及解决方案的详细指南,帮助您顺利完成部署:
在华为云上使用Kubernetes(k8s)部署微服务时,可能会遇到多个环节的挑战。以下是对常见问题及解决方案的详细指南,帮助您顺利完成部署:
1. 准备Kubernetes集群
问题1:节点无法加入集群
原因:安全组未开放端口、密钥对错误或网络配置不当。解决:Ø 检查安全组是否允许TCP端口6443(kube-apiserver)、2379-2380(etcd)等。
Ø 确认节点使用的密钥对正确。
Ø 确保节点子网与集群VPC路由配置正确。
问题2:kubectl连接失败
原因:kubeconfig配置错误或权限不足。解决:Ø 从华为云CCE控制台下载正确的kubeconfig文件。
Ø 执行 export KUBECONFIG=~/your-kubeconfig.YAML 指定配置文件。
Ø 使用 kubectl cluster-info 验证连接。
2. 容器化微服务
问题3:docker构建失败
原因:Dockerfile语法错误或依赖下载超时。解决:Ø 检查Dockerfile中的路径是否正确,例如 COPY target/app.jar /app/。
Ø 使用华为云镜像加速器,在Dockerfile中替换镜像源:
dockerfile
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.myhuaweicloud.com/g' /etc/apk/repositories
问题4:推送镜像到SWR失败
原因:未登录或组织名称错误。解决:Ø 登录命令:docker login -u {区域项目名}@{AK} -p {SK} swr.{region}.myhuaweicloud.com
Ø 确认组织名称(SWR控制台创建),镜像标签格式:swr.{region}.myhuaweicloud.com/{组织名}/{镜像名}:{版本}。
原因:应用启动错误或健康检查失败。解决:Ø 查看日志:kubectl logs
--previous。
Ø 调整存活探针的 initialDelaySeconds,例如:
yaml
livenessProbe:
path: /health
port: 8080
initialDelaySeconds: 30 # 根据应用启动时间调整
问题6:Service无法访问
原因:服务类型或端口配置错误。解决:Ø 公网访问需使用 LoadBalancer 类型:
yaml
kind: Service
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 8080
Ø 华为云会自动创建ELB实例,通过 kubectl get svc 查看EXTERNAL-IP。
4. 网络与路由
问题7:Ingress无法路由
原因:未安装Ingress控制器或配置错误。解决:Ø 在CCE集群中安装Nginx Ingress插件(控制台操作)。
Ø 示例Ingress配置:
yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-ingress
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- host: app.example.com
paths:
- path: /
pathType: Prefix
backend:
service:
name: app-service
port:
number: 80
Ø 将域名解析指向Ingress控制器的公网IP。
5. 监控与日志
问题8:无法收集日志
解决:Ø 使用华为云应用运维服务(APM):
在微服务中集成APM Agent(Java/Python等)。在CCE集群中部署APM Collector。Ø 或自行部署EFK:
使用DaemonSet部署Fluentd,配置输出到Elasticsearch。6. CI/CD流水线
问题9:流水线部署失败
解决:示例Jenkinsfile片段:groovy
pipeline {
stages {
stage('Build') {
steps {
sh 'mvn clean package -DskipTests'
sh 'docker build -t swr.cn-east-3.myhuaweicloud.com/myorg/app:${GIT_COMMIT} .'
}
}
stage('Push') {
steps {
sh 'docker push swr.cn-east-3.myhuaweicloud.com/myorg/app:${GIT_COMMIT}'
}
}
stage('Deploy') {
steps {
sh "sed -i 's/{{IMAGE_TAG}}/${GIT_COMMIT}/' deploy.yaml"
sh "kubectl apply -f deploy.yaml"
}
}
}
}
确保kubectl在Jenkins节点有集群访问权限。7. 安全配置
问题10:镜像漏洞
解决:在SWR中启用自动安全扫描,并在CI/CD中集成扫描结果:bash
# 示例:使用trivy扫描镜像
trivy image --exit-code 1 swr.cn-east-3.myhuaweicloud.com/myorg/app:latest
Ø 若发现高危漏洞,终止流水线并通知开发人员。
8. 弹性与高可用
问题11:HPA不生效
解决:Ø 安装Metrics Server:
bash
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
Ø 检查HPA配置:
yaml
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: app-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: app-deployment
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
Ø 使用 kubectl top pods 验证资源指标。
总结
部署过程中需重点关注:
集群配置:网络、安全组、节点连接。镜像管理:正确构建、推送至SWR。K8s资源定义:Deployment、Service、Ingress的YAML配置。调试工具:kubectl logs/describe/exec 诊断问题。华为云服务:利用APM、ELB、SWR等托管服务简化运维。通过分步验证(构建→部署→访问→监控),逐步排查问题,结合华为云文档和社区支持,可高效完成微服务部署。
来源:老客数据一点号