Kubernetes(K8S)入门以及命令指南

发布于:2025-09-09 ⋅ 阅读:(22) ⋅ 点赞:(0)

K8S 入门以及命令指南

第一部分:K8S 核心概念入门

在学命令之前,理解其背后的核心概念至关重要。

  1. Pod:

    • 是什么:K8S 中最小的可部署和管理的计算单元。一个 Pod 包含一个或多个容器(通常是一个)、存储资源、唯一的网络 IP 以及管理容器运行方式的策略。
    • 关键点:Pod 是短暂的(生灭无常的),每个 Pod 都有自己的 IP 地址,但该 IP 地址在 Pod 重启或重建后会改变。
  2. Deployment:

    • 是什么:管理 Pod 副本集和生命周期的控制器。它让你可以声明性地定义 Pod 的期望状态(例如,需要运行 3 个副本),Deployment 控制器会以可控的速率将实际状态改变为期望状态。
    • 关键点:用于部署无状态应用、实现滚动更新、回滚和扩缩容。这是最常用的控制器之一
  3. Service:

    • 是什么:一个抽象层,定义了一组 Pod 的逻辑集合和访问它们的策略。由于 Pod 是动态的(IP会变),Service 提供了一个稳定的 IP 地址和 DNS 名称作为访问入口。
    • 关键点:为 Pod 提供稳定的网络访问和负载均衡。
  4. Namespace:

    • 是什么:一种在单个物理集群中创建多个虚拟集群的方法。它将资源划分为不同的分组,便于管理和隔离(例如,dev, test, production 环境)。
    • 关键点:默认有 default, kube-system (系统组件), kube-public 等命名空间。
  5. Node:

    • 是什么:一个工作机器,可以是物理机或虚拟机。每个 Node 由 Master 节点管理。
    • 关键点:Pod 就运行在 Node 上。
  6. Cluster:

    • 是什么:由一组 Node(工作节点)和 Master(控制平面)组成的集合,是 K8S 的完整部署环境。

第二部分:必备的 kubectl 命令

kubectl 是命令行工具,用于与 K8S 集群交互。其基本语法是:kubectl [command] [TYPE] [NAME] [flags]

1. 基础查询命令

命令 说明 示例
kubectl get <resource> 列出资源 kubectl get pods kubectl get services kubectl get deployments kubectl get nodes
kubectl describe <resource>/<name> 显示资源的详细信息 kubectl describe pod/my-pod kubectl describe svc/my-service
kubectl logs <pod-name> 打印 Pod 中容器的日志 kubectl logs my-pod kubectl logs -f my-pod (实时流式日志)
kubectl exec -it <pod-name> -- <command> 在 Pod 的容器中执行命令 kubectl exec -it my-pod -- /bin/bash (进入容器)

2. 创建和删除资源

