一、kubeconfig配置文件
- 文件作用: kubectl使用kubeconfig认证文件连接K8s集群
- 生成方式: 使用kubectl config指令生成
- 核心字段:
- clusters: 定义集群信息,包括证书和服务端地址
- contexts: 定义上下文,关联集群和用户
- users: 定义客户端认证信息
- current-context: 指定当前使用的上下文
二、Kubernetes弃用Docker
1. 弃用背景
- 原因: Kubernetes早期通过dockershim组件与Docker Engine通信,现计划弃用该组件
- 解决方案: 引入CRI(Container Runtime Interface)标准接口
- 架构变化: 从Kubernetes→kubelet→CRI(dockershim)→dockerd→containerd变为更直接的运行时调用链
2. 替代方案
- containerd:
- 与Docker兼容但更轻量
- 目前较为成熟的替代方案
- 红帽项目:
- cri-o: 专为Kubernetes设计的轻量运行时
- podman: 红帽主推的无守护进程容器工具
- 应对建议: 在Kubernetes彻底放弃Docker支持前迁移到受支持的运行时
三、kubectl命令工具
- 基础命令:
- 资源操作: create/expose/run/set/explain/get/edit/delete
- 功能说明: 通过文件名或标准输入创建/管理资源
- 部署命令:
- 版本控制: rollout管理Deployment发布状态
- 伸缩能力: scale调整Pod数量,autoscale配置自动伸缩规则
- 集群管理:
- 节点维护: cordon/uncordon标记节点调度状态,drain优雅下线节点
- 信息查看: cluster-info显示集群信息,top查看资源利用率
- 学习方式:
- 帮助系统: 通过help和man命令查看详细使用方法
- 官方文档: 参考https://kubernetes.io/zh/docs/reference/kubectl/overview/
四、kubectl命令行管理工具
- kubectl介绍
- 工具性质: kubectl是Kubernetes集群管理工具,用于控制Kubernetes集群
- 手册获取:
- 由于是第三方工具,不包含在Linux系统手册中(man命令不可用)
- 需要通过--help命令和官方文档获取使用说明
- 命令状态码:
- 0表示成功执行
- 1表示小问题(如无法访问子目录)
- 2表示严重错误(如无法访问命令行参数)
2. kubectl官方文档
- 文档地址: https://kubernetes.io/zh/docs/reference/kubectl/overview/
- 语言切换: 右上角可选择中文界面
- 内容特点:
- 提供完整的kubectl命令参考
- 包含大量实际使用示例
- 可作为日常操作的权威参考
- 基本语法:
- kubectl [command] [TYPE] [NAME] [flags]
- command: 要执行的操作(如create/get/delete)
- TYPE: 资源类型(不区分大小写,支持单数/复数/缩写形式)
- NAME: 资源名称(区分大小写,省略时显示所有资源)
- 典型操作:
- 获取pod状态: kubectl get pods <pod-name>
- 资源排序输出: 使用--sort-by参数配合jsonpath表达式
- 按名称排序pod列表: kubectl get pods --sort-by=.metadata.name
- 使用建议:
- 文档内容非常全面,可作为参考手册使用
- 实际使用时只需关注当前需要的功能部分
- 遇到问题时再查阅相关命令的详细说明
3. 命令分类及描述
- 基础命令(Beginner):
- create: 从文件或标准输入创建资源
- expose: 将副本控制器、服务、部署或pod暴露为新的Kubernetes服务
- run: 在集群上运行特定镜像
- set: 设置对象的特定功能
- 基础命令(Intermediate):
- explain: 资源文档说明
- get: 显示一个或多个资源
- edit: 在服务器上编辑资源
- delete: 通过文件名、标准输入、资源名称或标签选择器删除资源
- 部署命令:
- rollout: 管理资源的部署过程
- scale: 设置Deployment、ReplicaSet或ReplicationController的新大小
- autoscale: 自动缩放Deployment、ReplicaSet、StatefulSet或ReplicationController
- 集群管理命令:
- certificate: 修改证书资源
- cluster-info: 显示集群信息
- top: 显示资源使用情况
- 设置命令:
- label: 更新资源标签
- annotate: 更新资源注释
- completion: 输出指定shell的补全代码(bash或zsh)
- 其他命令:
- api-resources: 打印服务器支持的API资源
- api-versions: 以"group/version"形式打印支持的API版本
- config: 修改kubeconfig文件
- plugin: 提供与插件交互的实用程序
- version: 打印客户端和服务器版本信息
- 使用说明:
- 基本语法: kubectl [flags] [options]
- 帮助信息: 使用kubectl <command> --help获取特定命令的更多信息
- 学习重点:
- 需要掌握约80%命令的基本用途和使用方法
- 官方文档参考地址: Kubernetes kubectl概述
4. 命令分类及描述总结
1)基础命令
- create: 通过文件名或标准输入创建资源
- expose: 为Deployment或Pod创建Service
- run: 在集群中运行特定镜像
- set: 在对象上设置特定功能
- explain: 查看文档参考资料
- get: 显示一个或多个资源
- edit: 使用系统编辑器编辑资源
- delete: 通过多种方式删除资源
2)部署命令
- rollout: 管理Deployment/Daemonset的发布(状态、记录、回滚等)
- scale: 对Deployment/ReplicaSet/RC/Job进行Pod数量扩缩容
- autoscale: 配置自动伸缩规则(依赖metrics-server和hpa)
- certificate: 修改证书资源
3)集群管理命令
- cluster-info: 显示集群信息
- top: 查看资源利用率(依赖metrics-server)
- cordon/uncordon: 标记节点不可调度/可调度
- drain: 驱逐节点应用准备维护
- taint: 修改节点taint标记
4)故障诊断和调试命令
- describe: 显示资源详细信息
- logs: 查看Pod容器日志(-c指定多容器)
- attach/exec: 附加到容器/在容器内执行命令
- port-forward: 创建Pod本地端口映射
- proxy: 为API server创建代理
- cp: 容器内外文件拷贝
- auth: 检查授权
- debug: 创建调试会话排查故障
5)高级命令
- diff: 在线配置与文件对比
- apply: 创建/更新资源
- patch: 补丁方式更新资源字段
- replace: 替换资源
- kustomize: 构建kustomization目标
6)设置命令
- label: 设置/更新资源标签
- annotate: 设置/更新注解
- completion: 配置自动补全(依赖bash-completion)
7)其他命令
- api-resources: 查看所有资源
- api-versions: 打印支持的API版本
- config: 修改kubeconfig文件
- version: 查看kubectl和k8s版本
8)学习建议
- 学习方法: 80%命令将在后续场景中具体讲解,建议先混个眼熟
- 实践重点: 结合具体场景理解命令使用,比单独记忆更有效
- 官方参考: kubectl官方文档
5. 补全命令
1)补全命令介绍
- 功能定位:completion命令用于实现kubectl命令行工具的自动补全功能,特别适合初学者快速掌握命令结构
- 依赖关系:需要系统安装bash-completion软件包(Linux默认不包含该包)
- 命令语法:通过source <(kubectl completion bash)命令激活补全功能
2)补全命令使用
- 安装步骤:
-
-
- 执行yum install bash-completion安装依赖包(示例中版本为1:2.1-8.el7)
- 安装完成后必须重新打开终端会话
- 执行激活命令source <(kubectl completion bash)
-
- 使用效果:
- 输入kubectl get n后按Tab键,会自动提示所有n开头的资源类型
- 继续输入o会缩小到node相关命令
- 系统要求:
- 必须保持bash-completion包版本与系统兼容
- 不同Linux发行版安装命令可能不同(如apt-get等)
3)查看当前kubectl和k8s版本
- 命令语法:kubectl version显示客户端和服务端双版本
- 版本解读:
- 示例中客户端版本为v1.21.0(GitVersion字段)
- 服务端版本需与客户端匹配,否则可能出现兼容性问题
- 版本差异:
- 1.15之前版本功能差异较大
- 版本号采用主次版本号制(如1.21比1.8新13个版本)
- 实践意义:
- 排查问题时需先确认集群版本
- 学习资料需对应版本,避免新功能在老版本不可用
6. 应用案例
1)快速部署网站
- 部署流程:
- 使用kubectl create deployment web --image=lisi/java-demo创建部署
- 通过kubectl get deploy,pods查看部署状态
- 使用kubectl expose deployment web --port=80 --target-port=8080 --type=NodePort暴露服务
- 通过kubectl get service获取访问地址
- 关键参数说明:
- --port:Service对外暴露的端口
- --target-port:容器内部应用实际监听的端口
- --type=NodePort:将服务暴露为节点端口类型
- 访问方式:
- 通过任意节点IP和随机分配的端口访问,如http://NodeIP:Port
- 端口号可通过kubectl get service查看
- 基础命令:
- create:通过文件名或标准输入创建资源
- expose:为Deployment/Pod创建Service
- get:显示一个或多个资源状态
- delete:删除资源
- 部署命令:
- rollout:管理Deployment发布状态
- scale:扩容/缩容Pod数量
- autoscale:配置自动伸缩规则
- 集群管理命令:
- cluster-info:显示集群信息
- drain:驱逐节点应用准备维护
- create命令详解:
- 输入方式:支持通过YAML文件或标准输入创建资源
- 常用子命令:可创建deployment、configmap、service等多种资源
- 参数选项:
- -f:指定YAML文件
- --dry-run:试运行不实际创建
- --record:记录命令到资源注解
2)快速部署网站实践
- 实际操作步骤:
- 创建deployment:kubectl create deployment java-demo --image=lisi/java-demo
- 检查pod状态:kubectl get pods确认容器运行状态
- 暴露服务:kubectl expose deployment java-demo --port=80 --target-port=8080 --type=NodePort
- 获取访问地址:kubectl get service查看分配的节点端口
- 注意事项:
- 确保镜像可从公共仓库拉取
- 端口映射关系要正确配置
- 服务名称需与deployment对应
- 访问验证:
- 通过浏览器访问http://<节点IP>:<随机端口>
- 示例中使用的JAVA demo应用会显示简单界面
五、知识小结
|---------------|--------------------------------------------------------------|---------------------------------------------------|------|
| 知识点 | 核心内容 | 考试重点/易混淆点 | 难度系数 |
| kubectl 基础命令 | kubectl create 创建资源(如 Deployment、Service),kubectl get 查看资源状态 | kubectl create 支持文件名(YAML)或标准输入(管道符) | ⭐⭐ |
| Deployment 部署 | 通过 kubectl create deployment <名称> --image=<镜像> 快速部署应用 | 镜像需可公开拉取(如 Docker Hub),名称需唯一 | ⭐⭐ |
| Service 暴露服务 | 使用 kubectl expose 将 Deployment 端口暴露为 Service,类型可选 NodePort | 端口映射逻辑:--port(Service 端口)与 --target-port(容器端口)需区分 | ⭐⭐⭐ |
| 命令补全 | 安装 bash-completion 包后,通过 kubectl completion bash 启用命令提示 | 仅限 Linux 系统,需重启终端生效 | ⭐ |
| 版本兼容性 | kubectl version 查看客户端与服务端版本,1.15 以下版本功能差异较大 | 版本号格式为 1.x.y,需注意迭代间隔(如 1.8 → 1.21) | ⭐⭐ |
| 实战示例 | 部署 Java Demo 镜像并暴露为 NodePort Service,通过节点 IP:端口访问 | Service 名称需与 Deployment 对应,否则暴露失败 | ⭐⭐⭐ |
| 帮助文档 | kubectl --help 查看命令概览,kubectl <command> --help 查看子命令详情 | 官方文档优先(含中文选项),第三方工具无 man 手册 | ⭐ |