kkwen

Kubernetes之pod资源清单详细配置
Pod资源清单是k8s配置的基础,后续许多对象中都内嵌了Pod资源的主要配置,本节详细上配置示例以及Xmind格式图解
扫描右侧二维码阅读全文
01
2019/03

Kubernetes之pod资源清单详细配置

Pod资源清单是k8s配置的基础,后续许多对象中都内嵌了Pod资源的主要配置,本节详细上配置示例以及Xmind格式图解

Pod资源清单常用字段图示

pod资源清单.png

发部分资源清单基础配置

  • 大部分资源的基础配置清单:
apiVersion: group/version  #获取api-versions版本 kubectl api-versions
kind: 资源类别
metadata:元数据
    name: 资源名称
    namespace: 资源所属的名称空间
    labels: 资源的标签
    annotations:资源注解,每个资源的引用PATH => /api/GROUP/VERSION/namespace/NAMESPACE/TYPE/NAME
spec:期望的状态
status

pods.spec.containers

  • name、image
 - name <string>             # 容器名称
    image <string>             # 镜像资源
  • imagePullPolicy
    imagePullPolicy <string>  # 获取镜像的方式
    <str>:
      Always 总是去仓库中下载,如果镜像的标签是latest,默认值就是Always
      Never 本地有就使用,不下载
      IfNotPresent 本地存在就使用,不存在就下载
  • port
    ports <[]Object>
      - name: <string>
        containerPort: <port> 暴露容器端口,不暴露其实也能被访问,暴露只是被作用server映射时方便使用名称
  • command
command: <str>
    command和args以及docker的Entrypoint和Cmd的关系
      如果k8s中pod字段containers中没有定义了command和args,则都使用Docker中的Entrypoint和Cmd
      如果k8s中pod字段containers中只义了 command,则Docker中的Entrypoint和Cmd被忽略
      如果k8s中pod字段containers中只义了 args,则将args当做参数传递给Docker中的Entrypoint,Docker中的Cmd被忽略
      如果k8s中pod字段containers中定义了 command和args,Docker中的Entrypoint和Cmd被忽略
  • label
label:
    key:value
        key: 字母、数字、_、-、.
        value:可以为空,只能字母或数字开头及结尾
  • nodeSelector、nodeName、annotations
nodeSelector <map[string]string> # 节点标签选择器
nodeName <string> # 直接指定运行于哪个节点之上
annotations <string>
    与label不同的地方在于,它不能用于挑选资源对象,仅用于为对象提供元数据,可能被某些程序使用,字符串长度没有限制
    可使用describe查看annotations字段

Pod生命周期

  • Pod的状态有Pending、Running、Failed、Succeeded、Unknow
  • 图示
    Pod生命周期.png
  • Pod生命周期的重要行为
初始化容器
容器探测
  • 容器探测方式
liveness Probe: 存活性探测
readiness Probe: 就绪性探测
  • 容器重启策略
Always:总是重启,默认值,第一次重启会立即重启,而后会递归增加延时
OnFailure:只有重启状态为错误时,才重启,正常结束的容器不会重启
Never:从不重启
  • 容器探针类型
ExecAction: 执行系统命令
TCPSOcketAction:对套接字发起请求
HttpGet:发起HTTP请求
  • 容器钩子
postStart:容器启动后运行的脚本
preStop: 容器结束前运行的脚本

配置清单示例

  1. pod基础配置清单,启动Pod,运行命令
[root@ _56_ ~/k8s]# cat pod-example.yml 
apiVersion: v1
kind: Pod
metadata:
     name: pod-example
     namespace: default
     labels:
       app: myapp
       tier: frontend
spec:
     containers:
     - name: myapp
       image: ikubernetes/myapp:v1
     - name: busybox
       image: busybox:latest
       command:
       - "/bin/sh"
       - "-c"
       - "mkdir -p /usr/share/nginx/html/ ; date >> /usr/share/nginx/html/index.html; sleep 3600"
  1. Pod之暴露端口、拉取镜像方式、节点选择器
apiVersion: v1
kind: Pod
metadata:
     name: pod-demo
     namespace: default
     labels:
       app: myapp
       tier: frontend
     annotations:
       magedu.com/crerate-by: cluster admin
spec:
     containers:
     - name: myapp
       image: ikubernetes/myapp:v1
       ports:
       - name: http
         containerPort: 80
       - name: https
         containersPort: 443
     - name: busybox
       image: busybox:latest
       imagePullPolicy: IfNotPresent
       command:
       - "/bin/sh"
       - "-c"
       - "sleep 3600"
     nodeSelector:
       disktype: ssd
  1. livenessProbo
apiVersion: v1
kind: Pod
metadata:
     name: liveness-exec-pod
     namespace: default
spec:
     containers:
     - name: liveness-exec-container
       image: busybox:latest
       imagePullPolicy: IfNotPresent
       command: ["/bin/sh", "-c", "touch /tmp/healthy; sleep 30; rm -f /tmp/healthy; sleep 3600"]
       livenessProbe:
         exec:
           command: ["test", "-e", "/tmp/healthy"]
         initialDelaySeconds: 1
         periodSeconds: 3
  1. readnessProbe
apiVersion: v1
kind: Pod
metadata:
     name: readiness-httpget-pod
     namespace: default
spec:
     containers:
     - name: readiness-httpget-container
       image: ikubernetes/myapp:v1
       imagePullPolicy: IfNotPresent
       ports:
       - name: http
         containerPort: 80
       readinessProbe:
         httpGet:
           port: http
           path: /index.html
         initialDelaySeconds: 1
         periodSeconds: 3
  1. lifecycle之postStart和preStop
apiVersion: v1
kind: Pod
metadata:
     name: poststart-pod
     namespace: default
spec:
     containers:
     - name: busybox-httpd
       image: busybox:latest
       imagePullPolicy: IfNotPresent
       lifecycle:
         postStart:
           exec:
             command: ['mkdir', '-p', '/data/web/html']
       command: ['/bin/sh', '-c', 'sleep 3600']
最后修改:2019 年 03 月 04 日 08 : 33 AM
如果觉得我的文章对你有用,请随意赞赏

发表评论