热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

3.KubernetesYAML资源编排

使用YAML用于K8s的定义带来的好处包括:便捷性:不必添加大量的参数到命令行中执行命令可维护性:YAML文件可以通过源头控制,跟踪每次操作灵活性:YAML可以创建比命令行更加复杂

使用YAML用于K8s的定义带来的好处包括:

  • 便捷性:不必添加大量的参数到命令行中执行命令
  • 可维护性:YAML文件可以通过源头控制,跟踪每次操作
  • 灵活性:YAML可以创建比命令行更加复杂的结构

语法格式

空格、缩进表示层级关系;不支持tab缩进,开头缩进2个空格

字符串后缩进1个空格,如冒号、逗号

字符后缩进1个空格,如冒号、逗号

“---”表示YAML格式,一个文件的开始

“#”注释

在Kubernetes中,两种结构类型:

  • Lists
  • Maps

YAML Maps

Map顾名思义指的是字典,即一个Key:Value 的键值对信息。例如

---
apiVersion: v1
kind: Pod

---可选的分隔符 ,当需要在一个文件中定义多个结构的时候需要使用。上述内容表示有两个键apiVersion和kind,分别对应的值为v1和Pod。

YAML Lists

List即列表,说白了就是数组,例如

args
 -beijing
 -shanghai
 -shenzhen
 -guangzhou

YAML内容

在K8S部署一个应用的YAML内容大致分为两部分:

3.Kubernetes YAML资源编排

控制器定义:定义控制器属性

被控制对象:Pod模板,定义容器属性

字段意义

#可以通过explain查看更详细的帮助文档获得
kubectl explain pods.spec.containers
一级字段 字段含义
apiVersion API版本
kind 资源类型
metadata 资源元数据
spec 定义目标状态
status 当前状态

apiVersion

这个版本号需要根据安装的Kubernetes版本和资源类型进行变化。

# 查看kubernetes(1.16)支持api类型
# kubectl api-versions
admissionregistration.k8s.io/v1
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
apps/v1
authentication.k8s.io/v1
authentication.k8s.io/v1beta1
authorization.k8s.io/v1
authorization.k8s.io/v1beta1
autoscaling/v1
autoscaling/v2beta1
autoscaling/v2beta2
batch/v1
batch/v1beta1
certificates.k8s.io/v1beta1
coordination.k8s.io/v1
coordination.k8s.io/v1beta1
events.k8s.io/v1beta1
extensions/v1beta1
networking.k8s.io/v1
networking.k8s.io/v1beta1
node.k8s.io/v1beta1
policy/v1beta1
rbac.authorization.k8s.io/v1
rbac.authorization.k8s.io/v1beta1
scheduling.k8s.io/v1
scheduling.k8s.io/v1beta1
storage.k8s.io/v1
storage.k8s.io/v1beta1
v1

kind

kind:根据实际情况,此处资源类型可以是Pod、Deployment、Job、Ingress、Service等

#查询可使用kind类型
kubectl api-resources
NAME                              SHORTNAMES   APIGROUP                       NAMESPACED KIND
bindings                                                                      true       Binding
componentstatuses                 cs                                          false        ComponentStatus
configmaps                        cm                                          true       ConfigMap
endpoints                         ep                                          true       Endpoints
events                            ev                                          true       
......

metadata

包含Pod的一些meta信息,例如

二级字段 字段含义
name 资源名称
namespace 名称空间
labels 标签
annotations 注释
selfLink 资源引用路径(/api/$GROUP/$VERSION/$namespaces/$NAMESPACE/$TYPE/$NAME)

spec

由用户定义目标状态、即期望状态,包括一些container,storage,volume以及其他Kubernetes需要的参数,以及诸如是否在容器失败时重新启动容器的属性。可在特定Kubernetes API找到完整的Kubernetes Pod的属性。

status

status字段来记录对象在系统上的当前状态,因此status字段仅对活动对象才有意义,用户不能手动定义,由Kubernetes集群维护。与spec不符时,无限向spec定义字段靠近

编写YAML技巧

#用run命令生成部署模板
kubectl create deployment nginx --image=nginx:1.14 -o yaml --dry-run> my-deploy.yaml 
#用get命令将已有部署的应用yaml导出
kubectl get my-deploy/nginx -o=yaml --export  > my-deploy.yaml

YAML创建过程

1、编写

# vim pod-test.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-number 			#而且这个位置的名字好像不支持大写字母
  namespace: default
  labels:					#这个位置可以使用{key:value,key:value.....}kv之间逗号隔开
    app: myweb				#注意这个位置的名字和下面创建image的时候的名字一致
    tier: Not outside
