Kubernetes资源管理
- kubectl常用的命令
- 陈述式管理方法
- 1. 创建一个namespace
- 2. 查询所有namespace
- 3. 在namespace下运行一个pod
- 4. 查询指定namespace下的pod
- 5. 查看指定pod的详细信息
- 6. 删除pod
- 7. 删除namespace
- 声明式管理方法
- 命令式对象配置
- 1. 创建yaml文件
- 2. 基于yaml文件创建资源
- 3. 基于yaml文件查询资源
- 4. 基于yaml文件删除资源
- 声明式对象配置
- 1. 基于yaml文件创建资源
- 2. 基于yaml文件更新资源
kubectl常用的命令
kubectl是k8s集群的命令行工具,通过它能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署,kubectl命令的语法如下:
kubectl [command] [type] [name] [flags]
comand:指定要对资源执行的操作,例如create、get、delete
type:指定资源类型,比如deployment、pod、service
name:指定资源的名称,名称大小写敏感
flags:指定额外的可选参数
kubectl的命令可分为三类:
- 陈述式管理方法 - 主要依赖命令行CLI工具进行管理
- 声明式管理方法 - 主要依赖统一资源配置清单(manifest)进行管理
- GUI式管理方法 - 主要依赖图形化操作界面(web界面)进行管理
陈述式管理方法
- Kubernetes集群管理集群资源的唯一入口是通过相应的方法调用apiserver的接口;
- kubectl是官方的CLI命令行工具,用于与apiserver进行通信,将用户在命令行输入的命令,组织并转化为apiserver 能识别的信息,进而实现管理k8s各种资源的一种有效途径;
- kubectl 的命令大全:
kubectl --help
- k8s官方中文文档
1. 创建一个namespace
语法:
kubectl create ns/namespace namespace名称
实例:
kubectl create ns bubble-dev
kubectl create namespace bubble-dev
2. 查询所有namespace
语法:
kubectl get ns/namespace
实例:
kubectl get ns
kubectl get namespace
3. 在namespace下运行一个pod
语法:
kubectl run pod --image=镜像名称 -n namespace名称
实例:
kubectl run pod --image=nginx -n bubble-dev
4. 查询指定namespace下的pod
语法:
kubectl get pods -n namespace名称
实例:
kubectl get pods -n bubble-dev
如果不使用-n指定namespace,则会查询默认namespace(default)下的pod
5. 查看指定pod的详细信息
语法:
kubectl describe pod pod名称 -n namespace名称
实例:
kubectl describe pod pod-864f9875b9-kwbj2 -n bubble-dev
6. 删除pod
语法:
kubectl delete pods pod名称 -n namespace名称
实例:
kubectl delete pods pod-864f9875b9-kwbj2 -n bubble-dev
但是使用kubectl delete pods命令删除pod,之后又会重新启动一个新的pod
此时pod的名称也已经发生了变化,如果想要完全删除掉一个pod,需要删除掉这个pod的deployment或者整个namespace
7. 删除namespace
语法:
kubectl delete namespace/ns namespace名称
实例:
kubectl delete namespace bubble-dev
kubectl delete ns bubble-dev
此时namespace以及namespace下运行的所有pod都被删除掉了
声明式管理方法
- 适合于对资源的修改操作;
- 声明式资源管理方法依赖于资源配置清单文件对资源进行管理;
- 资源配置清单文件有两种格式:yaml(人性化,易读),json(易于api接口解析);
- 对资源的管理,是通过事先定义在统一资源配置清单内,再通过陈述式命令应用到k8s集群里;
- 语法格式:kubectl create/apply/delete -f -o yaml
命令式对象配置
命令式对象配置就是使用命令配合配置文件一起来操作kubernetes资源。
1. 创建yaml文件
自定义yaml文件名称:nginx-pod.yaml
vi nginx-pod.yaml
apiVersion: v1
kind: Namespace
metadata:
name: bubble-dev # 指定Namespace空间名称
---
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod # 指定pod的名称
namespace: bubble-dev # 指定该pod对应的Namespace
spec:
containers:
- name: nginx-container # 运行一个nginx容器
image: nginx:1.17.9 # 指定镜像的名称
2. 基于yaml文件创建资源
kubectl create -f nginx-pod.yaml
3. 基于yaml文件查询资源
kubectl get -f nginx-pod.yaml
4. 基于yaml文件删除资源
kubectl delete -f nginx-pod.yaml
声明式对象配置
声明式对象配置跟命令式对象配置很相似,但是它只有一个命令apply。
其实声明式对象配置就是使用apply描述一个资源最终的状态(在yaml中定义状态)
使用apply操作资源:
如果资源不存在,就创建,相当于 kubectl create
如果资源已存在,就更新,相当于 kubectl patch
1. 基于yaml文件创建资源
kubectl apply -f nginx-pod.yaml
2. 基于yaml文件更新资源
将yaml文件中Nginx的版本从1.17.9改成1.17.8,再执行命令
从运行结果可知,此时pod是发生了变化的
kubectl describe pod nginx-pod -n bubble-dev
总结:三种方式应该怎么用?
- 创建/更新资源,使用声明式对象配置: kubectl apply -f xxxx.yaml
- 删除资源,使用命令式配置: kubectl delete -f xxxx.yaml
- 查询资源,使用命令式对象管理: kubectl get(describe) 资源名称+命令空间