Skip to content

018优化K8sYaml之日志与规格

POD常用参数解析

text
apiVersion: v1			 #必选,版本号,例如v1
kind: Pod				#必选,资源类型,例如 Pod
metadata:				#必选,元数据
  name : string			 #必选,Pod名称
  namespace: string 		#Pod所属的命名空间,默认为" default"labels:
  labels:					#自定义标签列表
    - namd: string
spec:						#必选,Pod中容器的详细定义 
  containers: 				#必选,Pod中容器列表
  - name: string			#必选,容器名称
    image: string			#必选,容器的镜像名称
    imagePullPolicy: [ Always | Never |IfNotPresent ]		#获取镜像的策略
	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				#内存限制,单位可以为Mi/Gi,将用于docker run --memory参数
	  requests:						#资源请求的设置
	    cpu: string					#cpu请求,容器启动的初始可用数量
	    memory: string 				#内存请求,容器启动的初始可用数量
    lifecycle:						#生命周期钩子
	  postStart: 					#容器启动后立即执行此钩子,如果执行失败,会根据重启策略进行重启
	  preStop: 						#溶容器终止前执行此钩子,无论结果如何,容器都会终止
	livenessProbe: 					#对Pod内各容器健唐检查的设署,当探测无响应几次后将自动重启该容器
	  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						#对容器监控检查的定期探测时间设置,单位秒,黑认18秒一次
		successThreshold: 0
		failureThreshold: 0
		securityContext:
		  privileged: false
	restartPolicy: [Always  Never| OnFailure] 					#Pod的重启策略
	nodeName: <string>									#设置NodeName表示将该Pod调度到指定到名称的node节点上
	nodeSelector: obeject 							#设置NodeSelector表示将该Pod调度到包含这个label的node节点上
	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的存储卷,挂载集群与定义的secret对象到容器内部
	   scretname: string
	   items :
	   - key : string
	     path: string
	   configMap:						#类型为configMap的存储卷,挂载预定义的configMap对象到容器内部
	     name: string
	     items:
	     - key: string
	       path: string

修改 015 节的yaml

yaml
apiVersion: v1
kind: Namespace
metadata:
  name: daily
---
apiVersion: v1
# PV就是持久卷,因为它是集群级别的所以不需要指定namespace
kind: PersistentVolume
metadata:
  # PV名称
  name: pv-daily-cutejava-tiny-service
spec:
  # 设置访问模型
  # ReadWriteOnce:表示具有读写权限,但是只能被一个node挂载一次
  # ReadOnlyMany:表示具有只读权限,可以被多个node多次挂载
  # ReadWriteMany:表示具有读写权限,可以被多个node多次挂载
  accessModes:
    - ReadWriteMany
    - ReadWriteOnce
    - ReadOnlyMany
  # 设置存储空间大小
  capacity:
    storage: 1Gi
  # 回收策略
  # Retain 当删除与之绑定的PVC时候,这个PV被标记为released(PVC与PV解绑但还没有执行回收策略)且之前的数据依然保存在该PV上,但是该PV不可用,需要手动来处理这些数据并删除该PV
  # Delete 当删除与之绑定的PVC时候
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: "/mnt/data"
---
apiVersion: v1
# PVC就是访问对应条件PV的令牌,比如我要找一个 accessModes=ReadWriteOnce && requests.storage >= 1Gi 的PV
kind: PersistentVolumeClaim
metadata:
  name: pvc-daily-cutejava-tiny-service
  namespace: daily
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: pod-daily-cutejava-tiny-service
  namespace: daily
spec:
  serviceName: endpoint-daily-cutejava-tiny-service
  replicas: 2
  selector:
    matchLabels:
      app: pod-daily-cutejava-tiny-service
  template:
    metadata:
      labels:
        app: pod-daily-cutejava-tiny-service
    spec:
      containers:
        - name: pod-daily-cutejava-tiny-service
          image: easzlab.io.local:5000/cutejava-starter:version_20240521195715
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 12800
          resources:
            limits:
              cpu: '1'
              # 单位为 Mi 或者 Gi
              memory: '2Gi'
            requests:
              cpu: '0.5'
              # 单位为 Mi 或者 Gi
              memory: '1Gi'
          livenessProbe:
            httpGet:
              path: /health/check
              port: 12800
            initialDelaySeconds: 5
            periodSeconds: 10
          readinessProbe:
            tcpSocket:
              port: 12800
            initialDelaySeconds: 5
            periodSeconds: 10
          startupProbe:
            httpGet:
              path: /health/check
              port: 12800
            failureThreshold: 60
            periodSeconds: 10
          volumeMounts:
            - name: vod-daily-cutejava-tiny-service
              mountPath: /boot/log
      restartPolicy: Always
      volumes:
        - name: vod-daily-cutejava-tiny-service
          persistentVolumeClaim:
            claimName: pvc-daily-cutejava-tiny-service
---
apiVersion: v1
kind: Service
metadata:
  name: endpoint-daily-cutejava-tiny-service
  namespace: daily
spec:
  selector:
    app: pod-daily-cutejava-tiny-service
  ports:
    - protocol: TCP
      port: 80
      targetPort: 12800
  type: ClusterIP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-cutejava-tiny-service
  namespace: daily
spec:
  ingressClassName: nginx
  rules:
    - host: cutejava-tiny-service.daily.vpc.odboy.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: endpoint-daily-cutejava-tiny-service
                port:
                  number: 12800

执行命令

首先,删除原来的容器

shell
kubectl delete -f cutejava-tiny-service.daily.yaml

delorigin.png

然后应用新的配置

shell
> cutejava-tiny-service.daily.yaml
vi cutejava-tiny-service.daily.yaml
kubectl apply -f cutejava-tiny-service.daily.yaml

applyaml.png