当前位置: 首页 > news >正文

K8S:Yaml文件详解及编写示例

文章目录

  • 一.Yaml文件详解
    • 1.Yaml文件格式
    • 2.YAML 语法格式
  • 二.Yaml文件编写及相关概念
    • 1.查看 api 资源版本标签
    • 2.yaml编写案例
      • (1)相关标签介绍
      • (2)Deployment类型编写nginx服务
      • (3)k8s集群中的port介绍
      • (4)Deployment类型编写redis服务
      • (5)快速编写yaml文件
      • (6)案例:自主式创建service并关联上面的pod
      • (7)Pod yaml文件详解
      • (8)deployment.yaml文件详解
      • (9)Service yaml文件详解
      • (10)k8s部署tomcat的yaml文件
  • 总:
    • 1.K8S集群中访问流向
    • 2.语法格式
    • 3.yaml文件组成部署
    • 4.常用字段的含义

一.Yaml文件详解

1.Yaml文件格式

(1)Kubernetes 支持 YAML 和 JSON 格式管理资源对象

(2)JSON 格式:主要用于 api 接口之间消息的传递

(3)YAML 格式:用于配置和管理,YAML 是一种简洁的非标记性语言,内容格式人性化,较易读

2.YAML 语法格式

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

二.Yaml文件编写及相关概念

1.查看 api 资源版本标签

kubectl api-versionskubectl 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                             #如果是业务场景一般首选使用 apps/v1
authentication.k8s.io/v1   
authentication.k8s.io/v1beta1       #带有beta字样的代表的是测试版本,不用在生产环境中
authorization.k8s.io/v1
authorization.k8s.io/v1beta1
autoscaling/v1
autoscaling/v2beta1
autoscaling/v2beta2
batch/v1
batch/v1beta1
certificates.k8s.io/v1
certificates.k8s.io/v1beta1
coordination.k8s.io/v1
coordination.k8s.io/v1beta1
discovery.k8s.io/v1beta1
events.k8s.io/v1
events.k8s.io/v1beta1
extensions/v1beta1
flowcontrol.apiserver.k8s.io/v1beta1
networking.k8s.io/v1
networking.k8s.io/v1beta1
node.k8s.io/v1
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

2.yaml编写案例

(1)相关标签介绍

#查看deployment的版本定义
kubectl explain deployment

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

#查看api的版本
kubectl explain deployment.apiVersion

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

#查看元数据信息
kubectl explain deployment.apiVersion
#定义标签介绍
kubectl explain deployment.spec.selector
#对matchLabels标签介绍
kubectl explain deployment.spec.selector.matchLabels

(2)Deployment类型编写nginx服务

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

#创建资源对象
kubectl create -f nginx-deployment.yaml
或
kubectl apply -f nginx-deployment.yaml 
#查看创建的资源对象,创建需等待running
kubectl get pod

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

#查看创建的pod资源
kubectl get pods -o wideNAME                            READY   STATUS    RESTARTS   AGE     IP            NODE     NOMINATED NODE   READINESS GATES
myapp-summer-5b5b5f6c6b-dpnw4   1/1     Running   0          3m53s   10.244.1.27   node02   <none>           <none>
myapp-summer-5b5b5f6c6b-qwlpq   1/1     Running   0          3m53s   10.244.2.20   node01   <none>           <none>
myapp-summer-5b5b5f6c6b-rgnmc   1/1     Running   0          3m53s   10.244.2.21   node01   <none>           <none>

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 容器如果想对外提供访问,需创建service 发布
#创建service服务对外提供访问并测试
vim nginx-service.yamlapiVersion: v1  
kind: Service  
metadata:name: nginx-servicelabels:app: nginx  
spec:type: NodePort  ports:- port: 80targetPort: 80  selector:app: nginx

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

#创建资源对象
kubectl create -f nginx-service.yaml 
或
kubectl apply -f nginx-service.yaml
#查看创建的service
[root@master01 demo]# kubectl  get svc
NAME                     TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)           AGE
kubernetes               ClusterIP   10.96.0.1       <none>        443/TCP           5d19h
myapp-summer             NodePort    10.96.30.130    <none>        8080:32666/TCP    119s