spec:
  containers:
  - name: myweb
  image: ikubernetes/myapp:v1
  - name: busybox			#如果有多个容器,还可以多定义几个
  image: busybox:latest 	#因为busybox默认是启动的sh命令,我们可以给shell命令传递些参数。
  command: (["/bin/sh","-c","sleep 20"]) 传递的参数可以使用[]来写,也可以用下面的形式来定义)
  - "/bin/sh"
  - "-c"
  - "sleep 3600"
  

2、创建

kubectl create -f pod-test.yaml
kubectl get pods
NAME         READY   STATUS             RESTARTS   AGE
pod-web       1/1     Running            0         88s
pod-number    2/2     Running            0         5m59s

3、查看

kubectl describe pods pod-number

4、查询日志

kubectl logs pod-number busybox

5、进入pod操作

kubectl exec --help  可以使用exec命令来操作命令行格式
Usage:
  kubectl exec POD [-c CONTAINER] -- COMMAND [args...] [options]
#注意command前面的--是固定格式
kubectl exec -it pod-number -c myweb -- /bin/sh 
/ #

6、删除pod

kubectl delete -f pod-test.yaml

详细示例(Pod):

apiVersion: v1       			#必选API版本号,例如v1
kind: Pod       				#必选类型,(Pod、deployment、service)
metadata:       				#必选元数据类型
  name: string       			#必选,Pod名称
  namespace: string    			#必选,Pod所属的命名空间
  labels:      					#自定义标签
    - name: string     			#自定义标签名字
  annotations:       			#自定义注释列表
    - name: string
spec:         					#必选,Pod中容器的详细定义
  containers:      				#必选,Pod中容器列表
  - name: string     			#必选,容器名称
    image: string    			#必选,容器的镜像名称
    imagePullPolicy: [Always | Never | IfNotPresent] 		#获取镜像的策略 Alawys表示下载镜像 IfnotPresent表示优先使用本地镜像,否则下载镜像,Nerver表示仅使用本地镜像
    command: [string]    		#容器的启动命令列表,如不指定,使用打包时使用的启动命令
    args: [string]     			#容器的启动命令参数列表
    workingDir: string     		#容器的工作目录
    volumeMounts:    			#挂载到容器内部的存储卷配置
    - name: string     			#引用pod定义的共享存储卷的名称,需用volumes[]部分定义的的卷名
      mountPath: string    		#存储卷在容器内mount的绝对路径,应少于512字符
      readOnly: boolean    		#是否为只读模式
    ports:       				#需要暴露的端口库号列表
    - name: string     			#端口号名称
      containerPort: int   		#容器需要监听的端口号
      hostPort: int    			#容器所在主机需要监听的端口号,默认与Container相同
      protocol: string     		#端口协议,支持TCP和UDP,默认TCP
    env:       					#容器运行前需设置的环境变量列表
    - name: string     			#环境变量名称
      value: string    			#环境变量的值
    resources:       			#资源限制和请求的设置
      limits:      				#资源限制的设置
        cpu: string    			#Cpu的限制,单位为core数,将用于docker run --cpu-shares参数
        memory: string     		#内存限制,单位可以为Mib/Gib,将用于docker run --memory参数
      requests:      			#资源请求的设置
        cpu: string    			#Cpu请求,容器启动的初始可用数量
        memory: string     		#内存清楚,容器启动的初始可用数量
    livenessProbe:     			#对Pod内个容器健康检查的设置,当探测无响应几次后将自动重启该容器,检查方法有exec、httpGet和tcpSocket,对一个容器只需设置其中一种方法即可
      exec:      				#对Pod容器内检查方式设置为exec方式
        command: [string]  		#exec方式需要制定的命令或脚本
      httpGet:       			#对Pod内个容器健康检查方法设置为HttpGet,需要制定Path、port
        path: string
        port: number
        host: string
        scheme: string
        HttpHeaders:
        - name: string
          value: string
      tcpSocket:     			#对Pod内个容器健康检查方式设置为tcpSocket方式
         port: number
       initialDelaySeconds: 0  	#容器启动完成后首次探测的时间,单位为秒
       timeoutSeconds: 0   		#对容器健康检查探测等待响应的超时时间,单位秒,默认1秒
       periodSeconds: 0    		#对容器监控检查的定期探测时间设置,单位秒,默认10秒一次
       successThreshold: 0
       failureThreshold: 0
       securityContext:
         privileged:false
    restartPolicy: [Always | Never | OnFailure]			#Pod的重启策略,Always表示一旦不管以何种方式终止运行,kubelet都将重启,OnFailure表示只有Pod以非0退出码退出才重启,Nerver表示不再重启该Pod
    nodeSelector: obeject  #设置NodeSelector表示将该Pod调度到包含这个label的node上,以key:value的格式指定
    imagePullSecrets:    		#Pull镜像时使用的secret名称,以key:secretkey格式指定
    - name: string
    hostNetwork:false      		#是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络
    volumes:       				#在该pod上定义共享存储卷列表
    - name: string     			#共享存储卷名称 (volumes类型有很多种)
      emptyDir: {}     			#类型为emtyDir的存储卷,与Pod同生命周期的一个临时目录。为空值
      hostPath: string     		#类型为hostPath的存储卷,表示挂载Pod所在宿主机的目录
        path: string     		#Pod所在宿主机的目录,将被用于同期中mount的目录
      secret:      				#类型为secret的存储卷,挂载集群与定义的secre对象到容器内部
        scretname: string  
        items:     
        - key: string
          path: string
      configMap:     			#类型为configMap的存储卷,挂载预定义的configMap对象到容器内部
        name: string
        items:
        - key: string

