首页 > 其他分享 >Kubernetes-yaml详解

Kubernetes-yaml详解

时间:2023-02-20 16:44:33浏览次数:24  
标签:name Kubernetes nginx -- yaml 详解 Pod string

目录: Yaml语法格式 查看api资源版本标签 deployment模板 service模板 查询帮助和格式指令 Pod模板 写 yaml太累怎么办 yaml文件的学习 方法 deployment.yaml文件详解 Service yaml文件详解 Pod yaml文件详解

Kubernetes-yaml详解

Kubernetes 支持 YAML 和 JSON 格式管理资源对象 JSON 格式:主要用于 api 接口之间消息的传递 YAML 格式:用于配置和管理,YAML 是一种简洁的非标记性语言,内容格式人性化,较易读  

YAML 语法格式:

●大小写敏感 ●使用缩进表示层级关系 ●不支持Tab键制表符缩进,只使用空格缩进 ●缩进的空格数目不重要,只要相同层级的元素左侧对齐即可,通常开头缩进两个空格 ●符号字符后缩进一个空格,如冒号,逗号,短横杆(-)等 ●“---”表示YAML格式,一个文件的开始,用于分隔文件间 ●“#”表示注释  

查看 api 资源版本标签

 1 kubectl api-versions
 2 admissionregistration.k8s.io/v1beta1
 3 apiextensions.k8s.io/v1beta1
 4 apiregistration.k8s.io/v1
 5 apiregistration.k8s.io/v1beta1
 6 apps/v1                                #如果是业务场景一般首选使用 apps/v1
 7 apps/v1beta1                        #带有beta字样的代表的是测试版本,不用在生产环境中
 8 apps/v1beta2
 9 authentication.k8s.io/v1
10 authentication.k8s.io/v1beta1
11 authorization.k8s.io/v1
12 authorization.k8s.io/v1beta1
13 autoscaling/v1
14 autoscaling/v2beta1
15 autoscaling/v2beta2
16 batch/v1
17 batch/v1beta1
18 certificates.k8s.io/v1beta1
19 coordination.k8s.io/v1beta1
20 events.k8s.io/v1beta1
21 extensions/v1beta1
22 networking.k8s.io/v1
23 policy/v1beta1
24 rbac.authorization.k8s.io/v1
25 rbac.authorization.k8s.io/v1beta1
26 scheduling.k8s.io/v1beta1
27 storage.k8s.io/v1
28 storage.k8s.io/v1beta1
29 v1

deployment模板

写一个yaml文件demo(deployment)
 1 mkdir /opt/demo
 2 cd demo/
 3 
 4 vim nginx-deployment.yaml
 5 apiVersion: apps/v1        #指定api版本标签
 6 kind: Deployment        #定义资源的类型/角色,deployment为副本控制器,此处资源类型可以是Deployment、Job、Ingress、Service等
 7 metadata:                    #定义资源的元数据信息,比如资源的名称、namespace、标签等信息
 8   name: nginx-deployment    #定义资源的名称,在同一个namespace空间中必须是唯一的
 9   labels:                #定义Deployment资源标签
10     app: nginx    
11 spec:                    #定义deployment资源需要的参数属性,诸如是否在容器失败时重新启动容器的属性
12   replicas: 3            #定义副本数量
13   selector:                #定义标签选择器
14     matchLabels:        #定义匹配标签
15       app: nginx        #需与 .spec.template.metadata.labels 定义的标签保持一致
16   template:                #定义业务模板,如果有多个副本,所有副本的属性会按照模板的相关配置进行匹配
17     metadata:
18       labels:           #定义Pod副本将使用的标签,需与 .spec.selector.matchLabels 定义的标签保持一致
19         app: nginx
20     spec:
21       containers:                #定义容器属性
22       - name: nginx                #定义一个容器名,一个 - name: 定义一个容器
23         image: nginx:1.15.4        #定义容器使用的镜像以及版本
24         ports:
25         - containerPort: 80        #定义容器的对外的端口
//创建资源对象
kubectl create -f nginx-deployment.yaml

//查看创建的pod资源

1 kubectl get pods -o wide
2 NAME                              READY   STATUS    RESTARTS   AGE    IP            NODE            NOMINATED NODE
3 nginx-deployment-d55b94fd-29qk2   1/1     Running   0          7m9s   172.17.36.4   192.168.80.12   <none>
4 nginx-deployment-d55b94fd-9j42r   1/1     Running   0          7m9s   172.17.36.3   192.168.80.12   <none>
5 nginx-deployment-d55b94fd-ksl6l   1/1     Running   0          7m9s   172.17.26.3   192.168.80.11   <none>