在这里插入图片描述

#在浏览器输入 nodeIP:nodePort 即可访问
http://192.168.198.11:32666
http://192.168.198.12:32666

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(3)k8s集群中的port介绍

详解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。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(4)Deployment类型编写redis服务

vim demo02-redis.yamlapiVersion: apps/v1
kind: Deployment
metadata:name: redis-deploymentnamespace: defaultlabels:app: redis
spec:replicas: 2selector:matchLabels:app: redistemplate:                            metadata:labels:           app: redisspec:containers:                         - name: redis                            image: redis:latestports:- containerPort: 6379    ---   apiVersion: v1
kind: Service  
metadata:name: redislabels:app: redis
spec:type: NodePortports:- port: 6379targetPort: 6379nodePort: 32555selector:app: redis
#创建资源
kubectl apply -f demo02-redis.yaml 
#查看创建的资源
kubectl get pod,svc

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用Redis Desktop Manager测试redis,安装包在主页资源中

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这里插入图片描述

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

添加键值对

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

#登入查看创建的键值对
kubectl exec -it redis-deployment-756b4b8956-khw2m bash
redis-cli
keys *

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(5)快速编写yaml文件

#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.yamlapiVersion: v1
kind: Pod
metadata:creationTimestamp: null     #删除labels:run: nginx-testname: nginx-test
spec:containers:- image: nginxname: nginx-testports:- containerPort: 80resources: {}             #删除dnsPolicy: ClusterFirstrestartPolicy: Alwaysstatus: {}                    #删除
#将现有的资源生成模板导出
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
#快速查看相关模板
kubectl edit

(6)案例:自主式创建service并关联上面的pod

资源类型:pod 自主式

资源名称:nginx-rain

命名空间:rain

容器镜像要求:nginx 1.14

容器端口:80

标签:app-rain

#空跑
kubectl run nginx-rain --image=nginx:1.14 --port=80 --dry-run=client -oyaml > nginx-rain。yaml
#复制出来的模板
kubectl create ns rain --dry-run -oyaml
vim nginx-rain.yaml ---
apiVersion: v1
kind: Namespace
metadata:name: rain
---
apiVersion: v1
kind: Pod
metadata:labels:run: rainname: nginx-rainnamespace: rain
spec:containers:- image: nginx:1.14name: nginx-rainports:- containerPort: 80restartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:name: nginx-rainlabels:run: rainnamespace: rain
spec:ports:- nodePort: 32333port: 80protocol: TcptargetPort: 80selector:run: raintype: NodePort
kubectl apply -f nginx-rain.yaml 

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

#查看创建所有信息
kubectl get pod,svc,ns -n rain

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

#访问测试
curl 10.96.80.12
http://192.168.198.11:32333/

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

#写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  #复制配置,再粘贴到新文件

(7)Pod yaml文件详解

apiVersion: v1			#必选,版本号,例如v1
kind: Pod				#必选,Pod
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,默认TCPenv:					#容器运行前需设置的环境变量列表- 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、portpath: stringport: numberhost: stringscheme: stringHttpHeaders:- name: stringvalue: stringtcpSocket:			#对Pod内个容器健康检查方式设置为tcpSocket方式port: numberinitialDelaySeconds: 0	#容器启动完成后首次探测的时间,单位为秒timeoutSeconds: 0		#对容器健康检查探测等待响应的超时时间,单位秒,默认1秒periodSeconds: 0			#对容器监控检查的定期探测时间设置,单位秒,默认10秒一次successThreshold: 0failureThreshold: 0securityContext:privileged:falserestartPolicy: [Always | Never | OnFailure]		#Pod的重启策略,Always表示一旦不管以何种方式终止运行,kubelet都将重启,OnFailure表示只有Pod以非0退出码退出才重启,Nerver表示不再重启该PodnodeSelector: obeject		#设置NodeSelector表示将该Pod调度到包含这个label的node上,以key:value的格式指定imagePullSecrets:			#Pull镜像时使用的secret名称,以key:secretkey格式指定- name: stringhostNetwork: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: stringpath: stringconfigMap:				#类型为configMap的存储卷,挂载预定义的configMap对象到容器内部name: stringitems:- key: string

