【kubernetes/k8s概念】pod 的 yaml 解释
apiVersion: v1kind: Pod可以看到由kind、apiVersion、metadata、spec和status等几个部分组成。1 kindkind表明对象。对象(objects):例如Pod、RC、Service、Namespace及Node等2 apiVersion表明API的版本号3 ...
apiVersion: v1
kind: Pod
可以看到由kind、apiVersion、metadata、spec和status等几个部分组成。
1 kind
kind表明对象。对象(objects):例如Pod、RC、Service、Namespace及Node等
2 apiVersion
表明API的版本号
3 metadata
资源对象的元数据定义,是集合类的元素类型,包含一组由不同名称定义的属性
- namespace:对象所属的命名空间,默认为“default”的系统命名空间
- name:对象的名字,在一个命名空间中名字应具备唯一性
- uid:系统为每个对象生成的唯一ID
此外,每种对象还应该包含以下几个重要元数据。
labels:map标签,通常用于标签选择器(Label Selector),用来匹配目标对象
- annotations:用户可定义的“注解”,map,被Kubernetes内部进程或者某些外部工具使用,用于存储和获取关于该对象的特定元数据。
- resourceVersion:用于识别该资源内部版本号的字符串,在用于Watch操作时,可以避免在GET操作和下一次Watch操作之间造成的信息不一致,客户端可以用它来判断资源是否改变。该值应该被客户端看作不透明,且不做任何修改就返回给服务端。
- creationTimestamp:记录创建对象时的时间戳
- deletionTimestamp:记录删除对象时的时间戳
- selfLink:通过API访问资源自身的URL,例如一个Pod的link可能是/api/v1/namespaces/ns36aa8455/pods/sc-cluster-test-1-6bc58d44d6-r8hld
metadata:
creationTimestamp: 2018-06-12T03:02:29Z
generateName: sc-cluster-test-1-6bc58d44d6-
labels:
kubeapp: sc-cluster-test-1
pod-template-hash: "2671480082"
name: sc-cluster-test-1-6bc58d44d6-r8hld
namespace: ns36aa8455
ownerReferences:
- apiVersion: extensions/v1beta1
blockOwnerDeletion: true
controller: true
kind: ReplicaSet
name: sc-cluster-test-1-6bc58d44d6
uid: 2d9b9fff-6dec-11e8-9290-005056839655
resourceVersion: "6674931"
selfLink: /api/v1/namespaces/ns36aa8455/pods/sc-cluster-test-1-6bc58d44d6-r8hld
uid: 0b0699db-6ded-11e8-9290-005056839655
4 spec
描述的主体部分都在spec里给出,持久化到etcd中保存,系统通过spec的描述来创建或更新对象,以达到用户期望的状态
spec:
containers:
- image: 10.12.40.217/paas-k8s/sc-cluster:latest
imagePullPolicy: Always
name: sc-cluster-test-1
ports:
- containerPort: 20888
name: 6f71997b94
protocol: TCP
resources:
limits:
cpu: "1"
memory: 1Gi
requests:
cpu: 500m
memory: 1Gi
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /data
name: sc-cluster-test-10
- mountPath: /var/run/secrets/kubernetes.io/serviceaccount
name: default-token-jtn4n
readOnly: true
dnsPolicy: ClusterFirst
nodeName: node7
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
serviceAccount: default
serviceAccountName: default
terminationGracePeriodSeconds: 30
volumes:
- hostPath:
path: /data
type: ""
name: sc-cluster-test-10
- name: default-token-jtn4n
secret:
defaultMode: 420
secretName: default-token-jtn4n
5 status
对象在系统中的当前状态信息以Pod为例,Pod的status信息主要包括conditions、containerStatuses、hostIP、phase、podIP、startTime等
- phase:对象所处的生命周期阶段,Pending(创建中)Running Active(正在运行中)Terminated(已终结)
- condition:表示条件,由条件类型和状态值组成,目前仅有一种条件类型Ready,对应的状态值可以为True、False或Unknown。一个对象可以具备多种condition,而condition的状态值也可能不断发生变化,condition可能附带一些信息,例如最后的探测时间或最后的转变时间。
status:
conditions:
- lastProbeTime: null
lastTransitionTime: 2018-06-12T03:04:52Z
status: "True"
type: Initialized
- lastProbeTime: null
lastTransitionTime: 2018-06-12T03:04:53Z
status: "True"
type: Ready
- lastProbeTime: null
lastTransitionTime: 2018-06-12T03:02:29Z
status: "True"
type: PodScheduled
containerStatuses:
- containerID: docker://65bc9886543f835e65be8afb9e7a12772ffd739f9035e33efeb7d3accb53ca54
image: 10.12.40.217/paas-k8s/sc-cluster:latest
imageID: docker-pullable://10.12.40.217/paas-k8s/sc-cluster@sha256:74e7b431c7bcac48ebfd0ee5b76bb75c10400dbf206f27fe1a0fe2a4cd1888c2
lastState: {}
name: sc-cluster-test-1
ready: true
restartCount: 0
state:
running:
startedAt: 2018-06-12T03:04:53Z
hostIP: 10.12.51.172
phase: Running
podIP: 10.233.100.159
qosClass: Burstable
startTime: 2018-06-12T03:04:52Z
pod phase 可能存在的值
- Pending: Pod 已经被 kubernetes 接收,但有一个或者多个容器镜像尚未创建,等待时间包括调度,Pod的时间和通过网络下载镜像的时间,可能需要些时间
- Running: 该 Pod 已经绑定到了一个节点上,Pod 中所有的容器都已被创建,至少有一个容器正在运行,或者正处于启动或重启状态
- Succeeded: Pod中所有的容器都被成功终止,并且不会在重启
- Failed: Pod中所有容器都已终止,并且至少有一个容器是因为失败终止(容器以非0状态退出或者被系统终止)
- Unknown: 因为某些原因无法获取 Pod 状态,通常因为与 Pod 所在主机通信失败
===============================================================================================
===============================================================================================
10. 对于 Deployment
对于 stragegy 指定更新 pod 的策略,recreate / rollingUpdate,默认值为 rollingUpdate。
recreate 在创建出新的 pod 之前会 kill 掉已存在的 pod
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 25%
type: RollingUpdate
maxSurge:1 表示滚动升级时会先启动 1 一个 pod 也就是在 DESIRED 数量基础上额外启动的 pod 数量,或者可以指定 maxSurge: 25% 意味着可以在 DESIRED 数量基础上先创建 DESIRED * 25% 数量个新 pod
maxUnavailable:指的是在滚动升级过程中,可以允许最大不可用 pod 个数
volumeMounts: #挂载 volumes - name: log-cache mount: /tmp/log - name: sdb #该卷跟随容器销毁,挂载一个目录 mountPath: /data/media - name: nfs-client-root #直接挂载硬盘方法,如挂载下面的nfs目录到/mnt/nfs mountPath: /mnt/nfs - name: example-config #高级用法第1种,将ConfigMap的key1,key2分别挂载到/etc/config目录下的一个相对路径path/to/...下,如果存在同名文件,直接覆盖。 mountPath: /etc/config - name: rbd-pvc #高级用法第2中,挂载PVC(PresistentVolumeClaim) #使用volume将ConfigMap作为文件或目录直接挂载,其中每一个key-value键值对都会生成一个文件,key为文件名,value为内容 volumes: - name: log-cache emptyDir: {} - name: sdb #挂载宿主机上面的目录 hostPath: path: /any/path/it/will/be/replaced - name: example-config #ConfigMap文件内容到指定路径使用 configMap: name: example-config #ConfigMap中名称 items: - key: key1 #ConfigMap中的Key path: path/to/key1 #指定目录下的一个相对路径path/to/key1 - key: key2 #ConfigMap中的Key path: path/to/key2 #指定目录下的一个相对路径path/to/key2 - 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磁盘
更多推荐
所有评论(0)