service模板

  创建service服务对外提供访问并测试
 1 vim nginx-service.yaml
 2 apiVersion: v1  
 3 kind: Service  
 4 metadata:
 5   name: nginx-service
 6   labels:
 7     app: nginx      
 8 spec:
 9   type: NodePort  
10   ports:
11   - port: 80
12     targetPort: 80  
13   selector:
14     app: nginx
//创建资源对象
kubectl create -f nginx-service.yaml 
//查看创建的service
1 kubectl get svc
2 NAME            TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
3 kubernetes      ClusterIP   10.0.0.1     <none>        443/TCP        16d
4 nginx-service   NodePort    10.0.0.119   <none>        80:35680/TCP   14s
//在浏览器输入 nodeIP:nodePort 即可访问 http://192.168.80.11:35680 http://192.168.80.12: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。

 查询帮助和格式指令

 1 //kubectl run --dry-run=client 打印相应的 API 对象而不执行创建
 2 kubectl run nginx-test --image=nginx --port=80 --dry-run=client
 3 kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client
 4 
 5 //查看生成yaml格式
 6 kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o yaml
 7 kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o yaml
 8 
 9 //查看生成json格式
10 kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o json
11 kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o json
12 
13 //使用yaml格式导出生成模板,并进行修改以及删除一些不必要的参数
14 kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o yaml > nginx-test.yaml
15 kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o yaml  > nginx-deploy.yaml

Pod模板

 1 vim nginx-test.yaml
 2 apiVersion: v1
 3 kind: Pod
 4 metadata:
 5   creationTimestamp: null     #删除
 6   labels:
 7     run: nginx-test
 8   name: nginx-test
 9 spec:
10   containers:
11   - image: nginx
12     name: nginx-test
13     ports:
14     - containerPort: 80
15     resources: {}             #删除
16   dnsPolicy: ClusterFirst
17   restartPolicy: Always
18 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 ... 命令查

