目录
前言
本合集旨在提供一个全面的kubectl命令合集,帮助您更好地理解和使用Kubernetes中的陈述式资源管理。Kubernetes是一个强大的容器编排平台,而资源管理是其中至关重要的一部分。通过使用kubectl命令,您可以轻松地创建、更新和删除各种资源,以及查看它们的状态
陈述式资源管理是一种通过定义所需状态来实现自动化管理的方法。通过使用kubectl命令,您可以将集群状态与所需状态保持一致,从而简化管理过程,提高可靠性和可维护性
本合集将介绍各种kubectl命令,包括创建、更新、删除资源,以及查看资源状态等。我们鼓励您通过学习和掌握这些命令,以便能够更有效地管理和操作Kubernetes集群
一、K8s 资源管理操作方式
1、声明式资源管理方式
- 概念
声明式管理是指通过定义所需的状态,让Kubernetes自动将集群状态与所需状态保持一致的管理方式。用户只需描述所需的最终状态,而不需要关心实现的具体步骤
- 操作方式
用户通过编写YAML文件来描述资源对象的配置和规范。然后使用kubectl apply命令将这些YAML文件应用到集群中,Kubernetes会根据文件中定义的状态进行操作,确保集群达到所需状态
2、陈述式资源管理方式
- 概念:
① kubernetes 集群管理集群资源的唯一入口是通过相应的方法调用 apiserver 的接口
② kubectl 是官方的CLI命令行工具,用于与 apiserver 进行通信,将用户在命令行输入的命令,组织并转化为 apiserver 能识别的信息,进而实现管理 k8s 各种资源的一种有效途径
③ 陈述式资源管理是指通过直接给出操作指令来管理资源的方式。用户需要明确指定每个操作的具体步骤,包括创建、更新、删除等。
- 操作方式
用户通过kubectl命令直接操作资源对象,例如使用kubectl create、kubectl apply、kubectl delete等命令来创建、更新、删除资源。用户需要逐步指定每个操作的参数和选项。
二、陈述式资源管理方式
1、kubectl 命令基本语法
kubectl命令的语法如下
kubectl [command] [type] [name] [flags]
comand #指定要对资源执行的操作,例如create、 get、delete
type #指定资源类型,比如deployment、pod、 service
name #指定资源的名称,名称大小写敏感
flags #指定额外的可选参数
kubectl --help #可查询 kubectl 命令的用法
k8s中文文档:http://docs.kubernetes.org.cn/683.html
2、查看基本信息
命令 | 说明 |
---|---|
kubectl version | 查看版本信息 |
kubectl api-resources | 查看资源对象简写 |
journalctl -u kubelet -f | node节点查看日志 |
source <(kubectl completion bash) | 配置kubectl自动补全 |
kubectl cluster-info | 查看集群信息 |
2.1 查看版本信息
kubectl version
2.2 查看资源对象简写
kubectl api-resources
注:
NAME:资源类型全拼
SHORTNAMES :简写
APIVERSION :资源所属的 API 版本
NAMESPACED :是否支持命名空间,true表示支持,false表示不支持
KIND :资源的类型或种类
services与svc表示同一个指令,svc是services的简写
2.3 配置kubectl命令自动补全
配置kubectl自动补全,使用source <(kubectl completion bash)指令,执行此命令后,可以使用tab键,在kubectl进行资源操作时进行补全
[root@master ~]#source <(kubectl completion bash)
#可以将此命令加入开机自行加载的文件。如$HOME/.bashrc文件、/etc/profile文件
2.4 查看node节点日志
journalctl -u kubelet -f
2.5 查看集群信息
kubectl cluster-info
3、查看资源的基本信息
命令 | 说明 |
---|---|
kubectl get <resource_type> [-o wide|json|yaml] [-n namespace] | 获取指定类型的资源信息,如kubectl get pods获取所有Pod信息。-n 指定命令空间 -o 指定输出格式 |
kubectl describe <resource_type> <resource_name> | 显示指定资源的详细信息 |
kubectl explain <resource>: | 获取关于资源或资源字段的文档 |
#获取资源的相关信息,-n 指定命令空间,-o 指定输出格式
kubectl get <resource> [-o wide|json|yaml] [-n namespace]
#resource可以是具体资源名称,如pod nginx-xxx;也可以是资源类型,如pod;或者all(仅展示几种核心资源,并不完整)
#--all-namespaces 或 -A :表示显示所有命令空间,
#--show-labels :显示所有标签
#-l app :仅显示标签为app的资源
#-l app=nginx :仅显示包含app标签,且值为nginx的资源
3.1 查看集群组件状态
kubectl get componentstatuses
简写:
kubectl get cs
注:
- NAME:集群中的组件名称
- STATUS:组件的健康状态,通常是 "Healthy" 或 "Unhealthy"
- MESSAGE:提供了关于组件状态的额外信息,通常是一个简单的 "ok" 或更详细的消息
- ERROR:在组件不健康时可能会显示错误详情,但在健康时通常为空。
3.2 查看命名空间
kubectl get namespace
简写:
kubectl get ns
#Kubernetes 使用命名空间来将集群中的资源划分到不同的逻辑组中
#在同一个命名空间当中,不允许有相同名称的资源信息,但是在不同的命名空间中可以创建
#默认的命名空间是 "default",但通常还有其他命名空间,如 "kube-system"(用于 Kubernetes 系统组件)和用户自定义的命名空间
注:
- NAME:命名空间的名称
- STATUS:命名空间的当前状态,通常是 "Active",表示命名空间是活动的并且可用
- AGE:命名空间自创建以来的时长
3.3 查看命名空间中的资源
(1)查看某一命名空间具体的某一资源信息
#查看命名空间 kube-system 中的pod资源
kubectl get pod -n kube-system
#查看命名空间 kube-system 中的pod资源的详细信息
kubectl get pod -n kube-system -owide
(2) 查看某一命名空间所有的资源
#查看命名空间 kube-system 中的所有资源,all代表所有类型的资源
kubectl get all -n kube-system
(3)查看所有命名空间中的资源
kubectl get all -A
#--all-namespaces 或 -A :表示显示所有命名空间
3.4 查看资源详细信息
kubectl describe <资源类型> <资源名称> [-n 命名空间]
<资源类型> #描述的资源的类型,比如 pod、service、deployment、statefulset 等
<资源名称> #你想要描述的资源的名称
[-n 命名空间] #可选参数,指定资源所在的命名空间。不指定则为当前默认命名空间,通常是default
#kubectl describe是Kubernetes命令行工具kubectl的一个命令,用于获取关于指定资源的详细信息
#当你想要深入了解某个资源的状态时(比如它的配置、事件、容器日志等),这个命令会非常有用
#查看命名空间 kube-system 中名称为 etcd-master 的 pod 资源详细信息
kubectl describe pod etcd-master -n kube-system
#查看默认命名空间中 default 名称为 kubernetes 的 service 资源详细信息
kubectl describe svc kubernetes
3.5 查看特定命名空间中所有部署的信息
kubectl get deployments -n <命名空间>
kubectl get deployments -n <命名空间> -owide
#在名为 "app" 的命名空间中获取所有的部署(Deployments)
kubectl get deployments -n app
kubectl get deployments -n app -owide
3.6 查看资源标签信息
标签的作用:
- 辅助筛选资源:通过标签,我们可以筛选出具有特定属性的资源,便于管理和操作
- 实现资源的分组:标签可以将资源进行分组,从而合理组织资源结构,使得管理更加有序
- 支持负载均衡:在Kubernetes中,Service的Selector会根据标签匹配来实现负载均衡,确保请求能够分发到合适的Pod上。当一个pod迭代或替换之后,新的pod实例IP地址也会改变,同时会将IP地址绑定在标签上,通过访问标签,实现负载均衡
- 支持Pod的扩容和缩容:Deployment等控制器会根据匹配的标签进行Pod的扩容和缩容,以满足应用的需求
- 支持扩展性和灵活性:标签为Kubernetes提供了一种非常灵活的资源管理方式,可以根据需要添加、修改或删除标签,以适应应用的变化和演进
- 版本管理:可以使用标签标记不同版本的应用,方便进行版本控制和回滚操作
标签的特点
- 每个对象都可以定义一组键值标签
- 每个键对于给定对象必须是唯一的
- 标签能够支持高效的查询和监听操作,对于用户界面和命令行是很理想的
3.6.1 查看存在资源的标签
kubectl get <资源类型> [-n 命名空间] --show-labels
(1)查看某一命名空间内所有 pods 实例的标签
#获取指定命名空间(namespace)中的所有 Pod,并显示它们的标签(labels)信息
kubectl get pod -n kube-system --show-labels
(2) 查看某一命名空间内指定的某一 pod 实例的标签
#获取指定命名空间(namespace)中的 etcd-master 信息,并显示它的标签(labels)信息
kubectl get pod etcd-master -n kube-system --show-labels
3.6.2 查看指定标签中含有的资源
kubectl get <资源类型> [-n 命名空间] -l <标签名称>
#列出kube-system命名空间中具有名为"component"的标签的所有Pod
kubectl get pods -n kube-system -l component
#get pods:指定查看资源类型为pod
#-n kube-system:指定查看kube-system的命名空间
#-l component :仅显示标签为component的资源
3.6.3 查看标签中指定的资源
kubectl get pods -n kube-system -l component=kube-apiserver
#-l component=kube-apiserver:指定查看包含component标签,且值为kube-apiserver的资源
4、创建和删除命名空间
4.1 创建命名空间
kubectl create namespace <自定义名称>
简写:
kubectl create ns <自定义名称>
kubectl create ns dh #创建新的命名空间为dh
kubectl create ns app #创建新的命名空间为app
kubectl get ns #查看当前所有的命名空间
4.2 删除命名空间
kubectl delete namespace <namespace_name>
简写:
kubectl delete ns <namesp