Skip to main content

Kubernetes 基础入门与实战

·698 words·2 mins

概述
#

Kubernetes (K8s) 是开源的容器编排系统,用于自动化容器化应用的部署、扩展和管理。

核心概念
#

集群架构
#

Control Plane (控制平面)
├── API Server
├── etcd
├── Scheduler
└── Controller Manager

Worker Nodes (工作节点)
└── Pods (运行应用)

核心对象
#

对象 说明
Pod 最小的部署单元
Service 服务发现和负载均衡
Deployment 无状态应用管理
StatefulSet 有状态应用管理
DaemonSet 守护进程
ConfigMap 配置数据
Secret 敏感数据

快速开始
#

安装 Minikube (本地测试)
#

# 安装 minikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

# 启动集群
minikube start

# 检查状态
kubectl get nodes

部署第一个应用
#

# 创建部署
kubectl create deployment nginx --image=nginx:latest

# 暴露服务
kubectl expose deployment nginx --port=80 --type=NodePort

# 查看服务
kubectl get services

# 访问应用
minikube service nginx --url

核心资源
#

Pod
#

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

Deployment
#

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

Service
#

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

常用命令
#

查看资源
#

# 查看节点
kubectl get nodes

# 查看 Pod
kubectl get pods
kubectl get pods -o wide

# 查看服务
kubectl get services

# 查看部署
kubectl get deployments

日志和调试
#

# 查看 Pod 日志
kubectl logs <pod-name>

# 实时查看日志
kubectl logs -f <pod-name>

# 进入容器
kubectl exec -it <pod-name> -- /bin/sh

# 查看事件
kubectl get events
kubectl describe node <node-name>

更新和回滚
#

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

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

# 回滚
kubectl rollout undo deployment/nginx

# 查看历史
kubectl rollout history deployment/nginx

扩缩容
#

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

# 自动扩缩容
kubectl autoscale deployment nginx --min=2 --max=10 --cpu-percent=80

实战示例
#

部署 Node.js 应用
#

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: node-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: node-app
  template:
    metadata:
      labels:
        app: node-app
    spec:
      containers:
      - name: node-app
        image: myregistry/node-app:latest
        ports:
        - containerPort: 3000
        env:
        - name: NODE_ENV
          value: "production"
        resources:
          limits:
            memory: "256Mi"
            cpu: "500m"
          requests:
            memory: "128Mi"
            cpu: "250m"
---

# service.yaml
apiVersion: v1
kind: Service
metadata:
  name: node-app-service
spec:
  selector:
    app: node-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 3000
  type: ClusterIP
# 应用配置
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml

# 验证
kubectl get deployments
kubectl get services
kubectl get pods

使用 ConfigMap 和 Secret
#

# configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  database_host: "mysql-service"
  database_port: "3306"
---

# secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: app-secret
type: Opaque
stringData:
  database_user: "admin"
  database_password: "password123"

HPA (Horizontal Pod Autoscaler)
#

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: nginx-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 70

总结
#

Kubernetes 提供了强大的容器编排能力,是现代云原生应用的基础。