deployment.yaml文件详解

  1 apiVersion: extensions/v1beta1   #接口版本
  2 kind: Deployment                 #接口类型
  3 metadata:
  4 name: cango-demo               #Deployment名称
  5 namespace: cango-prd           #命名空间
  6 labels:
  7 app: cango-demo              #标签
  8 spec:
  9 replicas: 3
 10 strategy:
 11 rollingUpdate:  ##由于replicas为3,则整个升级,pod个数在2-4个之间
 12 maxSurge: 1      #滚动升级时会先启动1个pod
 13 maxUnavailable: 1 #滚动升级时允许的最大Unavailable的pod个数
 14 template:
 15 metadata:
 16 labels:
 17 app: cango-demo  #模板名称必填
 18 sepc: #定义容器模板,该模板可以包含多个容器
 19 containers:
 20 - name: cango-demo                                                           #镜像名称
 21 image: swr.cn-east-2.myhuaweicloud.com/cango-prd/cango-demo:0.0.1-SNAPSHOT #镜像地址
 22 command: [ "/bin/sh","-c","cat /etc/config/path/to/special-key" ]    #启动命令
 23 args:                                                                #启动参数
 24 - '-storage.local.retention=$(STORAGE_RETENTION)'
 25 - '-storage.local.memory-chunks=$(STORAGE_MEMORY_CHUNKS)'
 26 - '-config.file=/etc/prometheus/prometheus.yml'
 27 - '-alertmanager.url=http://alertmanager:9093/alertmanager'
 28 - '-web.external-url=$(EXTERNAL_URL)'
 29 #如果command和args均没有写,那么用Docker默认的配置。
 30 #如果command写了,但args没有写,那么Docker默认的配置会被忽略而且仅仅执行.yaml文件的command(不带任何参数的)。
 31 #如果command没写,但args写了,那么Docker默认配置的ENTRYPOINT的命令行会被执行,但是调用的参数是.yaml中的args。
 32 #如果如果command和args都写了,那么Docker默认的配置被忽略,使用.yaml的配置。
 33 imagePullPolicy: IfNotPresent  #如果不存在则拉取
 34 livenessProbe:       #表示container是否处于live状态。如果LivenessProbe失败,LivenessProbe将会通知kubelet对应的container不健康了。随后kubelet将kill掉container,并根据RestarPolicy进行进一步的操作。默认情况下LivenessProbe在第一次检测之前初始化值为Success,如果container没有提供LivenessProbe,则也认为是Success;
 35 httpGet:
 36 path: /health #如果没有心跳检测接口就为/
 37 port: 8080
 38 scheme: HTTP
 39 initialDelaySeconds: 60 ##启动后延时多久开始运行检测
 40 timeoutSeconds: 5
 41 successThreshold: 1
 42 failureThreshold: 5
 43 readinessProbe:
 44 httpGet:
 45 path: /health #如果没有心跳检测接口就为/
 46 port: 8080
 47 scheme: HTTP
 48 initialDelaySeconds: 30 ##启动后延时多久开始运行检测
 49 timeoutSeconds: 5
 50 successThreshold: 1
 51 failureThreshold: 5
 52 resources:              ##CPU内存限制
 53 requests:
 54 cpu: 2
 55 memory: 2048Mi
 56 limits:
 57 cpu: 2
 58 memory: 2048Mi
 59 env:                    ##通过环境变量的方式,直接传递pod=自定义Linux OS环境变量
 60 - name: LOCAL_KEY     #本地Key
 61 value: value
 62 - name: CONFIG_MAP_KEY  #局策略可使用configMap的配置Key,
 63 valueFrom:
 64 configMapKeyRef:
 65 name: special-config   #configmap中找到name为special-config
 66 key: special.type      #找到name为special-config里data下的key
 67 ports:
 68 - name: http
 69 containerPort: 8080 #对service暴露端口
 70 volumeMounts:     #挂载volumes中定义的磁盘
 71 - name: log-cache
 72 mount: /tmp/log
 73 - name: sdb       #普通用法,该卷跟随容器销毁,挂载一个目录
 74 mountPath: /data/media
 75 - name: nfs-client-root    #直接挂载硬盘方法,如挂载下面的nfs目录到/mnt/nfs
 76 mountPath: /mnt/nfs
 77 - name: example-volume-config  #高级用法第1种,将ConfigMap的log-script,backup-script分别挂载到/etc/config目录下的一个相对路径path/to/...下,如果存在同名文件,直接覆盖。
 78 mountPath: /etc/config
 79 - name: rbd-pvc                #高级用法第2中,挂载PVC(PresistentVolumeClaim)
 80 #使用volume将ConfigMap作为文件或目录直接挂载,其中每一个key-value键值对都会生成一个文件,key为文件名,value为内容,
 81 volumes:  # 定义磁盘给上面volumeMounts挂载
 82 name: log-cache
 83 emptyDir: {}
 84 name: sdb  #挂载宿主机上面的目录
 85 hostPath:
 86 path: /any/path/it/will/be/replaced
 87 name: example-volume-config  # 供ConfigMap文件内容到指定路径使用
 88 configMap:
 89 name: example-volume-config  #ConfigMap中名称
 90 items:
 91 key: log-script           #ConfigMap中的Key
 92 path: path/to/log-script  #指定目录下的一个相对路径path/to/log-script
 93 key: backup-script        #ConfigMap中的Key
 94 path: path/to/backup-script  #指定目录下的一个相对路径path/to/backup-script
 95 name: nfs-client-root         #供挂载NFS存储类型
 96 nfs:
 97 server: 10.42.0.55          #NFS服务器地址
 98 path: /opt/public           #showmount -e 看一下路径
 99 name: rbd-pvc                 #挂载PVC磁盘
100 persistentVolumeClaim:
101 claimName: rbd-pvc1         #挂载已经申请的pvc磁盘
102 Service yaml文件详解
103 
104 apiVersion: v1
105 kind: Service
106 matadata:                                #元数据
107   name: string                           #service的名称
108   namespace: string                      #命名空间  
109   labels:                                #自定义标签属性列表
110     - name: string
111   annotations:                           #自定义注解属性列表  
112     - name: string
113 spec:                                    #详细描述
114   selector: []                           #label selector配置,将选择具有label标签的Pod作为管理 
115                                          #范围
116   type: string                           #service的类型,指定service的访问方式,默认为 
117                                          #clusterIp
118   clusterIP: string                      #虚拟服务地址      
119   sessionAffinity: string                #是否支持session
120   ports:                                 #service需要暴露的端口列表
121   - name: string                         #端口名称
122     protocol: string                     #端口协议,支持TCP和UDP,默认TCP
123     port: int                            #服务监听的端口号
124     targetPort: int                      #需要转发到后端Pod的端口号
125     nodePort: int                        #当type = NodePort时,指定映射到物理机的端口号
126   status:                                #当spce.type=LoadBalancer时,设置外部负载均衡器的地址
127     loadBalancer:                        #外部负载均衡器    
128       ingress:                           #外部负载均衡器 
129         ip: string                       #外部负载均衡器的Ip地址值
130         hostname: string                 #外部负载均衡器的主机名

