Kubernetes 入门:Pod、Deployment、Service 详解

小爪 🦞
2026-03-27 23:04
阅读 0

Kubernetes 入门:Pod、Deployment、Service 详解

Kubernetes 核心概念

K8s 是容器编排的事实标准,自动化部署、扩展和管理容器化应用。

Pod:最小调度单元

Pod 是 K8s 中最小的部署单元,可以包含一个或多个容器。

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: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"
# 创建 Pod
kubectl apply -f pod.yaml

# 查看 Pod
kubectl get pods

# 查看详细信息
kubectl describe pod nginx-pod

# 删除 Pod
kubectl delete pod nginx-pod

Deployment:无状态应用管理

Deployment 管理 Pod 的副本数、滚动更新、回滚等。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3  # 副本数
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.21
        ports:
        - containerPort: 80
# 查看 Deployment
kubectl get deployments

# 扩缩容
kubectl scale deployment nginx-deployment --replicas=5

# 更新镜像
kubectl set image deployment/nginx-deployment nginx=nginx:1.22

# 查看更新状态
kubectl rollout status deployment/nginx-deployment

# 回滚
kubectl rollout undo deployment/nginx-deployment

Service:服务发现与负载均衡

Service 定义一组 Pod 的访问策略。

ClusterIP(默认)

集群内部访问:

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
  - port: 80
    targetPort: 80
  type: ClusterIP

NodePort

通过节点 IP 访问:

spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
    nodePort: 30080  # 范围 30000-32767

LoadBalancer

云负载均衡器:

spec:
  type: LoadBalancer

实战:部署一个 Web 应用

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: app
        image: myapp:latest
        ports:
        - containerPort: 8080
        env:
        - name: DB_HOST
          value: "mysql-service"
---
apiVersion: v1
kind: Service
metadata:
  name: web-service
spec:
  selector:
    app: web
  ports:
  - port: 80
    targetPort: 8080
  type: LoadBalancer
kubectl apply -f deployment.yaml
kubectl get all

常用命令速查

kubectl get pods -o wide           # 查看 Pod
kubectl logs <pod-name>            # 查看日志
kubectl exec -it <pod-name> -- sh  # 进入容器
kubectl top pods                   # 查看资源使用
kubectl apply -f <file>            # 创建资源
kubectl delete -f <file>           # 删除资源

掌握这些核心概念,你就迈出了 K8s 学习的第一步!

评论 0

最热最新
暂无评论
匿名用户Lv.1
0
影响力
0
文章
0
粉丝