当前位置:首页 > 未命名 > 正文内容

Kubernetes容器编排实战:从部署到运维

廖万里8小时前未命名1

Kubernetes概述

Kubernetes(简称K8s)是Google开源的容器编排平台,已成为云原生应用的事实标准。它提供了应用部署、扩展和管理的一体化解决方案。

为什么需要Kubernetes

  • 自动化部署:声明式配置,自动创建和管理容器
  • 弹性伸缩:根据负载自动扩缩容
  • 服务发现:内置DNS和服务发现机制
  • 滚动更新:零停机部署和回滚
  • 自我修复:自动重启失败容器,替换节点
  • 负载均衡:自动分配网络流量

核心概念

Pod

Pod是Kubernetes最小的部署单元,包含一个或多个容器。同一Pod内的容器共享网络和存储。

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.21
    ports:
    - containerPort: 80
    resources:
      requests:
        memory: "128Mi"
        cpu: "250m"
      limits:
        memory: "256Mi"
        cpu: "500m"

Deployment

Deployment管理Pod的副本集,提供声明式更新能力。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: web
        image: myapp:v1.0
        ports:
        - containerPort: 8080
        env:
        - name: DB_HOST
          valueFrom:
            configMapKeyRef:
              name: app-config
              key: db-host

Service

Service定义一组Pod的访问策略,提供稳定的网络端点。

apiVersion: v1
kind: Service
metadata:
  name: web-service
spec:
  type: LoadBalancer
  selector:
    app: web
  ports:
  - port: 80
    targetPort: 8080
    protocol: TCP

实战部署

步骤一:创建命名空间

kubectl create namespace production
kubectl get namespaces

步骤二:部署应用

# 应用配置
kubectl apply -f deployment.yaml

# 查看部署状态
kubectl get deployments -n production
kubectl get pods -n production

# 查看Pod详情
kubectl describe pod  -n production

步骤三:暴露服务

# 创建服务
kubectl apply -f service.yaml

# 查看服务
kubectl get services -n production

# 端口转发测试
kubectl port-forward service/web-service 8080:80 -n production

步骤四:配置Ingress

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: myapp.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: web-service
            port:
              number: 80

高级功能

ConfigMap和Secret

# 创建ConfigMap
kubectl create configmap app-config --from-literal=db-host=mysql --from-literal=db-port=3306

# 创建Secret
kubectl create secret generic db-secret --from-literal=password=secretpassword

# 在Pod中使用
env:
- name: DB_PASSWORD
  valueFrom:
    secretKeyRef:
      name: db-secret
      key: password

Persistent Volume

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: data-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: standard

Horizontal Pod Autoscaler

kubectl autoscale deployment web-app --cpu-percent=50 --min=2 --max=10
kubectl get hpa

运维技巧

日志查看

# 查看Pod日志
kubectl logs  -n production

# 实时跟踪日志
kubectl logs -f  -n production

# 查看前一个容器的日志(重启后)
kubectl logs  --previous

故障排查

# 进入容器
kubectl exec -it  -- /bin/sh

# 查看事件
kubectl get events --sort-by=.metadata.creationTimestamp

# 查看资源使用
kubectl top pods
kubectl top nodes

最佳实践

  1. 资源限制:始终设置requests和limits
  2. 健康检查:配置liveness和readiness探针
  3. 安全策略:使用RBAC和NetworkPolicy
  4. 镜像管理:使用特定版本标签,避免latest
  5. 配置分离:使用ConfigMap和Secret管理配置

总结

Kubernetes是现代云原生应用的核心基础设施。掌握其核心概念和运维技巧,能够帮助团队构建高可用、可扩展的应用系统。

K8s Pod Service Volume Ingress Kubernetes架构概览

本文链接:https://www.kkkliao.cn/?id=749 转载需授权!

分享到:

版权声明:本文由廖万里的博客发布,如需转载请注明出处。


发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。