目录
一,k8s集群资源管理方式分类
1,陈述式命令(命令式对象管理)
这种方式类似于直接在Docker中使用docker run命令。你可以直接使用kubectl命令来操作Kubernetes资源。例如,kubectl run nginx-pod --image=nginx:1.17.1 --port=80,这条命令会在集群中运行一个Pod,并指定Pod使用的Docker镜像和端口号。
2, 陈述式对象配置(命令式对象配置)
这种方式类似于使用docker-compose.yml文件。你可以通过kubectl命令和配置文件来操作Kubernetes资源。例如,kubectl create/delete -f nginx-pod.yaml,这条命令会根据nginx-pod.yaml文件中的定义来创建或删除一个Pod。
3, 声明式对象配置(声明式对象配置)
这种方式使用apply命令和配置文件来操作Kubernetes资源。它类似于数据库的操作方式,如果配置文件中定义了一个资源,并且该资源在集群中不存在,那么kubectl就会创建它;如果该资源已经存在但配置不同,那么kubectl就会更新它。例如,kubectl apply -f nginx-pod.yaml
二 , kubectl命令语法
kubectl命令的语法如下
kubectl [command] [type] [name] [flags]
comand #指定要对资源执行的操作,例如create、 get、delete
type #指定资源类型,比如deployment、pod、 service
name #指定资源的名称,名称大小写敏感
flags #指定额外的可选参数
三 查看基本信息
(一)环境指令
命令 | 作用 |
kubectl version | 查看版本信息 |
kubectl api-resources | 查看资源对象简写 |
journalctl -u kubelet -f | node节点查看日志 |
source <(kubectl completion bash) | 配置kubectl自动补全 |
kubectl cluster-info | 查看集群信息 |
1,查看版本信息
kubectl version
2,查看资源对象简写
kubectl api-resources
NAME:资源类型全拼
SHORTNAMES :简写
APIVERSION :资源所属的 API 版本 v1 代表稳定使用
NAMESPACED :是否支持命名空间,true表示支持,false表示不支持
KIND :资源的类型或种类
例如componentstatuses 与 cs 表示同一个指令:
3, 添加补全信息
配置kubectl自动补全,使用指令,执行此命令后,可以使用tab键,在kubectl进行资源操作时进行补全
[root@master01 ~]#source <(kubectl completion bash)
#可以将此命令加入开机自行加载的文件。如$HOME/.bashrc文件、/etc/profile文件
4, node节点查看日志
journalctl -u kubelet -f
5, 查看集群信息
kubectl cluster-info
6, 查看服务端点(endpoints)信息
[root@master01 ~]#kubectl get endpoints -n wyq
NAME ENDPOINTS AGE
nginx-server 10.244.1.24:80,10.244.1.25:80,10.244.2.22:80 25m
endpoints
指定要获取的是Endpoints资源类型。Endpoints在Kubernetes中扮演着连接Service与Pods的实际角色,它保存了Service对应的所有后端Pods的IP地址和端口号,使得Service能够将流量路由到这些Pod上。
ENDPOINTS
:列出了该Endpoints所包含的后端Pods的IP地址和端口。在这个例子中,有三个Pods作为后端服务,它们的IP地址分别是10.244.1.24
、10.244.1.25
和10.244.2.22
,并且所有Pods都监听在80端口上以提供服务
(二)查看资源信息
命令 | 作用 |
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>: | 获取关于资源或资源字段的文档 |
1, 获取资源相关信息
kubectl get <resource> [-o wide|json|yaml] [-n namespace]
resource可以是具体资源名称,如pod nginx-xxx;
也可以是资源类型,如pod;
或者all(仅展示几种核心资源,并不完整)
-o 指定输出格式
-n 指定命令空间
2, 查看集群组件状态
kubectl get componentstatuses 或 kubectl get cs
NAME #集群中的组件名称
STATUS #组件的健康状态,通常是 "Healthy" 或 "Unhealthy"。
MESSAGE #提供了关于组件状态的额外信息,通常是一个简单的 "ok" 或更详细的消息。
ERROR #在组件不健康时可能会显示错误详情,但在健康时通常为空。
3, 查看命名空间
kubectl get namespace或者kubectl get ns
Kubernetes 使用命名空间来将集群中的资源划分到不同的逻辑组中。
在同一个命名空间当中,不允许有相同名称的资源信息,但是在不同的命名空间中可以创建
默认的命名空间是 "default",但通常还有其他命名空间,
如 "kube-system"(用于 Kubernetes 系统组件)和用户自定义的命名空间
NAME #命名空间的名称。
STATUS #命名空间的当前状态,通常是 "Active",表示命名空间是活动的并且可用。
AGE #命名空间自创建以来的时长
4 查看命名空间中的资源
kubectl get [resource] [-n namespace]
举例:
kubectl get all -n kube-system
#查看kube-system中的pod资源
kubectl get all -n kube-system
#all代表所有类型的资源
kubectl get all -A
#--all-namespaces 或 -A :表示显示所有命令空间
5, 查看资源详细信息
kubectl describe <资源类型> <资源名称> [-n 命名空间]
kubectl describe是Kubernetes命令行工具kubectl的一个命令,用于获取关于指定资源的详细信息。
当你想要深入了解某个资源的状态时(比如它的配置、事件、容器日志等),这个命令会非常有用
<资源类型> #描述的资源的类型,比如 pod、service、deployment、statefulset 等。
<资源名称> #你想要描述的资源的名称。
[-n 命名空间] #可选参数,指定资源所在的命名空间。不指定则为当前默认命名空间,通常是default。
查看命名空间kube-system中名称为etcd-master01的pod资源详细信息
(三) 标签
1,标签的作用
辅助筛选资源:通过标签,我们可以筛选出具有特定属性的资源,便于管理和操作。
实现资源的分组:标签可以将资源进行分组,从而合理组织资源结构,使得管理更加有序。
支持负载均衡:在Kubernetes中,Service的Selector会根据标签匹配来实现负载均衡,确保请求能够分发到合适的Pod上。当一个pod迭代或替换之后,新的pod实例IP地址也会改变,同时会将IP地址绑定在标签上,通过访问标签,实现负载均衡
支持Pod的扩容和缩容:Deployment等控制器会根据匹配的标签进行Pod的扩容和缩容,以满足应用的需求。
支持扩展性和灵活性:标签为Kubernetes提供了一种非常灵活的资源管理方式,可以根据需要添加、修改或删除标签,以适应应用的变化和演进。
版本管理:可以使用标签标记不同版本的应用,方便进行版本控制和回滚操作
2,标签的特点
每个对象都可以定义一组键值标签。
每个键对于给定对象必须是唯一的。
标签能够支持高效的查询和监听操作,对于用户界面和命令行是很理想的。
3,标签操作演示
3.1 查看存在资源的标签
kubectl get <资源类型> [-n 命名空间] --show-labels
查看kube-system命名空间中,所有pod实例的标签
kubectl get pods -n kube-system --show-labels
指定查看某一个资源的标签
kubectl get pods etcd-master01 -n kube-system --show-labels