k8s-Pod常用编排内容
[root@xianchaomaster1 ~]# vim pod-tomcat.yaml apiVersion: v1 #api版本 kind: Pod #创建的资源 metadata: name: tomcat-test #Pod的名字 namespace: default #Pod所在的名称空间 labels: app: tomcat #Pod具有的标签 spec: containers: - name: tomcat-java #Pod里容器的名字 ports: - containerPort: 8080 #容器暴露的端口 image: xianchao/tomcat-8.5-jre8:v1 #容器使用的镜像 imagePullPolicy: IfNotPresent #镜像拉取策略
快速创建k8s。yaml的技巧
[root@master01 ~]# kubectl create deploy nginx --image=nginx --dry-run -o yaml > nginx-ds.yaml
快速查看k8s。yaml的技巧
[root@master01 test]# kubectl get pod -n kube-system etcd-master01 -o yaml
# Pod资源清单编写技巧
k8s编排文件5大要素:
[APIVersion定义了对象,代表了一个版本。]
apiVersion: v1
[Kind是字符串类型的值,代表了要创建的资源。服务器可以从客户端提交的请求推断出这个资源。]
kind: <string>
[metadata是对象,定义元数据属性信息的]
metadata:
[spec制定了定义Pod的规格,里面包含容器的信息]
spec:
[status表示状态,这个不可以修改,定义pod的时候也不需要定义这个字段]
status
Pod常用编排内容
格式有点问题,能看懂就行
apiVersion: v1 kind: <string> metadata: clusterName: <string> #对象所属群集的名称。这是用来区分不同集群中具有相同名称和命名空间的资源。此字段现在未设置在任何位置,apiserver将忽略它,如果设置了就使用设置的值 labels: <map[string]string> #创建的资源具有的标签 xx: xx name: <string> #创建的pod资源的名字,不同名称空间下pod名称可以相同 namespace: <string> #创建的资源所属的名称空间 spec: activeDeadlineSeconds: <integer> #表示Pod可以运行的最长时间,达到设置的值后,Pod会自动停止。 affinity: <Object> #定义亲和性的 nodeAffinity: <Object> #node亲和性 preferredDuringSchedulingIgnoredDuringExecution: <[]Object> #表示有节点尽量满足这个位置定义的亲和性,这不是一个必须的件,软亲和性 requiredDuringSchedulingIgnoredDuringExecution: <Object> #表示必须有节点满足这个位置定义的亲和性,这是个硬性条件,硬和性 nodeSelectorTerms: #node 标签 - matchExpressions: <[]Object> #匹配表达式的 - key: hwf <string> -required- #这个值是关联pod标签label里定义好的key operator: in #做等值选则还是不等值选则(in 等于,not in 不等于) values: <[]string> #给定值 - 123 #这个值是关联pod标签label里定义好的key对于的值 - matchFields: <[]Object> #匹配字段的 - key: <string> -required- values: <[]string> podAffinity: <Object> #pod亲和性 preferredDuringSchedulingIgnoredDuringExecution: <[]Object> #软亲和性 requiredDuringSchedulingIgnoredDuringExecution: <[]Object> #硬亲和性 - labelSelector: <Object> #我们要判断pod跟别的pod亲和,和你需要关联的pod使用同一个标签构成亲和性 matchExpressions: <[]Object> #匹配表达式的 - key: hwf <string> -required- #这个值是关联pod标签label里定义好的key operator: in #做等值选则还是不等值选则(in 等于,not in 不等于) values: <[]string> #这个值是关联pod标签label里定义好的key对于的值 - 123 - xx matchFields: <[]Object> #匹配字段的 - key: <string> -required- values: <[]string> namespaces: <[]string> #labelSelector需要选则一组资源,那么这组资源是在哪个名称空间中呢,通过namespace指定,如果不指定namespaces,那么就是当前创建pod的名称空间 topologyKey: <string> -required- #位置拓扑的键,这个是必须字段,查看node的标签 podAntiAffinity: <Object> #node反亲和性 preferredDuringSchedulingIgnoredDuringExecution: <[]Object> #软亲和性 requiredDuringSchedulingIgnoredDuringExecution: <[]Object> #硬亲和性 - labelSelector: <Object> #我们要判断pod跟别的pod亲和,和你需要关联的pod使用同一个标签构成亲和性 matchExpressions: <[]Object> #匹配表达式的 - key: hwf <string> -required- #这个值是关联pod标签label里定义好的key operator: in #做等值选则还是不等值选则(in 等于,not in 不等于) values: <[]string> #这个值是关联pod标签label里定义好的key对于的值 - 123 - xx matchFields: <[]Object> #匹配字段的 - key: <string> -required- values: <[]string> namespaces: <[]string> #labelSelector需要选则一组资源,那么这组资源是在哪个名称空间中呢,通过namespace指定,如果不指定namespaces,那么就是当前创建pod的名称空间 topologyKey: <string> -required- #位置拓扑的键,这个是必须字段,node名称/node标签 tolerations: #Pod容忍度 - key: "node-type" #key值 operator: "Equal" #等值关系,等于 value: "production" #node-type/production:NoSchedule effect: "NoExecute" #策略 tolerationSeconds: 3600 #表示可以多存活3600秒,一般不用 initContainers: #初始化容器,可以有多个 - name: init-myservice #初始化容器名称 image: busybox:1.28 #镜像名称,container的image一般一致 command: ['sh', '-c', "until nslookup myservice.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for myservice; sleep 2; done"] - name: init-mydb #初始化容器名称 image: busybox:1.28 #镜像名称,container的image一般一致 command: ['sh', '-c', "until nslookup mydb.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for mydb; sleep 2; done"] containers: <[]Object> -required- #containers是对象列表,用来定义容器的,是必须字段。对象列表 表示下面有很多对象,对象列表下面的内容用 - 连接 - name: #容器名称 env: #环境变量 - xx: xx command: <[]string> #命令 image: <string> #镜像 imagePullPolicy: [Always | Never | IfNotPresent] #镜像拉取策略,pod是要调度到node节点的,那pod启动需要镜像,可以根据这个字段设置镜像拉取策略,支持如下三种: #Always:不管本地是否存在镜像,都要重新拉取镜像 #Never: 从不拉取镜像 #IfNotPresent:如果本地存在,使用本地的镜像,本地不存在,从官方拉取镜像 args: [string] #容器的启动命令参数列表 workingDir: string #容器的工作目录 restartPolicy: [Always | Never | OnFailure] #Pod的重启策略,Always表示一旦不管以何种方式终止运行,kubelet都将重启,OnFailure表示只有Pod以非0退出码退出才重启,Nerver表示不再重启该Pod nodeSelector: obeject #设置NodeSelector表示将该Pod调度到包含这个label的node上,以key:value的格式指定 hostNetwork: false #是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络 imagePullSecrets: #Pull镜像时使用的secret名称,以key:secretkey格式指定 - name: string ports: <[]Object> #port是端口,属于对象列表 - containePort: #containerPort是必须字段, pod中的容器需要暴露的端口 hostIP: <string> #将容器中的服务暴露到宿主机的端口上时,可以指定绑定的宿主机 IP。 hostPort: <integer> #容器中的服务在宿主机上映射的端口 name: <string> #端口的名字 protocol: <string> #协议tcp,udp resources: #资源限额 limits: #资源限制,最多可用的cpu和内存 memory: 500Mi cpu: 1 requests: #最少需要多少资源才可以运行Pod memory: 250Mi cpu: 500m startupProbe: #启动探测 httpGet: host: 127.0.0.1 path: /health port: 2381 scheme: HTTP initialDelaySeconds: 10 #容器启动后等待多少秒后开始探测 periodSeconds: 10 failureThreshold: 10 exec: tcpSocket: readinessProbe: #对Pod内个容器健康检查的设置,当探测无响应几次后将自动重启该容器,检查方法有exec、httpGet和tcpSocket,对一个容器只需设置其中一种方法即可 httpGet: #对Pod内个容器健康检查方法设置为HttpGet,需要制定Path、port host: 127.0.0.1 path: /health port: 2381 scheme: HTTP HttpHeaders: - name: string value: string initialDelaySeconds: 10 #容器启动后等待多少秒后开始探测 periodSeconds: 10 #对容器检查的时间间隔,单位秒,默认10秒一次 successThreshold: 1 #这个值必须是1,存活探测中的值,连续探测几次成功,才认为成功 timeoutSeconds: 15 #对容器健康检查探测等待响应的超时时间,单位秒,默认1秒 failureThreshold: 8 #连续探测失败的次数,达到次数认为探测失败 exec: tcpSocket: livenessProbe: #对Pod内个容器健康检查的设置,当探测无响应几次后将自动重启该容器,检查方法有exec、httpGet和tcpSocket,对一个容器只需设置其中一种方法即可 httpGet: #对Pod内个容器健康检查方法设置为HttpGet,需要制定Path、port host: 127.0.0.1 path: /health port: 2381 scheme: HTTP HttpHeaders: - name: string value: string initialDelaySeconds: 10 #容器启动后等待多少秒后开始探测 periodSeconds: 10 #对容器检查的时间间隔,单位秒,默认10秒一次 successThreshold: 1 #这个值必须是1,存活探测中的值,连续探测几次成功,才认为成功 timeoutSeconds: 15 #对容器健康检查探测等待响应的超时时间,单位秒,默认1秒 failureThreshold: 8 #连续探测失败的次数,达到次数认为探测失败 exec: tcpSocket: volumeMounts: #挂载到容器内部的存储卷配置 - mountPath: /var/lib/etcd #存储卷在容器内mount的绝对路径,应少于512字符 name: etcd-data #引用pod定义的共享存储卷的名称,需用volumes[]部分定义的的卷名 - mountPath: /etc/kubernetes/pki/etcd name: etcd-certs 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 path: string
继续阅读

我的微信
这是我的微信扫一扫
评论