(8)deployment.yaml文件详解

apiVersion: extensions/v1beta1   #接口版本
kind: Deployment                 #接口类型
metadata:name: cango-demo               #Deployment名称namespace: cango-prd           #命名空间labels:app: cango-demo              #标签
spec:replicas: 3strategy:rollingUpdate:  ##由于replicas为3,则整个升级,pod个数在2-4个之间maxSurge: 1      #滚动升级时会先启动1个podmaxUnavailable: 1 #滚动升级时允许的最大Unavailable的pod个数template:         metadata:labels:app: cango-demo  #模板名称必填sepc: #定义容器模板,该模板可以包含多个容器containers:                                                                   - name: cango-demo                                                           #镜像名称image: swr.cn-east-2.myhuaweicloud.com/cango-prd/cango-demo:0.0.1-SNAPSHOT #镜像地址command: [ "/bin/sh","-c","cat /etc/config/path/to/special-key" ]    #启动命令args:                                                                #启动参数- '-storage.local.retention=$(STORAGE_RETENTION)'- '-storage.local.memory-chunks=$(STORAGE_MEMORY_CHUNKS)'- '-config.file=/etc/prometheus/prometheus.yml'- '-alertmanager.url=http://alertmanager:9093/alertmanager'- '-web.external-url=$(EXTERNAL_URL)'#如果command和args均没有写,那么用Docker默认的配置。#如果command写了,但args没有写,那么Docker默认的配置会被忽略而且仅仅执行.yaml文件的command(不带任何参数的)。#如果command没写,但args写了,那么Docker默认配置的ENTRYPOINT的命令行会被执行,但是调用的参数是.yaml中的args。#如果如果command和args都写了,那么Docker默认的配置被忽略,使用.yaml的配置。imagePullPolicy: IfNotPresent  #如果不存在则拉取livenessProbe:       #表示container是否处于live状态。如果LivenessProbe失败,LivenessProbe将会通知kubelet对应的container不健康了。随后kubelet将kill掉container,并根据RestarPolicy进行进一步的操作。默认情况下LivenessProbe在第一次检测之前初始化值为Success,如果container没有提供LivenessProbe,则也认为是Success;httpGet:path: /health #如果没有心跳检测接口就为/port: 8080scheme: HTTPinitialDelaySeconds: 60 ##启动后延时多久开始运行检测timeoutSeconds: 5successThreshold: 1failureThreshold: 5readinessProbe:httpGet:path: /health #如果没有心跳检测接口就为/port: 8080scheme: HTTPinitialDelaySeconds: 30 ##启动后延时多久开始运行检测timeoutSeconds: 5successThreshold: 1failureThreshold: 5resources:              ##CPU内存限制requests:cpu: 2memory: 2048Milimits:cpu: 2memory: 2048Mienv:                    ##通过环境变量的方式,直接传递pod=自定义Linux OS环境变量- name: LOCAL_KEY     #本地Keyvalue: value- name: CONFIG_MAP_KEY  #局策略可使用configMap的配置Key,valueFrom:configMapKeyRef:name: special-config   #configmap中找到name为special-configkey: special.type      #找到name为special-config里data下的keyports:- name: httpcontainerPort: 8080 #对service暴露端口volumeMounts:     #挂载volumes中定义的磁盘- name: log-cachemount: /tmp/log- name: sdb       #普通用法,该卷跟随容器销毁,挂载一个目录mountPath: /data/media    - name: nfs-client-root    #直接挂载硬盘方法,如挂载下面的nfs目录到/mnt/nfsmountPath: /mnt/nfs- name: example-volume-config  #高级用法第1种,将ConfigMap的log-script,backup-script分别挂载到/etc/config目录下的一个相对路径path/to/...下,如果存在同名文件,直接覆盖。mountPath: /etc/config       - name: rbd-pvc                #高级用法第2中,挂载PVC(PresistentVolumeClaim)#使用volume将ConfigMap作为文件或目录直接挂载,其中每一个key-value键值对都会生成一个文件,key为文件名,value为内容,volumes:  # 定义磁盘给上面volumeMounts挂载- name: log-cacheemptyDir: {}- name: sdb  #挂载宿主机上面的目录hostPath:path: /any/path/it/will/be/replaced- name: example-volume-config  # 供ConfigMap文件内容到指定路径使用configMap:name: example-volume-config  #ConfigMap中名称items:- key: log-script           #ConfigMap中的Keypath: path/to/log-script  #指定目录下的一个相对路径path/to/log-script- key: backup-script        #ConfigMap中的Keypath: path/to/backup-script  #指定目录下的一个相对路径path/to/backup-script- name: nfs-client-root         #供挂载NFS存储类型nfs:server: 10.42.0.55          #NFS服务器地址path: /opt/public           #showmount -e 看一下路径- name: rbd-pvc                 #挂载PVC磁盘persistentVolumeClaim:claimName: rbd-pvc1         #挂载已经申请的pvc磁盘