推荐阅读
  • Flutter 高德地图插件使用指南
    本文档详细介绍了如何在Flutter项目中集成和使用高德地图插件,包括安装、配置及基本使用方法。 ... [详细]
  • Kubernetes 持久化存储与数据卷详解
    本文深入探讨 Kubernetes 中持久化存储的使用场景、PV/PVC/StorageClass 的基本操作及其实现原理,旨在帮助读者理解如何高效管理容器化应用的数据持久化需求。 ... [详细]
  • 优化局域网SSH连接延迟问题的解决方案
    本文介绍了解决局域网内SSH连接到服务器时出现长时间等待问题的方法。通过调整配置和优化网络设置,可以显著缩短SSH连接的时间。 ... [详细]
  • 本文详细介绍了如何在Kubernetes集群中调整etcd、apiserver、controller-manager、scheduler等核心组件以及kube-proxy和coredns的时区设置方法。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 使用Python在SAE上开发新浪微博应用的初步探索
    最近重新审视了新浪云平台(SAE)提供的服务,发现其已支持Python开发。本文将详细介绍如何利用Django框架构建一个简单的新浪微博应用,并分享开发过程中的关键步骤。 ... [详细]
  • 本文详细介绍了中央电视台电影频道的节目预告,并通过专业工具分析了其加载方式,确保用户能够获取最准确的电视节目信息。 ... [详细]
  • 本文详细介绍了MicroATX(也称Mini ATX)和MATX主板规格,探讨了它们的结构特点、应用场景及对电脑系统成本和性能的影响。同时,文章还涵盖了相关操作系统的实用技巧,如蓝牙设备图标删除、磁盘管理等。 ... [详细]
  • 使用GDI的一些AIP函数我们可以轻易的绘制出简 ... [详细]
  • 微软Exchange服务器遭遇2022年版“千年虫”漏洞
    微软Exchange服务器在新年伊始遭遇了一个类似于‘千年虫’的日期处理漏洞,导致邮件传输受阻。该问题主要影响配置了FIP-FS恶意软件引擎的Exchange 2016和2019版本。 ... [详细]
  • 本文详细介绍了Java中的输入输出(IO)流,包括其基本概念、分类及应用。IO流是用于在程序和外部资源之间传输数据的一套API。根据数据流动的方向,可以分为输入流(从外部流向程序)和输出流(从程序流向外部)。此外,还涵盖了字节流和字符流的区别及其具体实现。 ... [详细]
  • 本文详细介绍了如何准备和安装 Eclipse 开发环境及其相关插件,包括 JDK、Tomcat、Struts 等组件的安装步骤及配置方法。 ... [详细]
  • ServiceStack与Swagger的无缝集成指南
    本文详细介绍了如何在ServiceStack项目中集成Swagger,以实现API文档的自动生成和在线测试。通过本指南,您将了解从配置到部署的完整流程,并掌握如何优化API接口的开发和维护。 ... [详细]
  • 本文详细介绍了 MySQL 的查询处理流程,包括从客户端连接到服务器、查询缓存检查、语句解析、查询优化及执行等步骤。同时,深入探讨了 MySQL 中的乐观锁机制及其在并发控制中的应用。 ... [详细]
  • Ralph的Kubernetes进阶之旅:集群架构与对象解析
    本文深入探讨了Kubernetes集群的架构和核心对象,详细介绍了Pod、Service、Volume等基本组件,以及更高层次的抽象如Deployment、StatefulSet等,帮助读者全面理解Kubernetes的工作原理。 ... [详细]
author-avatar
-VIVEN-
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有