Kubernetes入门:容器编排从入门到实践完整指南

Kubernetes(K8s)已经成为容器编排的事实标准。本文将带你从入门到实践,掌握Kubernetes的核心概念和操作。

1. Kubernetes基础

核心概念

# Pod - 最小部署单元
# 包含一个或多个容器
# 共享网络和存储

# Deployment - 管理Pod副本
# 确保指定数量的Pod运行
# 支持滚动更新和回滚

# Service - 服务发现和负载均衡
# ClusterIP - 集群内部访问
# NodePort - 节点端口访问
# LoadBalancer - 负载均衡器

# ConfigMap/Secret - 配置管理
# Volume - 存储管理
# Namespace - 资源隔离

安装Kubernetes

# 使用kubeadm安装(Ubuntu)
# 1. 关闭swap
sudo swapoff -a

# 2. 安装容器运行时
sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable docker

# 3. 安装kubeadm/kubelet/kubectl
sudo apt install -y apt-transport-https ca-certificates curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat <

2. 核心资源

Pod

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
spec:
  containers:
  - name: nginx
    image: nginx:latest
    ports:
    - containerPort: 80
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      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
        livenessProbe:
          httpGet:
            path: /
            port: 80
          initialDelaySeconds: 30
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /
            port: 80
          initialDelaySeconds: 5
          periodSeconds: 5

Service

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

3. 常用命令

# 集群管理
kubectl cluster-info
kubectl get nodes
kubectl get pods -A
kubectl get services -A

# 资源管理
kubectl apply -f deployment.yaml
kubectl get deployment nginx-deployment
kubectl describe deployment nginx-deployment
kubectl rollout status deployment/nginx-deployment
kubectl rollout undo deployment/nginx-deployment

# 日志查看
kubectl logs nginx-pod
kubectl logs -f nginx-pod
kubectl logs nginx-pod -c container-name

# 进入容器
kubectl exec -it nginx-pod -- /bin/bash

# 端口转发
kubectl port-forward pod/nginx-pod 8080:80

4. 配置管理

ConfigMap

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  database_url: "mysql://localhost:3306"
  log_level: "info"

Secret

apiVersion: v1
kind: Secret
metadata:
  name: db-secret
type: Opaque
data:
  username: YWRtaW4=  # base64编码
  password: cGFzc3dvcmQ=

5. 存储管理

PersistentVolume

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-volume
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: manual
  hostPath:
    path: "/mnt/data"

PersistentVolumeClaim

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pv-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi

6. 网络策略

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-frontend
spec:
  podSelector:
    matchLabels:
      app: backend
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: frontend
    ports:
    - protocol: TCP
      port: 8080

7. Helm包管理

# 安装Helm
curl https://baltocdn.com/helm/signing.asc | sudo apt-key add -
sudo apt install helm

# 使用Chart
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install my-mysql bitnami/mysql

8. CI/CD集成

# 使用Argo CD进行GitOps
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/org/repo.git
    targetRevision: HEAD
    path: k8s/
  destination:
    server: https://kubernetes.default.svc
    namespace: default
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

9. 监控与日志

# 部署监控栈
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install prometheus prometheus-community/kube-prometheus-stack

# 查看指标
kubectl top nodes
kubectl top pods

10. 生产环境最佳实践

  • 资源限制:设置requests和limits
  • 健康检查:配置liveness和readiness探针
  • 滚动更新:零停机部署
  • 多副本:至少2个副本保证高可用
  • 命名空间:按环境或团队隔离

总结

Kubernetes学习曲线较陡,但功能强大。关键要点:

  • 掌握核心概念:Pod、Deployment、Service
  • 实践操作:搭建本地集群(Minikube、Kind)
  • 理解网络:CNI、Service、Ingress
  • 存储管理:PV/PVC、StorageClass
📖 进阶学习:学习Operator模式、服务网格(Istio)、以及云原生技术(CNCF Landscape)。

发表评论