美文网首页k8s
四、Pod进阶

四、Pod进阶

作者: jan29 | 来源:发表于2021-11-22 23:26 被阅读0次

1、通过yaml文件创建pod

apiVersion: v1
kind: Pod
metadata:
  name: base-pod
spec:
  containers:
  - name: nginx
    image: nginx:1.14

apiVersion:api的版本,可以通过kubectl api-versions查看
kind:资源的类型
metadata:元数据描述,描述kind定义的资源类型的元数据
spec:用户期望的状态
status:容器创建后系统的状态

2、metadata字段

2.1namespace

apiVersion: v1
kind: Pod
metadata:
  name: base-pod
  namespace: default

命名空间,不同类型的pod运行在创建出来的不同的命名空间当中

2.2labels

apiVersion: v1
kind: Pod
metadata:
  name: base-pod
  namespace: default
  labels:
    app: nginx
    test: busybox

标签,pod的调度和其它资源选择pod时通过标签进行选择
通过key/value键值对的形式进行定义

2.3annotations

apiVersion: v1
kind: Pod
metadata:
  name: base-pod
  namespace: default
  labels:
    app: nginx
    test: busybox
  annotations:
    release: beta
    author: jan29

注解 与Label类似,也使用key/value键值对的形式进行定义。
用Annotation来记录的信息包括但不限于
1、build信息、release信息、Docker镜像信息等,例如时间戳、release id号、PR号、镜像hash值、docker registry地址等;
2、日志库、监控库、分析库等资源库的地址信息;
3、程序调试工具信息,例如工具名称、版本号等;
4、团队的联系信息,例如电话号码、负责人名称、网址等。

3、spec字段

3.1containers

用于定义容器,可以定义多个

3.1.1ports

spec:
  containers:
  - name: nginx
    image: nginx:1.14
    ports:
    - name: nginx
      containerPort: 80
      hostPort: 80

用于定义port
containerPort:用于定义容器开放的端口
hostIP:用于定义主机IP地址
hostPort:用于映射主机的端口
name:同于定义容器名字
protocol:用于定义端口协议

3.1.2imagePullPolicy

spec:
  containers:
  - name: nginx
    image: nginx:1.14
    ports:
    - name: nginx
      containerPort: 80
      hostPort: 80
    env:
    - name: LANG
      value: en_us.UTF-8
    - name: USER
      value: root
    imagePullPolicy: IfNotPresent

镜像拉取有三种策略
Always:总是从镜像仓库拉取
Never:重来不从镜像仓库拉取,只使用本地镜像
IfNotPresent:如果本地有就使用本地镜像,如果没有就从镜像仓库拉取

3.1.3livenessProbe存活性探测

spec:
  containers:
  - name: nginx
    image: nginx:1.14
    ports:
    - name: nginx
      containerPort: 80
      hostPort: 80
    env:
    - name: LANG
      value: en_us.UTF-8
    - name: USER
      value: root
    imagePullPolicy: IfNotPresent
    livenessProbe:
      tcpSocket:
        port: 80

用于探测容器是否存活
探测的策略有三种
exec:通过命令探测
httpGet:向指定地址发送get请求探测
tcpSocket:向指定端口发送请求探测

3.1.4readinessProbe就绪性探测

spec:
  containers:
  - name: nginx
    image: nginx:1.14
    ports:
    - name: nginx
      containerPort: 80
      hostPort: 80
    env:
    - name: LANG
      value: en_us.UTF-8
    - name: USER
      value: root
    imagePullPolicy: IfNotPresent
    livenessProbe:
      tcpSocket:
        port: 80
    readinessProbe:
      initialDelaySeconds: 5
      failureThreshold: 3
      successThreshold: 3
      periodSeconds: 1
      timeoutSeconds: 3
      httpGet:
        path: /
        port: 80

用于探测容器是否就绪
failureThreshold:连续探测失败几次认为该容器没有存活或就绪
successThreshold:连续探测成功几次认为该容器存活或就绪
initialDelaySeconds:容器启动几秒后开始探测
periodSeconds:探测周期,几秒钟探测一次
timeoutSeconds:探测超过多长时间没有相应认为超时

3.1.5lifecycle生命周期钩子

容器启动后或者容器推出前都可以进行相应的操作被称为钩子

3.1.5.1postStart启动后配置钩子
spec:
  containers:
  - name: busybox
    image: busybox
    command:
     - "/bin/sh"
    args:
     - "-c"
     - "sleep 3600"
    lifecycle:
      postStart:
        exec:
          command:
            - "/bin/sh"
            - "-c"
            - "ping -c 4 baidu.com"

创建钩子也有三种方式
exec,httpGet和tcpSocket

3.1.5.2prestop停止前配置钩子
spec:
  containers:
  - name: busybox
    image: busybox
    command:
     - "/bin/sh"
    args:
     - "-c"
     - "sleep 3600"
    lifecycle:
      postStart:
        exec:
          command:
            - "/bin/sh"
            - "-c"
            - "ping -c 4 baidu.com"
      preStop:
        exec:
          command:
            - "/bin/sh"
            - "-c"
            - "wget -O - -q https://baidu.com"

和prostStart相同配置

3.2restartPolicy

spec:
  containers:
  - name: nginx
    image: nginx:1.14
  restartPolicy: OnFailure

Pod重启策略也有三种
Always:只要退出就会重启
OnFailure:退出状态码不为1重启,也就是非正常退出重启
Never:从来不会重启

3.3nodeSelector

spec:
  containers:
  - name: nginx
    image: nginx:1.14
 restartPolicy: OnFailure
 nodeSelector:
     kubernetes.io/hostname: node2

选择一个标签匹配的节点进行调度
也可以通过nodeName进行指定

标签查看与创建分别可以使用以下命令

  • kubectl get <资源类型> --show-labels
  • kubectl label <资源类型> <资源名字> <key>=<value>

相关文章

  • 四、Pod进阶

    1、通过yaml文件创建pod apiVersion:api的版本,可以通过kubectl api-version...

  • 进阶-pod实战

    转发 请添加原作者地址 谢谢 转发 请添加原作者地址 谢谢 转发 请添加原作者地址 谢谢 组建场景 公司项目使用微...

  • Pod 高级进阶

    本文链接 https://www.jianshu.com/p/134092c8e105 configMap Con...

  • 4. kubernetes 资源清单 - pod进阶

    4. kubernetes 资源清单 - pod进阶 请依据kubernetes版本及官方文档 kubernete...

  • 九、Kubernetes 进阶之控制器篇

    上一章对Pod的一些配置进行了更深刻的了解,那对于管理Pod的Controller肯定也要进阶一下, 之前我们已经...

  • CocoaPods进阶:制作公有库

    一、 前言 在CocoaPods进阶:详解私有库制作这篇博客中,讲解记录了cocoapods使用pod lib c...

  • k8s网络配置DNS

    Pod 的四种DNS策略 Kubernetes支持Pod维度DNS策略设置,通过pod规约中dnsPolicy字段...

  • 进阶-pod 私有库命令

    1.生成模板工程 2.校验本地pod 校验spec文件 4.推送到远程 第一种情况,推送到github公共库 第二...

  • K8S快速入门(一)

    Kubernetes快速入门 一、四组基本概念: * Pod/Pod 控制器 * Name/Name...

  • 制作Pod库

    目录 一、公有Pod库制作 二、私有Pod库制作 三、subspec子库的制作 四、遇到的坑 一、公有Pod库制作...

网友评论

    本文标题:四、Pod进阶

    本文链接:https://www.haomeiwen.com/subject/oikitrtx.html