(9)Service yaml文件详解

apiVersion: v1
kind: Service
matadata:                                #元数据name: string                           #service的名称namespace: string                      #命名空间  labels:                                #自定义标签属性列表- name: stringannotations:                           #自定义注解属性列表  - name: string
spec:                                    #详细描述selector: []                           #label selector配置,将选择具有label标签的Pod作为管理 #范围type: string                           #service的类型,指定service的访问方式,默认为 #clusterIpclusterIP: string                      #虚拟服务地址      sessionAffinity: string                #是否支持sessionports:                                 #service需要暴露的端口列表- name: string                         #端口名称protocol: string                     #端口协议,支持TCP和UDP,默认TCPport: int                            #服务监听的端口号targetPort: int                      #需要转发到后端Pod的端口号nodePort: int                        #当type = NodePort时,指定映射到物理机的端口号status:                                #当spce.type=LoadBalancer时,设置外部负载均衡器的地址loadBalancer:                        #外部负载均衡器    ingress:                           #外部负载均衡器 ip: string                       #外部负载均衡器的Ip地址值hostname: string                 #外部负载均衡器的主机名

(10)k8s部署tomcat的yaml文件

vim tomcat-pod.yamlapiVersion: apps/v1
kind: Deployment
metadata:                   #定义了 Deployment 的元数据信息,包括名称和标签name: mytomcat
spec:                       #定义了 Deployment 的规范信息,包括副本数、Selector、升级策略replicas: 3               #指定了 Deployment 所需的 Pod 副本数selector:                 #定义了匹配标签的 Selector,以选择要控制的 PodmatchLabels: app: mytomcatminReadySeconds: 1             #指定了 Deployment 进行滚动升级时,新 Pod 可以被认为已准备好的最小时间progressDeadlineSeconds: 60    #指定了 Deployment 升级的最长时间,超过此时间将标记为失败revisionHistoryLimit: 5        #定义了 Deployment 可以保留的版本历史数量的最大值strategy:                      #定义了 Deployment 进行滚动升级的策略type: RollingUpdate          #指定了滚动升级的类型,此处设置为 RollingUpdate。另一个选项是 RecreaterollingUpdate:               #定义了 RollingUpdate 策略的参数maxSurge: 1                #定义了在进行滚动更新时,最大可以超出指定副本数的 Pod 数量maxUnavailable: 1          #定义了在进行滚动更新时,最大可以不可用的 Pod 数量template:                      #定义了要创建的 Pod 的规范信息,包括容器、端口和卷metadata:name: mytomcatlabels:app: mytomcatspec:containers:              #定义了 Pod 中的容器信息- name: mytomcat         #定义了容器的名称,此处设置为 mytomcatimage: tomcat:8        #定义了容器要使用的镜像,此处设置为 Tomcat 8ports:                 #定义了容器要监听的端口,此处设置为 8080 端口- containerPort: 8080volumeMounts:          #定义了容器要挂载的卷- name: zjf-configmountPath: /etc/localtimevolumes:                 #定义了卷的信息,包括名称和挂载路径- name: zjf-confighostPath:              #定义了要挂载的本地主机路径path: /usr/share/zoneinfo/Asia/Shanghai
kubectl apply -f tomcat-pod.yaml 
vim tomcat-service.yamlapiVersion: v1
kind: Service
metadata:name: mytomcat
spec:type: NodePortports:- port: 8080nodePort: 32222selector:app: mytomcat
kubectl apply -f tomcat-service.yaml 
#查看创建的pod及svc
kubectl get pod
kubectl get svc