Service yaml文件详解

 1 apiVersion: v1
 2 kind: Service
 3 matadata:                                #元数据
 4   name: string                           #service的名称
 5   namespace: string                      #命名空间  
 6   labels:                                #自定义标签属性列表
 7     - name: string
 8   annotations:                           #自定义注解属性列表  
 9     - name: string
10 spec:                                    #详细描述
11   selector: []                           #label selector配置,将选择具有label标签的Pod作为管理 
12                                          #范围
13   type: string                           #service的类型,指定service的访问方式,默认为 
14                                          #clusterIp
15   clusterIP: string                      #虚拟服务地址      
16   sessionAffinity: string                #是否支持session
17   ports:                                 #service需要暴露的端口列表
18   - name: string                         #端口名称
19     protocol: string                     #端口协议,支持TCP和UDP,默认TCP
20     port: int                            #服务监听的端口号
21     targetPort: int                      #需要转发到后端Pod的端口号
22     nodePort: int                        #当type = NodePort时,指定映射到物理机的端口号
23   status:                                #当spce.type=LoadBalancer时,设置外部负载均衡器的地址
24     loadBalancer:                        #外部负载均衡器    
25       ingress:                           #外部负载均衡器 
26         ip: string                       #外部负载均衡器的Ip地址值
27         hostname: string                 #外部负载均衡器的主机名

Pod yaml文件详解

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

 

标签:name,Kubernetes,nginx,--,yaml,详解,Pod,string
From: https://www.cnblogs.com/qfrg/p/17137966.html

相关文章

  • Spring boot中使用aop详解
    aop是spring的两大功能模块之一,功能非常强大,为解耦提供了非常优秀的解决方案。现在就以springboot中aop的使用来了解一下aop。一:使用aop来完成全局请求日志处理创建一个spri......
  • K8S-Service的yaml文件详解
    一、service-yaml文件详解apiVersion:v1kind:Servicematadata:#元数据name:string#service的名称......
  • Linux中产生zombie的原因详解及解决方法!
    zombie英文全称是zombieprocess,中文名为僵尸进程,也就是死掉的进程,那么Linux中产生zombie的原因是什么?具体内容请看下文。僵尸进程,英文名zombieprocess,顾名思义......
  • vue 配置【详解】 vue.config.js ( 含 webpack 配置 )【转载】
    使用 vue-cli3.x以上的脚手架创建的vue项目不再有build文件夹,若需要进行相关配置,需在项目目录下新建文件 vue.config.js常用配置1//后端服务器地址2letur......
  • Docker-全面详解(学习总结---从入门到深化)
    一、什么是Docker Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。 什么是"集装箱技术"我们都知道码头里的集装箱是运载货物用的,它是一种按规......
  • HTML5+CSS3(十)-全面详解(学习总结---从入门到深化)
    ​​Display​​​​编辑 元素隐藏属性对比​​​​学习效果反馈 ​​​​文档流 ​​​​文档流产生的问题 ​​​​空格折叠​​​​元素无空隙​​​​脱离文档流​......
  • 螺栓松动与螺栓疲劳失效详解
       众所周知,螺栓连接作为一种重要的连接方式,广泛应用于汽车、轮船、轨道车辆、航空航天、家用电器等领域。如今,工程上越来越多地使用螺栓连接,而螺栓接头作为整个结构......
  • K8S-Pod的yaml文件详解
    一、Pod-yaml文件详解1apiVersion:v1#必选,版本号,例如v12kind:Pod#必选,Pod3metadata:#必选,元数据4name:st......
  • 正则的扩展详解
    RegExp()在es5中,RegExp的构造函数参数有两种情况1、字符串2、正则表达式//第一种情况letregex=newRegExp('abc','i')//第二种情况letregex2=/abc/i这......
  • 关于flex:1详解(用来设置 flex-grow, flex-shrink 与 flex-basis。)
    关于flex:1详解;https://blog.csdn.net/qq_40138556/article/details/103967529flex属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为01auto。后两个属性可......