k8s学习之路 | Day9 初识声明式 API

之前总听说什么声明式 API ,一直不知道是什么玩意,但是 k8s 有一个核心,赖以生存的一个东西,就是这个【声明式API】

  • 先了解一下声明式 API
  • 以后咱的操作都要靠这个东西,绝大时候就不会通过命令去部署什么了

命令式 API

所谓命令式 API,意思就是说系统只会傻瓜式的完成我所输入的命令操作,最终的执行结果取决于我这个命令是否正确;命令式 API 需要我们去想怎么做,然后才能将怎么做的过程给到系统,系统就按照我们自己的思路来实现。

  • 就比如说,我要在k8s环境中直接起一个pod,k8s 就按照我输入的命令完成动作,我命令输错了也就不会去执行了
kubectl run pod my-nginx --image=nginx

image-20230215151927864

  • 像在 bash终端执行命令那样,就是命令式API

image-20230215152125207

声明式 API

告诉系统我想要什么东西,系统自己去想怎么做

声明式 API,可以让我们关注于应用本身,而非系统执行细节,这种方式可以大大简化应用的配置管理复杂度

  • 按照我们之间的经验,我们在 k8s 中创建一次部署,应该是这样的
    • 命令行的操作
kubectl create deployment my-nginx --image=nginx:1.21-alpine

image-20230215161111877

  • 命令行的方式要记得太多了,每一个功能都要记住一个命令,k8s 里面还提供一种配置文件的方式(对象描述文件)的方式来进行操作,用配置文件来固化操作,增加了移植性。

    • k8s 里面所有的资源都是可以使用yaml文件来指定的,我们只需要关注 yaml 文件内容,提交给 k8s ,由他自己去执行即可,

      kubectl apply -f test.yaml
      
    • k8s 里面可以操作的资源对象获取方式:kubectl api-resources

      image-20230215161701662

    • 初步体验一下 k8s 的声明式 API

      image-20230215162012965

      #准备一个yaml文件,内容如下
      apiVersion: apps/v1	#与k8s集群版本有关,使用 kubectl api-versions 即可查看当前集群支持的版本
      kind: Deployment	#该配置的类型,我们使用的是 Deployment
      metadata:	        #译名为元数据,即 Deployment 的一些基本属性和信息
        name: nginx-deployment	#Deployment 的名称
        labels:	    #标签,可以灵活定位一个或多个资源,其中key和value均可自定义,可以定义多组,目前不需要理解
          app: nginx	#为该Deployment设置key为app,value为nginx的标签
      spec:	        #这是关于该Deployment的描述,可以理解为你期待该Deployment在k8s中如何使用
        replicas: 1	#使用该Deployment创建一个应用程序实例(写多少启动多少)
        selector:	    #标签选择器,与上面的标签共同作用,目前不需要理解
          matchLabels: #选择包含标签app:nginx的资源
            app: nginx
        template:	    #这是选择或创建的Pod的模板
          metadata:	#Pod的元数据
            labels:	#Pod的标签,上面的selector即选择包含标签app:nginx的Pod
              app: nginx
          spec:	    #期望Pod实现的功能(即在pod中部署)
            containers:	#生成container,与docker中的container是同一种
            - name: nginx	#container的名称
              image: nginx	#使用镜像nginx创建container,该container默认80端口可访问
      
    • 也可以通过 yaml 配置文件直接删除

      kubectl delete -f deploy.yaml
      

      image-20230215162330527

命令式和声明式的区别

有个比较形象的比喻,我觉得挺有意思的

我们有一个炒菜机,

如果炒菜机提供的接口是放油、放调料、放食材、大火、小火等操作,那就是命令式API

如果炒菜机提供的接口是来盘宫保鸡丁、来盘鱼香肉丝之类的,那就是声明式API了

声明式API比较典型的例子就是数据库提供的SQL接口,只需要告诉数据库你需要什么数据即可,至于怎么去获取这些数据,数据库自己会去按步骤操作
比喻出自:https://www.cnblogs.com/hnxxcxg/p/16366324.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值