在这里插入图片描述

#查看tomcat的分布node节点
kubectl get pods -o wide

在这里插入图片描述

#访问测试

总:

1.K8S集群中访问流向

port:为service在clusterIP上暴露的端口

targetport:对应容器映射在pod上的端口

nodeport:可以通过在K8S集群外部使用nodeIP+nodePort来去访问service

containerport:容器内部使用的端口

K8S集群内部:客户端——clusterIP:port——通过target port——podIP:containerport

K8S集群外部:客户端——nodeIP:nodeport——通过target port——podIP:containerport

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.语法格式

通过缩进表示层级关系

不能使用tab进行缩进,只能使用空格,一般开头缩进2个空格

字符后缩进一个空格,比如冒号,逗号等

使用—表示新的yaml文件的开始

使用#表示注释

3.yaml文件组成部署

(1)控制器定义

deployment:定义metadaea、spec、selector

通过yaml完成副本的定义,自主式的

(2)被控制对象

由哪一个控制器(自主式、deployment、statusfulset等)

4.常用字段的含义

如何快速编写yaml

(1)第一种使用kubectl create 命令生成yaml文件

(2)第二种使用kubectl get 命令导出yaml文件

相关文章:

K8S:Yaml文件详解及编写示例

文章目录 一.Yaml文件详解1.Yaml文件格式2.YAML 语法格式 二.Yaml文件编写及相关概念1.查看 api 资源版本标签2.yaml编写案例&#xff08;1&#xff09;相关标签介绍&#xff08;2&#xff09;Deployment类型编写nginx服务&#xff08;3&#xff09;k8s集群中的port介绍&#x…...

去耦电路设计应用指南(一)MCU去耦设计介绍

&#xff08;一&#xff09;MCU去耦设计介绍 1. 概述2. MCU需要去耦的原因2.1 去耦电路简介2.2 电源噪声产生的原因2.3 插入损耗2.4 去耦电路简介 参考资料来自网上&#xff1a; 1. 概述 我们经常看到单片机或者IC电路管脚常常会放置一个或者多个陶瓷电容&#xff0c;他们主要…...

【c++】杂记

文章目录 预处理器constauto 预处理器 预处理器&#xff1a;运行于编译过程之前的一段程序 预处理变量&#xff1a;不属于命名空间std,由预处理器负责管理 const const对象一旦创建就不再改变 const对象必须初始化 const对象旨在文件内有效 ectern const int bufsizefun() /…...

简记:使用 Django Shell 清空 数据库表

简记 使用 Django Shell 清空所有数据库表 jcLee95的博客&#xff1a;https://blog.csdn.net/qq_28550263 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/132862795 目 录 1. 描述2. 步骤备份重要数据进入 Django Shell输入脚本 1. 描述 由于历史的…...

Web项目测试

http: //localhost: 8080 /shop1/ 协议 服务器的地址 端口号 相应的代码文件或文件夹 127.0.0.1 (服务器所在的端口) Web项目测试:系统测试 Web项目测试要做什么类型:接口测试、功能测试、性能测试、兼容性测试、安全测试、界面测试、易…...

Springboot 集成 Ehcache 提示 Cannot find cache named ‘employee_all‘ for Builder