命令 说明 示例
kubectl apply -f <file.yaml> 通过 YAML 文件创建或更新资源 kubectl apply -f my-deployment.yaml
kubectl create <resource> 直接创建资源(不常用,更推荐 apply kubectl create deployment nginx --image=nginx
kubectl delete -f <file.yaml> 通过 YAML 文件删除资源 kubectl delete -f my-deployment.yaml
kubectl delete <resource>/<name> 直接删除资源 kubectl delete pod/my-pod kubectl delete deployment my-deploy

3. 部署和更新

命令 说明 示例
kubectl rollout status deployment/<name> 查看部署的滚动更新状态 kubectl rollout status deployment/my-app
kubectl rollout history deployment/<name> 查看部署的更新历史 kubectl rollout history deployment/my-app
kubectl rollout undo deployment/<name> 回滚到上一个版本 kubectl rollout undo deployment/my-app
kubectl rollout undo deployment/<name> --to-revision=n 回滚到指定版本 kubectl rollout undo deployment/my-app --to-revision=2
kubectl scale deployment/<name> --replicas=<number> 扩缩容 kubectl scale deployment/my-app --replicas=5

4. 交互和故障排查

命令 说明 示例
kubectl config current-context 显示当前使用的上下文(集群)
kubectl config get-contexts 列出所有上下文
kubectl config use-context <context-name> 切换上下文 kubectl config use-context my-cluster
kubectl port-forward <resource>/<name> <local-port>:<pod-port> 将本地端口转发到 Pod 的端口 kubectl port-forward my-pod 8080:80 (本地8080 -> Pod的80)
kubectl top <node/pod> 显示资源(Node/Pod)的 CPU/内存使用情况 kubectl top nodes kubectl top pods

第三部分:实战示例

假设我们有一个名为 my-app.yaml 的部署文件:

# my-app.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.21.6
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: my-nginx-service
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: ClusterIP

操作流程:

  1. 部署应用
kubectl apply -f my-app.yaml
# 输出: deployment.apps/my-nginx created
#        service/my-nginx-service created
  1. 检查部署状态
kubectl get pods
# 输出: NAME                        READY   STATUS    RESTARTS   AGE
#        my-nginx-5d5d6f4666-2jqkm   1/1     Running   0          10s
#        my-nginx-5d5d6f4666-kk9wp   1/1     Running   0          10s
#        my-nginx-5d5d6f4666-xb8vp   1/1     Running   0          10s

kubectl get deployments
kubectl get services
  1. 访问应用(测试)
    由于 Service 类型是 ClusterIP,我们使用 port-forward 在本地访问。
kubectl port-forward svc/my-nginx-service 8080:80

然后在浏览器中打开 http://localhost:8080,你应该能看到 Nginx 欢迎页面。

  1. 查看日志
# 先获取 Pod 的名字
kubectl get pods
# 查看其中一个 Pod 的日志
kubectl logs my-nginx-5d5d6f4666-2jqkm
  1. 扩缩容
kubectl scale deployment/my-nginx --replicas=5
kubectl get pods # 查看 Pod 数量变为 5 个
  1. 清理
kubectl delete -f my-app.yaml

第四部分:学习建议和下一步(拓展版)

  1. 动手实践(本地环境搭建)

    • Minikube:这是最经典的本地单节点 K8S 集群方案,非常适合初学者学习和测试。
    • Kind (Kubernetes in Docker):使用 Docker 容器来作为 Nodes,快速启动一个 K8S 集群。启动速度通常比 Minikube 更快。
    • Docker Desktop:对于 macOS 和 Windows 用户,Docker Desktop 内置了单节点的 Kubernetes 集群,一键即可启用,非常方便。
    • 核心任务:在你的电脑上选择并安装上述任意一种工具,成功启动集群,并确保 kubectl get nodes 命令能返回一个 Ready 状态的节点。
  2. 精通 YAML 和 kubectl explain

    • K8S 的一切资源定义都是 YAML 文件。你需要熟悉 YAML 的语法结构,特别是缩进和键值对。
    • 最佳学习工具kubectl explain 命令。当你不清楚一个资源该怎么配置时,不要急于上网搜索,先问 kubectl explain
      • 例如:kubectl explain deployment 会列出 Deployment 的一级字段。
      • 例如:kubectl explain deployment.spec.template.spec.containers 会深入解释 Pod 模板中 containers 字段的详细定义。
  3. 循序渐进学习核心概念
    不要试图一次学完所有概念。按照以下顺序,逐个击破,并为每个概念亲手实践:

    • 工作负载控制器:在熟悉 Pod 后,重点学习 Deployment(无状态应用),然后是 StatefulSet(有状态应用,如数据库)和 DaemonSet(每个节点运行一个,如日志收集器)。
    • 配置管理:学习 ConfigMap(存储配置信息)和 Secret(存储密码、令牌等敏感信息),并理解如何将它们作为环境变量或卷挂载到 Pod 中。
    • 持久化存储:学习 PersistentVolume (PV)PersistentVolumeClaim (PVC),理解如何为 Pod 申请和使用持久化存储,以保证数据在 Pod 重启后不丢失。
    • 外部网络访问:学习 IngressIngress Controller。这是将集群内部服务暴露给外部用户的主要方式。
  4. 利用官方文档和知识库

    • Kubernetes 官方文档:这是最权威、最全面的学习资源。
    • Kubernetes API 文档:当你需要了解一个资源的所有可用字段时,API 文档是最详细的参考。
    • Kubernetes 博客:关注官方博客,了解最新的版本特性、最佳实践和案例研究。
  5. 下一步进阶方向

    • 安全和权限:学习 ServiceAccount, Role, 和 RoleBinding (RBAC - 基于角色的访问控制)。
    • 包管理工具 Helm:学习使用 Helm 来管理复杂的应用部署。
    • 监控和日志:探索 Prometheus + Grafana 的监控组合,以及 EFK 或 Loki 的日志收集方案。
    • CI/CD 流水线:尝试将你的 K8S 部署流程集成到 Jenkins, GitLab CI, GitHub Actions 或 ArgoCD 等工具中。

网站公告

今日签到

点亮在社区的每一天
去签到