Kubernetes 资源管理-声明式

yaml和json介绍

yuml语言介绍

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

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

大小写敏感
使用缩进标识层级关系
缩进不允许使用tab,只允许空格(低版本限制)
缩进的空格数不重要,只要相同层级的元素左对齐即可
“ # ”表示注释


YAML支持一下几种数据类型

纯量: 单个的,不可再分的值

对象: 键值对的集合,又称为映射(mapping)/哈希(bash)/字典(dictionary)

数组: 一组按次序排列的值,又称为序列(sequence)/ 列表(list)

注意点:

书写yaml切记 【 : 】和【-】后面要加空格

如果要将多段yaml配置放在一个文件中,中间要使用—分隔

yaml转json格式网站:[https://www.json2yaml.com/convert-yaml-to-json]

k8s支持的文件格式

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

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

yaml和json的主要区别

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

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

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

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

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

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

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

声明式对象管理

命令式对象配置

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

写一个yaml文件demo

mkdir /opt/demo
cd demo/

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		#定义容器的对外的端口
#创建资源对象
kubectl create -f nginx-deployment.yaml

#查看创建的pod资源
kubectl get pods -o wide
#创建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

#创建资源对象
kubectl create -f nginx-service.yaml 
#查看创建的service
kubectl get svc
NAME            TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
kubernetes      ClusterIP   10.0.0.1     <none>        443/TCP        16d
nginx-service   NodePort    10.0.0.119   <none>        80:35680/TCP   14s

#在浏览器输入 nodeIP:nodePort 即可访问
http://20.0.0.110:35680
http://20.0.0.120:35680

详解k8s中的port:

port
port 是 k8s 集群内部访问service的端口,即通过 clusterIP: port 可以从 Pod 所在的 Node 上访问到 service

nodePort
nodePort 是外部访问 k8s 集群中 service 的端口,通过 nodeIP: nodePort 可以从外部访问到某个 service。

targetPort
targetPort 是 Pod 的端口,从 port 或 nodePort 来的流量经过 kube-proxy 反向代理负载均衡转发到后端 Pod 的 targetPort 上,最后进入容器。

containerPort
containerPort 是 Pod 内部容器的端口,targetPort 映射到 containerPort。
#kubectl run --dry-run=client 打印相应的 API 对象而不执行创建
kubectl run nginx-test --image=nginx --port=80 --dry-run=client
kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client

#查看生成yaml格式
kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o yaml
kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o yaml

#查看生成json格式
kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o json
kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o json

#使用yaml格式导出生成模板,并进行修改以及删除一些不必要的参数
kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o yaml > nginx-test.yaml
kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o yaml  > nginx-deploy.yaml

vim nginx-test.yaml
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null     #删除
  labels:
    run: nginx-test
  name: nginx-test
spec:
  containers:
  - image: nginx
    name: nginx-test
    ports:
    - containerPort: 80
    resources: {}             #删除
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}                    #删除
#将现有的资源生成模板导出
kubectl get svc nginx-service -o yaml

#保存到文件中
kubectl get svc nginx-service -o yaml > my-svc.yaml

#查看字段帮助信息,可一层层的查看相关资源对象的帮助信息
kubectl explain deployments.spec.template.spec.containers
或
kubectl explain pods.spec.containers

写yaml太累怎么办?

#用 --dry-run 命令生成
kubectl run my-deploy --image=nginx --dry-run=client -o yaml > my-deploy.yaml

#用get命令导出
kubectl get svc nginx-service -o yaml > my-svc.yaml
或
kubectl edit svc nginx-service  #复制配置,再粘贴到新文件

#yaml文件的学习方法:
(1)多看别人(官方)写的,能读懂
(2)能照着现场的文件改着用
(3)遇到不懂的,善用kubectl explain ... 命令查

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kubernetes是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明配置和自动化。它具有以下特点和特性: 1. 便携性:Kubernetes支持公有云、私有云和混合云环境,可以在不同的云平台上运行。 2. 可扩展性:Kubernetes是基于插件和模块的,因此具有良好的可扩展性,可以根据需要添加新的功能和扩展。 3. 自动化:Kubernetes可以实现容器的自动部署、复制和管理,包括弹性缩放和扩展等功能。 4. 自动装箱:Kubernetes可以自动将容器分配到主机上运行,根据主机负载情况进行资源管理和调度。 5. 自动修复:当运行Kubernetes的主机宕机时,Kubernetes会在其他主机上重新创建该主机上的所有容器,以保证业务的连续性。 6. 水平扩展:Kubernetes支持根据资源负载率进行水平扩展,可以通过简单的命令进行扩展。 7. 服务器发现:Kubernetes通过KubeDNS实现了服务发现功能,可以方便地进行服务间的通信和调用。 8. 负载均衡:Kubernetes可以通过iptables和ipvs等方实现负载均衡,确保请求能够平均分配到不同的容器上。 9. 自动发布和回滚:Kubernetes支持灰度更新应用程序,可以逐步更新系统中的应用,防止出现BUG影响整个集群,并且可以快速回滚到原来的系统。 10. 密钥配置管理:Kubernetes允许存储和管理敏感信息,如OAuth令牌和SSH密钥,可以安全地部署和更新密码和应用程序配置。 11. 存储管理:Kubernetes支持多种存储系统,包括节点本地存储、云服务商的云存储和网络存储等。 12. 批量处理执行:除了服务型应用,Kubernetes还支持批处理作业和持续集成(CI)等场景。 总之,Kubernetes是一个功能强大的容器管理平台,可以帮助用户简化容器化应用的部署、管理和扩展。\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [Kubernetes详解(一)——Kubernetes基本知识](https://blog.csdn.net/weixin_40228200/article/details/124226071)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Kubernetes 介绍](https://blog.csdn.net/GaLiCHaoFan1/article/details/127678109)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值