异常提示&#xff1a; java.lang.IllegalArgumentException: Cannot find cache named employee_all for Builder[public java.lang.Iterable org.bc.device.service.EmployeeService.findAll()] caches[employee_all] | key | keyGeneratorkeyGenerator | cacheManager | cac…...

pandas 笔记:shift

用于将数据系列或数据框中的数据按指定的位置移动。这对于某些时间序列分析特别有用&#xff0c;例如计算数据的变化量或滞后值 1 对Series/DataFrame数据进行移动 1.0 原始数据 import pandas as pd import numpy as np df1pd.DataFrame(np.arange(12).reshape(3,4),column…...

解密(2023寒假每日一题 20)

给定一个正整数 k k k &#xff0c;有 k k k 次询问&#xff0c;每次给定三个正整数 n i , e i , d i n_i,e_i,d_i ni​,ei​,di​ &#xff0c;求两个正整数 p i , q i p_i,q_i pi​,qi​ &#xff0c;使 n i p i q i &#xff0c; e i d i ( p i − 1 ) ( q i − 1 …...

如何实现Web应用、网站状态的监控?

如何实现Web应用、网站状态的监控&#xff1f; 关键词&#xff1a;网站监控,服务器监控,页面性能监控,用户体验监控本文通过代码分析、网站应用介绍网站状态监控的方式下文主要分为网站应用、技术实现两部分 一、网站应用 现在网络上已经存在一些Web网站监控的服务&#xff…...

手撕排序之堆排序

一、概念&#xff1a; 什么是逻辑结构、物理结构&#xff1f; 逻辑结构&#xff1a;是我们自己想象出来的&#xff0c;就像内存中不存在一个真正的树 物理结构(存储结构)&#xff1a;实际上在内存中存储的形式。 堆的逻辑结构是一颗完全二叉树 堆的物理结构是一个数组 之…...

【奇想星球】重磅!我们的AIGC共创社区平台上线了!

文章目录 01 前言功能模块 02 相识缘起连接价值平台优势 03 奇想星球04 我们做了什么时间线 05 初心愿景06 可爱的小伙伴们后续开发及招募计划 07 结语 公众号原文链接 01 前言 2023年9月10日&#xff0c;我们的平台网站上线了&#xff01; 奇想星球 | AIGC共创社区平台。网站地…...

2023年数维杯数学建模B题节能列车运行控制优化策略求解全过程文档及程序

2023年数维杯数学建模 B题 节能列车运行控制优化策略 原题再现&#xff1a; 在城市交通电气化进程快速推进的同时&#xff0c;与之相应的能耗增长和负面效应也在迅速增加。城市轨道交通中的快速增长的能耗给城轨交通的可持续性发展带来负担。2018 年&#xff0c;北京、上海、…...

Python--测试代码

目录 1、使用pip安装pytest 1.1 更新pip 1.2 安装putest 2、测试函数 2.1 单元测试和测试用例 2.2 可通过的测试 2.3 运行测试 2.4 未通过的测试 2.5 解决测试未通过 2.6 添加新测试 3、测试类 3.1 各种断言 3.2 一个测试的类 3.3 测试AnonymousSurvey类 3.4 使…...

CentOS 系列版本搭建 Nginx 服务

目录 Nginx 介绍 Nginx 安装 CentOS 系列版本 Nginx 删除 CentOS 系列版本 Nginx 介绍 Nginx 是一个广泛使用的Web服务器和反向代理服务器。 反向代理和负载均衡&#xff1a;Nginx支持反向代理和负载均衡&#xff0c;能够分发请求到多个后端服务器&#xff0c;提高了可用性…...

目标检测YOLO实战应用案例100讲-基于机器视觉的输电线路小目标检测和缺 陷识别(下)

目录 3.3.1 输电线路所有尺寸目标检测性能对比 3.3.2 输电线路小目标检测性能对比...

argparse--命令行参数解析库

