【k8s】Kubernetes 声明式 API、命令式

1. 资源管理方式:

1>. 命令式对象管理∶直接使用命令去操作kubernetes资源

bash 复制代码
kubectl run nginx-pod --image=nginx:1.17.1 --port=80

2>. 命令式对象配置∶通过命令配置和配置文件去操作kubernetes资源

bash 复制代码
kubectl create/patch -f nginx-pod.yaml

3>. 声明式对象配置∶通过apply命令和配置文件去操作kubemetes资源

bash 复制代码
kubectl apply -f nginx-pod.yaml

2. 命令式对象管理:

kubectl命令:kubectl是kubernetes集群的命令行工具,通过它能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署。kubectl命令的语法如下∶

bash 复制代码
kubectl [command] [type] [name] [flags]
 
comand:指定要对资源执行的操作,例如create、get、delete 
type:指定资源类型,比如deployment、pod、service
name:指定资源的名称,名称大小写敏感
flags:指定额外的可选参数
 
## 查看所有pod:
[root@master ~]# kubectl get pod
 
## 查看某个pod:
[root@master ~]# kubectl get pod podname
 
## 查看莫格pod,以yaml格式展示结果:
[root@master ~]# kubectl get pod podname -o yaml
 
## 查看资源类型:
[root@master ~]# kubectl api-resources
 
## 查看集群信息:
[root@master ~]# kubectl cluster-info

我们以一个namespace / pod的创建和删除演示kubectl命令的使用:

bash 复制代码
## 创建一个名为dev的namespace:
[root@master ~]# kubectl create namespace/ns dev
 
## 获取namespace:
[root@master ~]# kubectl get ns
 
## 在此namespace下创建并运行一个nginx的pod:
[root@master ~]# kubectl run nginxpod(podname) --image nginx(镜像名) -n dev(namespace)
 
## 查看在dev命名空间创建的pod:
[root@master ~]# kubectl get pod -n dev
 
[root@master ~]# kubectl get pod -n dev -o wide
 
## 查看资源在dev命名空间的运行过程:
[root@master ~]# kubectl describe pod podname -n dev
 
## 删除指定的pod:
[root@master ~]# kubectl delete pod nginxpod -n dev
 
## 删除指定的namespace
[root@master ~]# kubectl delete ns dev

3. 命令式对象配置:命令式对象配置就是使用命令配合文件一起来操作kubernetes资源"

1>. 创建一个nginxpod.yml,内容如下:

yaml 复制代码
apiVersion: v1
kind: Namespace
metadata:
  name: dev
 
 
---  ## 表示如果需要将多段yaml配置放在一个文件中,中间需要使用"---"分隔
 
 
apiVersion: v1
kind: Pod
metadata:
  name: nginxpod
  namespace: dev
spec:
  containers:
    - name: nginx-containers
      image: nginx:1.14-alpine

注意:如果yaml文件中要操作namspace就可以使用以下命令来查看帮助:

bash 复制代码
[root@master ~]# kubectl explain ns  ## 查看namespace的帮助
 
[root@master ~]# kubectl explain ns.apiVersion  ## 查看namespace版本的帮助
 
[root@master ~]# kubectl explain ns.kind  ## 查看namespace类型的帮助
 
[root@master ~]# kubectl explain ns.metadata  ## 查看namespace元数据的帮助

注意:如果yaml文件中要操作pod就可以使用以下命令来查看帮助:

bash 复制代码
[root@master ~]# kubectl explain pod  ## 查看操作pod的帮助
 
[root@master ~]# kubectl explain pod.apiVersion  ## 查看pod版本的帮助
 
[root@master ~]# kubectl explain pod.kind  ## 查看pod类型的帮助
 
[root@master ~]# kubectl explain pod.metadata  ## 查看pod元数据的帮助
 
[root@master ~]# kubectl explain pod.spec  ## 查看pod中的设置参数的帮助
 
[root@master ~]# kubectl explain pod.spec.containers  ## 查看pod中容器的帮助

2>. 指定create命令,创建资源:

bash 复制代码
[root@master ~]# kubectl create -f nginxpod.yml
 
## 查看namespace:
[root@master ~]# kubectl get ns
 
## 查看dev中的pod:
[root@master ~]# kubectl get pod -n dev
 
## 查看nginxpod.yml文件中配置的资源信息:
[root@master ~]# kubectl get -f nginxpod.yml
 
## 删除资源:
[root@master ~]# kubectl delete -f nginxpod.yml

总结:命令式对象配置的方式造作资源,可以简单地认为:命令+yaml配置文件(配置文件中是命令需要的各种参数)。

4. 声明式对象配置

声明式对象配置跟命令式对象配置很相似,但是他只有一个命令apply。

bash 复制代码
## 执行kubect1 apply -f yaml来创建资源
[root@master ~]# kubectl apply -f nginxpod.yml
 
## 再次执行后会发现资源没有发生改变

总结:声明式对象配置就是使用apply描述一个资源最终的状态(在yaml中定义状态)使用apply操作资源

  • 如果资源不存在,就创建,相当于kubectl create

  • 如果资源已存在,就更新,相当于kubectl patch

5. 三种方式的适用场景:

  • 创建/更新资源:使用声明式对象配置 kubectl apply -f xxx.yaml。

  • 删除资源:使用命令式对象配置 kubectl delete -f xxx.yaml。

  • 查询资源:使用命令式对象管理 kubectl get(describe) 资源名称

参考

k8s-资源管理

相关推荐
€☞扫地僧☜€3 小时前
docker 拉取MySQL8.0镜像以及安装
运维·数据库·docker·容器
全能全知者4 小时前
docker快速安装与配置mongoDB
mongodb·docker·容器
为什么这亚子6 小时前
九、Go语言快速入门之map
运维·开发语言·后端·算法·云原生·golang·云计算
ZHOU西口7 小时前
微服务实战系列之玩转Docker(十八)
分布式·docker·云原生·架构·数据安全·etcd·rbac
牛角上的男孩8 小时前
Istio Gateway发布服务
云原生·gateway·istio
JuiceFS9 小时前
好未来:多云环境下基于 JuiceFS 建设低运维模型仓库
运维·云原生
景天科技苑10 小时前
【云原生开发】K8S多集群资源管理平台架构设计
云原生·容器·kubernetes·k8s·云原生开发·k8s管理系统
wclass-zhengge11 小时前
K8S篇(基本介绍)
云原生·容器·kubernetes
颜淡慕潇11 小时前
【K8S问题系列 |1 】Kubernetes 中 NodePort 类型的 Service 无法访问【已解决】
后端·云原生·容器·kubernetes·问题解决
川石课堂软件测试13 小时前
性能测试|docker容器下搭建JMeter+Grafana+Influxdb监控可视化平台
运维·javascript·深度学习·jmeter·docker·容器·grafana