【k8s】5、资源管理命令-声明式

目录

[一、 yaml和json介绍](#一、 yaml和json介绍)

1、yuml语言介绍

2、k8s支持的文件格式

3、yaml和json的主要区别

二、声明式对象管理

1、命令式对象配置

2、声明式对象配置

3、声明式对象管理命令介绍

三、编写资源配置清单

[1、 编写yaml文件](#1、 编写yaml文件)

[2、 启动并查看资源](#2、 启动并查看资源)

3、创建service服务对外提供访问测试

4、创建并访问

四、试运行与格式

1、-dry-run:试运行

2、查看生成yaml格式

3、查看生成的json格式

4、使用yaml格式导出生成的模板

5、使用yaml模板创建实例

6、将现有资源生成yaml模板导出并保存为文件

7、查看字段帮助信息

[五、 资源控制总结](#五、 资源控制总结)

一、 yaml和json介绍

1、yuml语言介绍

YAML是一个类似XML、JSON的标记性语言,它强调以数据为中心,并不是以标识语言为重点,而YAML本身的定义比较简单。号称"一种人性化的数据格式语言"。

YAML的语法比较简单,主要有下面几个

大小写敏感

使用缩进标识层级关系

缩进不允许使用tab,只允许空格(低版本限制)

缩进的空格数不重要,只要相同层级的元素左对齐即可

" # "表示注释

YAML支持一下几种数据类型

纯量 : 单个的,不可再分的值
对象 : 键值对的集合,又称为映射(mapping)/哈希(bash)/字典(dictionary)
数组 : 一组按次序排列的值,又称为序列(sequence)/ 列表(list)

复制代码
#纯量: 就是指的一个简单的值,(字符串、布尔值、证书、浮点数、Null、时间、日期)
1、布尔类型
y1:true(false)

2、整型
y2:123

3、浮点型
y3:3.14

4、null类型
y4:~  (使用~或不写,可以表示为null)

5、日期类型
y5: 2018-02-17    # 日期必须使用ISO 8601格式,即yyyy-MM-dd

6、时间类型
c6: 2018-02-17T15:02:31+08:00  # 时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区

7、字符串类型
c7: heima     # 简单写法,直接写值 , 如果字符串中间有特殊字符,必须使用双引号或者单引号包裹 
c8: line1
    line2     # 字符串过多的情况可以拆成多行,每一行会被转化成一个空格

#对象
//形式一
yudeqiang:
  age: 25
  address: nanjing
  
//形式二(了解)
yudeqiang: {age: 15,address: nanjing}

#数组
//形式一
address:
  - nanjing
  - beijing

//形式二(了解)
address: [nanjing,beijing]

注意点:

2、k8s支持的文件格式

kubernetes支持YAML和JSON文件格式管理资源对象。

  • JSON格式:只要勇于api接口之间消息的传输。
  • YAML格式:勇于配置和管理,TAML是一中简介的非标记性语言,内容格式人性化,较易读。

3、yaml和json的主要区别

YAML使用空格缩进,这是Python开发人员熟悉的领域。

javaScript开发人员喜欢JSON,因为它是Java Script的一个子集,可以直接在JavaScript中解释和编写,同时使用简写方式申明JSON,在使用没有空格的典型变量名时,不需要键中的双引号。

有很多解释器在YAML和JSON的左右语言中都能很好的工作。

在需要请款下,YAML的空白格式可以更扩容器查看,因为将诶格式化需要更人性化的方法。

如果您的编辑器中没有空格可见或缩进线指示符,那么YAML 的空白虽然更紧凑,更容易查看,但可能难以手动编辑。

JSON 的序列化和反序列化要快得多,因为要检查的功能明显少于 YAML,这使得更小更轻的代码能够处理 JSON。

一个常见的误解是 YAML 需要较少的标点符号并且比 JSON更紧凑,但这完全是错误的。空格是不可见的,所以看起来字符较少,但是如果你计算实际的空格是必要的,以便正确解释 YAML以及正确的缩进,你会发现 YAML 实际上需要比 JSON 更多的字符。JSON不使用空格来表示层次结构或分组,并且可以通过删除不必要的空格来轻松展平,以实现更紧凑的传输。

二、声明式对象管理

1、命令式对象配置

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

①创建一个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

②创建资源、查看、删除等操作

复制代码
kubectl create -f nginxpod.yaml
#基于yaml创建一个资源

kubectl get -f nginxpod.yaml
#基于yaml文件查看

kubectl delete -f nginxpod.yaml
#基于yaml文件删除资源

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

2、声明式对象配置

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

复制代码
//还是基于前面的nginxpod.yaml文件演示

kubectl apply -f nginxpod.yaml
#创建资源

kubectl apply -f nginxpod.yaml
#再执行一次操作,看返回什么信息

####此时修改nginxpod.yaml文件的nginx的版本号,然后再执行

kubectl apply -f nginxpod.yaml
#再次查看返回结果

kubectl describe pods pod -n dev
#查看详细过程

node01节点查看

#总结

//其实申明对象配置就是使用apply描述一个资源最终的状态(在yaml中定义)

使用apply操作资源

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

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

3、声明式对象管理命令介绍

复制代码
kubectl get deployment/nginx  -o yaml
#查看pod控制器中的nginx格式,(就是以yaml的格式显示出来)

kubectl get svc nginx-service -o yaml
#查看service中的nginx格式

kubectl explain deployment
#显示deployment的相关规格

kubectl explain deployment.metadata
#解释显示deployment的更详细的元数据(metadata)参数信息,

三、编写资源配置清单

1、 编写yaml文件

复制代码
vim nginx-deployment.yaml
apiVersion: apps/v1		#指定api版本标签
kind: Deployment		#定义资源的类型/角色,deployment为副本控制器,此处资源类型可以是Deployment、Job、Ingress、Service等
metadata:					#定义资源的元数据信息,比如资源的名称、namespace、标签等信息
  name: nginx-deployment	#定义资源的名称,在同一个namespace空间中必须是唯一的
  labels:				#定义Deployment资源标签
    app: nginx	
spec:					#定义deployment资源需要的参数属性,诸如是否在容器失败时重新启动容器的属性
  replicas: 3			#定义副本数量
  selector:				#定义标签选择器
    matchLabels:		#定义匹配标签
      app: nginx		#需与 .spec.template.metadata.labels 定义的标签保持一致
  template:				#定义业务模板,如果有多个副本,所有副本的属性会按照模板的相关配置进行匹配
    metadata:
      labels:           #定义Pod副本将使用的标签,需与 .spec.selector.matchLabels 定义的标签保持一致
        app: nginx
    spec:
      containers:				#定义容器属性
      - name: nginx				#定义一个容器名,一个 - name: 定义一个容器
        image: nginx:1.15.4		#定义容器使用的镜像以及版本
        ports:
        - containerPort: 80		#定义容器的对外的端口
        
---------------------------------------------------------------
vim nginx-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
         app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.15.4
        ports:
        - containerPort: 80

2、 启动并查看资源

复制代码
kubectl apply -f nginx-deployment.yaml

kubectl get deployment

kubectl get pods

3、创建service服务对外提供访问测试

复制代码
vim nginx-service.yaml

apiVersion: v1  
kind: Service  
metadata:
  name: nginx-service
  labels:
    app: nginx  
spec:
  type: NodePort  
  ports:
  - port: 80
    targetPort: 80  
  selector:
    app: nginx

4、创建并访问

复制代码
kubectl create -f nginx-service.yaml

kubectl get svc

//网页访问
http:20.0.55:31603

四、试运行与格式

1、-dry-run:试运行

  • --dry-run: 表示试运行,不真正执行命名(用来测试命令是否正确),即并不会真的创建出pod和deployment实例,去掉该参数后即可真正执行命令。

    kubectl create deployment dryrun-test --image=nginx --port=80 replicas=3 --dry-run
    #打印相应的API对象而不执行创建

2、查看生成yaml格式

  • 使用--dry-run试运行可不触发生成命令,然后通过 -o yaml 可实现对其 yaml 资源配置清单的查看

    kubectl run dryrun-test --image=nginx --port=80 --dry-run -o yaml
    #试运行一个pod,并将它的yaml配置格式显示出来

3、查看生成的json格式

  • 可通过-o json 查看该命令产生的json配置清单

    kubectl create deployment dryrun-test --image=nginx --port=80 --replicas=3 --dry-run -o json
    #试运行一个pod控制器,并显示的pod的配置信息

4、使用yaml格式导出生成的模板

复制代码
kubectl create deployment dryrun-test --image=nginx --port=80 --replicas=3 --dry-run -o yaml > dryrun-test.yaml
#试运行pod控制器,并以yaml格式显示出来,将结构追加到指定的yaml文件中

5、使用yaml模板创建实例

复制代码
kubectl apply -f dryrun-test.yaml

kubectl get pods,deployment

6、将现有资源生成yaml模板导出并保存为文件

复制代码
kubectl get deployment dryrun-test -o yaml > export-test.yaml

7、查看字段帮助信息

explain 可一层层的查看相关资源对象的帮助信息

复制代码
kubectl explain deployments.spec.template.spec.containers

五、 资源控制总结

三种方式应该怎么用?

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

删除资源,使用命令式配置: kubectl delete -f xxxx.yaml

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

复制代码
#kubectl可以在node节点上运行吗?

//kubectl的运行时需要配置的,它的配置文件时$HOME/.kube,如果想要在node节点运行次命令,需要将master上的.kube目录复制到node节点上。
相关推荐
chuanauc5 小时前
Kubernets K8s 学习
java·学习·kubernetes
小张是铁粉5 小时前
docker学习二天之镜像操作与容器操作
学习·docker·容器
烟雨书信5 小时前
Docker文件操作、数据卷、挂载
运维·docker·容器
IT成长日记5 小时前
【Docker基础】Docker数据卷管理:docker volume prune及其参数详解
运维·docker·容器·volume·prune
这儿有一堆花5 小时前
Docker编译环境搭建与开发实战指南
运维·docker·容器
LuckyLay5 小时前
Compose 高级用法详解——AI教你学Docker
运维·docker·容器
Uluoyu6 小时前
redisSearch docker安装
运维·redis·docker·容器
IT成长日记10 小时前
【Docker基础】Docker数据持久化与卷(Volume)介绍
运维·docker·容器·数据持久化·volume·
疯子的模样14 小时前
Docker 安装 Neo4j 保姆级教程
docker·容器·neo4j
虚伪的空想家15 小时前
rook-ceph配置dashboard代理无法访问
ceph·云原生·k8s·存储·rook