文章目录 位置参数help ->描述信息type -> 被转换的类型 可选参数action ->动作基本类型 (store_true)短选项 结合位置参数和可选参数choiceaction ->动作基本类型 (count)default -> 默认值 argparse模块使编写用户友好的命令行变得容易 接口。程序定义了它需要…...

elasticsearch4-文档操作

个人名片&#xff1a; 博主&#xff1a;酒徒ᝰ. 个人简介&#xff1a;沉醉在酒中&#xff0c;借着一股酒劲&#xff0c;去拼搏一个未来。 本篇励志&#xff1a;三人行&#xff0c;必有我师焉。 本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》&#xff0c;SpringCloud…...

阿里云服务器上CentOS 7.6使用rpm包安装MySQL 8.0.31

我这里下载的是最新版本&#xff0c;需要到MySQL官网最新版本下载地址。 要是想要下载以前的版本需要到MySQL以前版本网址中。 1&#xff09;先使用wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.31-1.el7.x86_64.rpm-bundle.tar&#xff08;这个网址现在已经不…...

redis未授权漏洞

redis未授权漏洞是什么&#xff1f; Redis 默认情况下会绑定在 0.0.0.0:6379&#xff0c;这样将会将 Redis 服务暴露到公网上&#xff0c;如果在没有开启认证的情况下&#xff0c;可以导致任意用户在可以访问目标服务器的情况下未授权访问Redis以及读取 Redis的数据 它有什么危…...

详解3dMax中渲染线框的两种简单方法

在3dMax中渲染线框是你在某个时候想要完成的事情&#xff0c;例如为了演示分解步骤&#xff0c;或是仅仅为了在模型上创建线框覆盖的独特效果。为三维模型渲染线框最常见的原因是能够在模型上显示干净的拓扑。这篇文章将带你了解在3dMax中渲染三维模型线框的两种最常见、最简单…...

Git - Git 工作流程

文章目录 Git WorkFlow图解小结 Git WorkFlow Git Flow是一种基于Git的工作流程&#xff0c;确实利用了Git作为分布式版本控制系统的优势。 本地代码库 (Local Repository): 每个开发者都维护自己的本地代码库&#xff0c;这是Git分布式性质的体现。本地代码库包含了完整的项目…...

ARM如何利用PMU的Cycle Counter(时钟周期)来计算出CPU的时钟频率

本章将学习如何利用ARM PMU的Cycle Counter&#xff0c;来计算出CPU的时钟周期&#xff0c;从而计算出CPU的时钟频率。在介绍计算方法前&#xff0c;有必要先介绍下什么是时钟周期、机器周期以及指令周期。 如何计算出CPU的时钟频率 一&#xff0c;时钟周期&#xff0c;机器周…...

56资源网系统源码搭建知识付费-含源码

内置了上万条数据资源 大致功能&#xff1a; 支持免费与付费&#xff08;增加了插件付费插件&#xff09;支持侧边栏支持添加各类型广告&#xff08;你所能用到的基本都有&#xff09;.支持网盘下载模块支持所有页面自定义支持文章页三方跳转支持添加页面支持自定义采集&#…...

【运营版】仿东郊到家上门服务app小程序开发同城美容家政预约推拿足浴SPA技师派单源码

套餐一:源码=小程序端+公众号端+APP端=280元 套餐二:全包服务 包服务器+域名+APP+认证小程序+H5+PC=1000元 后端:系统后端使用PHP语言开发 前端:前端使用uniapp进行前后端分离开发 用户端功能模块:技师选择 预约服务 优惠券 订单 技师服务...

uniapp项目实践总结(十五)使用websocket实现简易聊天室

导语:在一些社交软件中,经常可以看到各种聊天室的界面,接下来就总结一下聊天室的原理个实现方法,最后做一个简易的聊天室,包括登录/登出、加入/离开房间、发送接收聊天消息等功能。 目录 准备工作原理分析组件实现实战演练服务端搭建案例展示准备工作 在pages/index文件夹…...

论文阅读之Learning and Generalization of Motor Skills by Learning from Demonstration

