9、pod结构详解
每个Pod中都可以包含一个或者多个容器,这些容器可以分为两类:
一. pod的定义
下面是Pod的资源清单(经常用到的资源清单):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
| apiVersion: v1 kind: Pod metadata: name: string namespace: string labels: - name: string spec: containers: - name: string image: string imagePullPolicy: [ Always|Never|IfNotPresent ] command: [string] args: [string] workingDir: string volumeMounts: - name: string mountPath: string readOnly: boolean ports: - name: string containerPort: int hostPort: int protocol: string env: - name: string value: string resources: limits: cpu: string memory: string requests: cpu: string memory: string lifecycle: postStart: preStop: livenessProbe: exec: command: [string] httpGet: path: string port: number host: string scheme: string HttpHeaders: - name: string value: string tcpSocket: port: number initialDelaySeconds: 0 timeoutSeconds: 0 periodSeconds: 0 successThreshold: 0 failureThreshold: 0 securityContext: privileged: false restartPolicy: [Always | Never | OnFailure] nodeName: <string> nodeSelector: obeject imagePullSecrets: - name: string hostNetwork: false volumes: - name: string emptyDir: {} hostPath: string path: string secret: scretname: string items: - key: string path: string configMap: name: string items: - key: string path: string
|
1. 查看k8s的属性
小提示:
- 在这里,可通过一个命令来查看每种资源的可配置项
- kubectl explain 资源类型 查看某种资源可以配置的一级属性
- kubectl.explain 资源类型.属性 查看属性的子属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| [root@k8s-master01 ~] KIND: Pod VERSION: v1 FIELDS: apiVersion <string> kind <string> metadata <Object> spec <Object> status <Object>
[root@k8s-master01 ~] KIND: Pod VERSION: v1 RESOURCE: metadata <Object> FIELDS: annotations <map[string]string> clusterName <string> creationTimestamp <string> deletionGracePeriodSeconds <integer> deletionTimestamp <string> finalizers <[]string> generateName <string> generation <integer> labels <map[string]string> managedFields <[]Object> name <string> namespace <string> ownerReferences <[]Object> resourceVersion <string> selfLink <string> uid <string>
|
在kubernetes中基本所有资源的一级属性都是一样的,主要包含5部分:
- apiVersion 版本,由kubernetes内部定义,版本号必须可以用 kubectl api-versions 查询到
- kind 类型,由kubernetes内部定义,版本号必须可以用 kubectl api-resources 查询到
- metadata 元数据,主要是资源标识和说明,常用的有name、namespace、labels等
- spec 描述,这是配置中最重要的一部分,里面是对各种资源配置的详细描述(重要)
- status 状态信息,里面的内容不需要定义,由kubernetes自动生成
- status查看: kubectl get pod nginx-57f7cb8f64-jxk6s -n dev -o yaml 输入后会回显下方回显示状态
在上面的属性中,spec是接下来研究的重点,继续看下它的常见子属性:
- containers <[]Object> 容器列表,用于定义容器的详细信息
- nodeName 根据nodeName的值将pod调度到指定的Node节点上
- nodeSelector <map[]> 根据NodeSelector中定义的信息选择将该Pod调度到包含这些label的Node 上
- hostNetwork 是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络
- volumes <[]Object> 存储卷,用于定义Pod上面挂在的存储信息 (与docker中相同)
- restartPolicy 重启策略,表示Pod在遇到故障的时候的处理策略 (与docker中restart: always类似差不多)
hostNetwork上方主机网络:
下方IP 是k8s分给他的IP