k8s资源管理及常用命令介绍
资源管理
资源管理介绍
在kubernetes中,所有的内容都抽象为资源,用户需要通过操作资源来管理kubernetes。
kubernetes的本质上就是一个集群系统,用户可以在集群中部署各种服务,所谓的部署服务,其实就是在kubernetes集群中运行一个个的容器,并将指定的程序跑在容器中。
kubernetes的最小管理单元是pod而不是容器,所以只能将容器放在`Pod`中,而kubernetes一般也不会直接管理Pod,而是通过`Pod控制器`来管理Pod的。
Pod可以提供服务之后,就要考虑如何访问Pod中服务,kubernetes提供了`Service`资源实现这个功能。
当然,如果Pod中程序的数据需要持久化,kubernetes还提供了各种`存储`系统。
学习kubernetes的核心,就是学习如何对集群上的`Pod、Pod控制器、Service、存储`等各种资源进行操作
常见资源类型
kubernetes中所有的内容都抽象为资源,可以通过下面的命令进行查看:
kubectl api-resources
经常使用的资源有下面这些:
集群级别资源
pod资源
pod资源控制器
服务发现资源
存储资源
配置资源
资源管理方式
- 命令式对象管理:直接使用命令去操作kubernetes资源 kubectl run nginx-pod --image=nginx:1.17.1 --port=80 命令式对象配置:通过命令配置和配置文件去操作kubernetes资源 kubectl create/patch -f nginx-pod.yaml 声明式对象配置:通过apply命令和配置文件去操作kubernetes资源 kubectl apply -f nginx-pod.yaml
命令式对象管理
kubectl命令
kubectl是kubernetes集群的命令行工具,通过它能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署。kubectl命令的语法如下:
kubectl [command] [type] [name] [flags] comand:指定要对资源执行的操作,例如create、get、delete type:指定资源类型,比如deployment、pod、service name:指定资源的名称,名称大小写敏感 flags:指定额外的可选参数 # 查看所有pod kubectl get pod # 查看某个pod kubectl get pod pod_name # 查看某个pod,以yaml格式展示结果 kubectl get pod pod_name -o yaml #查看某个pod的详细信息 kubectl get pod pod_name -o wide
常用命令(command)
kubernetes允许对资源进行多种操作,可以通过--help查看详细的操作命令
kubectl --help
经常使用的操作有下面这些:
基本命令
运行和调试命令
高级命令
其他命令
命令举例
下面以一个namespace / pod的创建和删除简单演示下命令的使用:
# 创建一个namespace,名字是dev [root@master ~]# kubectl create namespace dev # 获取namespace [root@master ~]# kubectl get ns
# 在此namespace下创建并运行一个nginx的Pod [root@master ~]# kubectl run nginx --image=nginx:1.17.1 -n dev 注:这里的nginx是pod的名字 注 -n 指定创建pod在指定的命名空间内,不指定的话默认是default # 查看新创建的pod [root@master ~]# kubectl get pod [root@master ~]# kubectl get pod -n dev 注 -n 指定查看的命名空间下的pod,不指定的话默认是default
#查看详细pod详细信息
[root@master ~]# kubectl describe pod nginx -n dev
# 删除指定的pod [root@master ~]# kubectl delete pod nginx -n dev 注:不指定命名空间,则默认删除default下的pod # 删除指定的namespace [root@master ~]# kubectl delete ns dev
命令式对象配置
命令式对象配置就是使用命令配合配置文件一起来操作kubernetes资源。
1) 创建一个nginxpod.yaml,内容如下:
apiVersion: v1 kind: Namespace metadata: name: dev --- apiVersion: v1 kind: Pod metadata: name: nginxpod namespace: dev spec: containers: - name: nginx-containers image: nginx:latest
注:上述yaml内容为:创建名字为dev的命名空间,在该命名空间下创建一个名字为nginxpod的pod,使用的镜像是nginx:latest
2)执行create命令,创建资源: [root@master ~]# kubectl create -f nginxpod.yaml 此时发现创建了两个资源对象,分别是namespace和pod 3)执行get命令,查看资源: [root@master ~]# kubectl get -f nginxpod.yaml 这样就显示了两个资源对象的信息 4)执行delete命令,删除资源: [root@master ~]# kubectl delete -f nginxpod.yaml 此时发现两个资源对象被删除了
总结:
命令式对象配置的方式操作资源,可以简单的认为:命令 + yaml配置文件(里面是命令需要的各种参数)
声明式对象配置
声明式对象配置跟命令式对象配置很相似,但是它只有一个命令apply。
# 首先执行一次kubectl apply -f yaml文件,发现创建了资源 [root@master ~]# kubectl apply -f nginxpod.yaml 查看 [root@master ~]# kubectl get ns dev [root@master ~]# kubectl get pods -n dev # 再次执行一次kubectl apply -f yaml文件,发现说资源没有变动 [root@master ~]# kubectl apply -f nginxpod.yaml 若修改镜像版本后再执行 [root@master ~]# vim nginxpod.yaml [root@master ~]# kubectl apply -f nginxpod.yaml 查看详细信息 [root@master ~]# kubectl describe pod nginxpod -n dev
总结:
其实声明式对象配置就是使用apply描述一个资源最终的状态(在yaml中定义状态)
使用apply操作资源:
如果资源不存在,就创建,相当于 kubectl create
如果资源已存在,就更新,相当于 kubectl patch
扩展:kubectl可以在node节点上运行吗 ?
kubectl的运行是需要进行配置的,它的配置文件是$HOME/.kube($HOME表示家目录),如果想要在node节点运行此命令,需要将master上的.kube文件复制到node节点上,即在master节点上执行下面操作:
[root@master ~]# scp -r ~/.kube node1:~/
[root@node1 ~]# kubectl get nodes
注:若没做hosts映射,则需要填写对应节点的ip
使用推荐: 三种方式应该怎么用 ?
创建/更新资源 使用声明式对象配置 kubectl apply -f XXX.yaml
删除资源 使用命令式对象配置 kubectl delete -f XXX.yaml
查询资源 使用命令式对象管理 kubectl get(describe) 资源名称
参考
黑马B站k8s课程https://www.bilibili.com/video/BV1Qv41167ck/ https://gitee.com/yooome/golang/blob/main/k8s%E8%AF%A6%E7%BB%86%E6%95%99%E7%A8%8B-%E8%B0%83%E6%95%B4%E7%89%88/k8s%E8%AF%A6%E7%BB%86%E6%95%99%E7%A8%8B.md https://www.yuque.com/fairy-era/yg511q/xyqxge
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了