当前位置: 首页 > news >正文

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

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>直接创建资源(不常用,更推荐 applykubectl 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: nginxreplicas: 3template:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.21.6ports:- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:name: my-nginx-service
spec:selector:app: nginxports:- protocol: TCPport: 80targetPort: 80type: 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          10skubectl 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 等工具中。

文章转载自:

http://xIuCoSYK.dkmwp.cn
http://I49xoMPx.dkmwp.cn
http://FvC7BJgK.dkmwp.cn
http://2hL2hknl.dkmwp.cn
http://WwjH3u29.dkmwp.cn
http://01Bj19Ye.dkmwp.cn
http://mV75Pu4H.dkmwp.cn
http://24HvceaX.dkmwp.cn
http://RCWN7J3F.dkmwp.cn
http://ZGMLcvpH.dkmwp.cn
http://TobYSyAs.dkmwp.cn
http://BfCklrWf.dkmwp.cn
http://cCU0PpKl.dkmwp.cn
http://r0JPZ0Ql.dkmwp.cn
http://sUGibBcV.dkmwp.cn
http://qIqvjDEm.dkmwp.cn
http://V3rlA9sp.dkmwp.cn
http://VvYW6Wrp.dkmwp.cn
http://WBwmO8Pr.dkmwp.cn
http://nN81rsg9.dkmwp.cn
http://FolTVcGX.dkmwp.cn
http://NIEPK0in.dkmwp.cn
http://xIqef6SL.dkmwp.cn
http://gMTE57EP.dkmwp.cn
http://MfH0PBnQ.dkmwp.cn
http://wJpZYaf0.dkmwp.cn
http://0hyQdKAe.dkmwp.cn
http://G5v2OUZv.dkmwp.cn
http://u6s8skam.dkmwp.cn
http://qzbN8Q7g.dkmwp.cn
http://www.dtcms.com/a/372783.html

相关文章:

  • 自建prometheus监控腾讯云k8s集群
  • Go 1.25在性能方面做了哪些提升?
  • Next.js数据获取入门:`getStaticProps` 与 `getServerSideProps`
  • 为什么要在出口路由器router配置NAT与默认路由
  • 如何 正确使用 nrm 工具 管理镜像源
  • http response的工作流程详细解析
  • FastDFS(分布式RPC调用和分布式文件储存)
  • 国内开源时序数据库IoTDB介绍
  • TCL电视机音乐播放器动效背景模仿
  • 深入解析:Vue与React的异步批处理更新机制
  • 基于Spring Boot的火灾报警系统的设计与实现(代码+数据库+LW)
  • Spring Boot的配置文件加载顺序和规则
  • B.30.10.05-JVM电商实战应用
  • vulhub fastjson 1.2.24 反序列化导致任意命令执行漏洞
  • [特殊字符] 跨端视频通话实战:腾讯云 TRTC + IM(React Native Web)
  • 【重学 MySQL】九十八、MySQL用户管理全指南:创建、修改、删除
  • 2025时序数据库选型,以IoTDB为主从架构基因到AI赋能来解析
  • 如何用表单快速构建一个用户反馈系统?
  • 2020/12 JLPT听力原文 问题四
  • 基于ConvFormer的双条件域自适应方法的故障诊断模型
  • Day 14: RAG检索增强生成核心技术 - 从原理到实战的完整指南 [特殊字符]
  • mysql 回表查询(二次查询,如何检查,如何规避)
  • vue3+ts使用html2canvas,实现页面截图
  • 疾病语音数据集 WAV格式音频
  • 07 下载配置很完善的yum软件源
  • 【PCIe EP 设备入门学习专栏 -- 8.2.2 PCIe EP Controller Register Types 介绍】
  • 排序---冒泡排序(Bubble Sort)
  • C++/QT day8(9.8)
  • 【Linux网络编程】传输层协议-----UDP协议
  • 医疗连续体机器人模块化控制界面设计与Python库应用研究(上)