论文阅读其实就是用自己的话讲一遍&#xff0c;然后理解其中的方法 0、论文基本信息 为什么阅读此篇论文&#xff1a;因为它是DMP经典论文&#xff0c;被引多次&#xff0c;学史可以明智&#xff0c;了解最初机理。 论文题目&#xff1a;Learning and Generalization of Moto…...

SpringCloud中的Eureka的集群配置

微服务框架中最为重要的就是注册中心&#xff0c;如果只是单注册中心&#xff0c;一旦出现问题&#xff0c;容易导致整个微服务环境不可用&#xff0c;所以建议注册中心集群。 目前SpringCloud框架中使用Eureka作为注册中心&#xff0c;本文简单介绍一下Eureka的集群配置&…...

10 Ubuntu下配置STMCubeMX与CLion IDE联合环境搭建(不包含下载CLion的教程)

序言 果然作为一名测控系的学生&#xff0c;纯搞视觉多少还是有点与专业脱节&#xff0c;决定入坑嵌入式。选择STM32进行入门&#xff0c;并且使用CubeMX加CLion作为我的第一个真正意义上的嵌入式开发环境&#xff08;大一的时候玩过一段时间&#xff0c;但是没什么技术&#…...

负载均衡原理及应用

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…...

视频讲解|1033含sop的配电网重构(含风光可多时段拓展)

目录 1 主要内容 程序特点 讲解重点 2 视频链接 1 主要内容 该视频为含sop的配电网重构matlab代码讲解&#xff0c;对应资源下载链接为含sop的配电网重构&#xff08;含风光|可多时段拓展&#xff09;&#xff0c;程序主要内容是&#xff1a;针对含sop的配电网重构模型&…...

沈阳网站搜索引擎优化/凡科建站的优势

橡胶密封圈是由一个或几个零件组成的环形罩&#xff0c;固定在轴承的一个套圈或垫圈上并与另一套圈或垫圈接触或形成窄的迷宫间隙&#xff0c;防止润滑油漏出及外物侵入。一、按类状分1.O型密封圈系列拥有氟橡胶&#xff0c;丁晴胶&#xff0c;硅胶、乙丙橡胶、双氟橡胶等多种材…...

php是做网站的吗/免费建站模板

第1关:python数据库编程之创建数据库 本关任务:使用 pymysql 创建一个名为 mydb 的数据库。 import pymysql"""需求:创建一个名为 mydb 的数据库 """ if __name__ == __main__:# **********begin********** ## 获取连接conn = pymysql.conn…...

南宁网站建设企业网站/外链代发

最近在一个J2EE项目的开发过程中&#xff0c;遇到了这样的问题:在服务器上部署好这个Web系统后&#xff0c;这时访问系统是很正常的。当把服务器的时间(例如&#xff1a;2008-03-31)加一天或更多天(例如&#xff1a;2008-04-01&#xff0c;2008-04-02...)&#xff0c;这时再访问…...

郴州网红景点排名/广州seo网站营销

网站后台频繁退出严重影响到站长们对后台的使用&#xff0c;很多站长在批量添加商品&#xff0c;对商品进行描述的时候&#xff0c;往往时间是略长的&#xff0c;而这样的操作就会超出ecshop程序默认限制的时间值&#xff0c;这样就会导致弹出。无忧主机php空间后台也有类似的功…...

西安seo外包费用/惠州seo按天计费

1、vue2.0 响应式数据的原理 概述:Object.defineProperty() 递归数据劫持+订阅发布者模式 Vue2.0在初始化数据时,会给data中的属性使用Object.defineProperty重新定义所有属性,当页面取到对应属性时,会进行依赖收集(收集当前组件的watcher)如果属性发生变化会通知相关依…...

高校财务网站建设/时事热点新闻

Android Retrofit详解 文章目录Android Retrofit详解前言使用步骤1.添加Retrofit库的依赖&#xff1a;2.创建用于描述网络请求的接口3.创建Retrofit实例4.发送请求注解第一类&#xff1a;网络请求方法第二类&#xff1a;标记第三类&#xff1a;网络请求参数前言 Retrofit 是一…...