Kubernetes入门教程

1 什么是Kubernetes

Kubernetes(K8s)是一个开源容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它提供容器调度、服务发现、负载均衡、存储编排等核心功能。

2 核心概念

  • Pod:Kubernetes中最小可部署单元,包含一个或多个容器
  • Deployment:管理Pod副本和滚动更新的控制器
  • Service:为一组Pod提供统一访问入口和负载均衡
  • Namespace:将集群资源划分为多个虚拟集群
  • ConfigMap & Secret:存储配置和敏感数据
  • 3 安装环境

  • 安装Minikube(本地开发环境)
  • # 安装Minikube
    curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
    sudo install minikube-linux-amd64 /usr/local/bin/minikube
  • 安装kubectl(Kubernetes命令行工具)
  • # 安装kubectl
    curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
    sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
  • 启动本地集群
  • # 启动Minikube集群
    minikube start --driver=docker

    4 部署第一个应用

  • 创建Nginx 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.23
            ports:
            - containerPort: 80
  • 应用配置
  • # 部署到集群
    kubectl apply -f nginx-deployment.yaml
  • 检查部署状态
  • # 查看部署状态
    kubectl get deployments
    
    # 查看Pod
    kubectl get pods -l app=nginx

    5 暴露服务

  • 创建Service暴露Nginx
  • apiVersion: v1
    kind: Service
    metadata:
      name: nginx-service
    spec:
      selector:
        app: nginx
      ports:
        - protocol: TCP
          port: 80
          targetPort: 80
      type: LoadBalancer
  • 应用Service配置
  • kubectl apply -f nginx-service.yaml
  • 访问服务
  • # 获取服务URL
    minikube service nginx-service --url

    6 配置管理

  • 创建ConfigMap
  • apiVersion: v1
    kind: ConfigMap
    metadata:
      name: nginx-config
    data:
      nginx.conf: |
        server {
          listen       80;
          server_name  localhost;
          location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
          }
        }
  • 挂载到Pod
  • apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-config-deployment
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx-config
      template:
        metadata:
          labels:
            app: nginx-config
        spec:
          containers:
          - name: nginx
            image: nginx:1.23
            volumeMounts:
            - name: nginx-config-volume
              mountPath: /etc/nginx/conf.d/
          volumes:
          - name: nginx-config-volume
            configMap:
              name: nginx-config

    7 扩缩容应用

  • 手动扩容
  • # 扩容到5个副本
    kubectl scale deployment nginx-deployment --replicas=5
  • 自动扩缩容(HPA)
  • apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: nginx-hpa
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: nginx-deployment
      minReplicas: 3
      maxReplicas: 10
      metrics:
      - type: Resource
        resource:
          name: cpu
          target:
            type: Utilization
            averageUtilization: 50

    8 滚动更新

  • 更新镜像版本
  • # 更新镜像到1.24版本
    kubectl set image deployment/nginx-deployment nginx=nginx:1.24
  • 查看更新状态
  • kubectl rollout status deployment/nginx-deployment
  • 回滚到上一版本
  • kubectl rollout undo deployment/nginx-deployment

    9 清理资源

  • 删除资源
  • # 删除部署和服务
    kubectl delete deployment nginx-deployment
    kubectl delete service nginx-service
  • 停止Minikube集群
  • minikube stop

    10 总结

本教程介绍了Kubernetes的核心概念和基本操作,包括:

  • 安装本地开发环境(Minikube)
  • 部署和管理容器化应用
  • 使用Service暴露应用
  • 通过ConfigMap管理配置
  • 实现应用扩缩容
  • 执行滚动更新和回滚
  • 清理集群资源

Kubernetes是一个功能强大的容器编排平台,掌握这些基础操作是成为K8s管理员的第一步。后续可以深入学习更高级的特性如持久化存储、网络策略、安全配置等。建议继续实践并探索Kubernetes在生产环境中的应用。

发表回复

后才能评论