• Pod介绍


    一、什么是Pod

    	Pod是Kubernetes中最小的单元,它由一组、一个或多个容器组成,每个Pod还包含了一个Pause容器,Pause容器是Pod的父容器,主要负责僵尸进程的回收管理,通过Pause容器可以使同一个Pod里面的多个容器共享存储、网络、PID、IPC等。
    

    二、如何定义一个Pod

    2.1、一份比较完整的yaml文件介绍

    apiVersion: v1  # 必选,API的版本号
    kind: Pod       # 必选,类型Pod
    metadata:       # 必选,元数据
      name: nginx   # 必选,符合RFC 1035规范的Pod名称
      namespace: default # 可选,Pod所在的命名空间,不指定默认为default,可以使用-n 指定namespace 
      labels:       # 可选,标签选择器,一般用于过滤和区分Pod
        app: nginx
        role: frontend # 可以写多个
      annotations:  # 可选,注释列表,可以写多个
        app: nginx
    spec:   # 必选,用于定义容器的详细信息
      initContainers: # 初始化容器,在容器启动之前执行的一些初始化操作
      - command:
        - sh
        - -c
        - echo "I am InitContainer for init some configuration"
        image: busybox
        imagePullPolicy: IfNotPresent
        name: init-container
      containers:   # 必选,容器列表
      - name: nginx # 必选,符合RFC 1035规范的容器名称
        image: nginx:latest    	    # 必选,容器所用的镜像的地址
        imagePullPolicy: Always     # 可选,镜像拉取策略
        command: # 可选,容器启动执行的命令
        - nginx 
        - -g
        - "daemon off;"
        workingDir: /usr/share/nginx/html       # 可选,容器的工作目录
        volumeMounts:   # 可选,存储卷配置,可以配置多个
        - name: webroot # 存储卷名称
          mountPath: /usr/share/nginx/html # 挂载目录
          readOnly: true        # 只读
        ports:  # 可选,容器需要暴露的端口号列表
        - name: http    # 端口名称
          containerPort: 80     # 端口号
          protocol: TCP # 端口协议,默认TCP
        env:    # 可选,环境变量配置列表
        - name: TZ      # 变量名
          value: Asia/Shanghai # 变量的值
        - name: LANG
          value: en_US.utf8
        resources:      # 可选,资源限制和资源请求限制
          limits:       # 最大限制设置
            cpu: 1000m
            memory: 1024Mi
          requests:     # 启动所需的资源
            cpu: 100m
            memory: 512Mi
    #    startupProbe: # 可选,检测容器内进程是否完成启动。注意三种检查方式同时只能使用一种。
    #      httpGet:      # httpGet检测方式,生产环境建议使用httpGet实现接口级健康检查,健康检查由应用程序提供。
    #            path: /api/successStart # 检查路径
    #            port: 80
        readinessProbe: # 可选,健康检查。注意三种检查方式同时只能使用一种。
          httpGet:      # httpGet检测方式,生产环境建议使用httpGet实现接口级健康检查,健康检查由应用程序提供。
                path: / # 检查路径
                port: 80        # 监控端口
        livenessProbe:  # 可选,健康检查
          #exec:        # 执行容器命令检测方式
                #command: 
                #- cat
                #- /health
        #httpGet:       # httpGet检测方式
        #   path: /_health # 检查路径
        #   port: 8080
        #   httpHeaders: # 检查的请求头
        #   - name: end-user
        #     value: Jason 
          tcpSocket:    # 端口检测方式
                port: 80
          initialDelaySeconds: 60       # 初始化时间
          timeoutSeconds: 2     # 超时时间
          periodSeconds: 5      # 检测间隔
          successThreshold: 1 # 检查成功为2次表示就绪
          failureThreshold: 2 # 检测失败1次表示未就绪
        lifecycle:
          postStart: # 容器创建完成后执行的指令, 可以是exec httpGet TCPSocket
            exec:
              command:
              - sh
              - -c
              - 'mkdir /data/ '
          preStop:
            httpGet:      
                  path: /
                  port: 80
          #  exec:
          #    command:
          #    - sh
          #    - -c
          #    - sleep 9
      restartPolicy: Always   # 可选,默认为Always
      #nodeSelector: # 可选,指定Node节点
      #      region: subnet7
      imagePullSecrets:     # 可选,拉取镜像使用的secret,可以配置多个
      - name: default-dockercfg-86258
      hostNetwork: false    # 可选,是否为主机模式,如是,会占用主机端口
      volumes:      # 共享存储卷列表
      - name: webroot # 名称,与上述对应
        emptyDir: {}    # 挂载目录
            #hostPath:              # 挂载本机目录
            #  path: /etc/hosts
    

    2.2、创建一个容器(maser01上)

    [root@k8s-master01 ~]# cat > pod.yaml << EOF  
    apiVersion: v1 # 必选,API的版本号
    kind: Pod       # 必选,类型Pod
    metadata:       # 必选,元数据
      name: nginx   # 必选,符合RFC 1035规范的Pod名称
      # namespace: default # 可选,Pod所在的命名空间,不指定默认为default,可以使用-n 指定namespace 
      labels:       # 可选,标签选择器,一般用于过滤和区分Pod
        app: nginx
        role: frontend # 可以写多个
      annotations:  # 可选,注释列表,可以写多个
        app: nginx
    spec:   # 必选,用于定义容器的详细信息
      containers:   # 必选,容器列表
      - name: nginx # 必选,符合RFC 1035规范的容器名称
        image: nginx:1.15.2    # 必选,容器所用的镜像的地址
        imagePullPolicy: IfNotPresent     # 可选,镜像拉取策略, IfNotPresent: 如果宿主机有这个镜像,那就不需要拉取了. Always: 总是拉取, Never: 不管是否存储都不拉去
        command: # 可选,容器启动执行的命令 ENTRYPOINT, arg --> cmd
        - nginx 
        - -g
        - "daemon off;"
        workingDir: /usr/share/nginx/html       # 可选,容器的工作目录
        ports:  # 可选,容器需要暴露的端口号列表
        - name: http    # 端口名称
          containerPort: 80     # 端口号
          protocol: TCP # 端口协议,默认TCP
        env:    # 可选,环境变量配置列表
        - name: TZ      # 变量名
          value: Asia/Shanghai # 变量的值
        - name: LANG
          value: en_US.utf8
      restartPolicy: Always   # 可选,默认为Always,容器故障或者没有启动成功,那就自动该容器,Onfailure: 容器以不为0的状态终止,自动重启该容器, Never:
    EOF
    
    # 创建一个pod
    [root@k8s-master01 ~]# kubectl create -f pod.yaml 
    pod/nginx created
    
    # 查看刚刚创建的Pod
    [root@k8s-master01 ~]# kubectl  get po
    NAME      READY   STATUS    RESTARTS   AGE
    busybox   1/1     Running   4          17h
    nginx     1/1     Running   0          5m24s
    
    [root@k8s-master01 ~]# kubectl  get po --show-labels
    NAME      READY   STATUS              RESTARTS   AGE   LABELS
    busybox   1/1     Running             4          16h   <none>
    nginx     0/1     Running   		  0          90s   app=nginx,role=frontend
    
    # 删除一个po
    [root@k8s-master01 ~]# kubectl delete po nginx
    pod "nginx" deleted
    

    三、Pod探针的检测方式

    ExecAction:在容器内执行一个命令,如果返回值为0,则认为容器健康
    
    TCPSocketAction:通过TCP连接检查容器内的端口是否是通的,如果是通的就认为容器健康
    
    HTTPGetAction:通过应用程序暴露的API地址来检查程序是否是正常的,如果状态码为200~400之间,则认为容器健康
    

    四、探针检查参数配置

    initialDelaySeconds: 60       # 初始化时间
    timeoutSeconds: 2    		  # 超时时间
    periodSeconds: 5    	      # 检测间隔
    successThreshold: 1 		  # 检查成功为1次表示就绪
    failureThreshold: 2 		  # 检测失败2次表示未就绪
    

    五、Pod退出流程

    Prestop:先去请求eureka接口,把自己的IP地址和端口号,进行下线,eureka从注册表中删除该应用的IP地址。然后容器进行sleep 90;kill `pgrep java`
    
    # 这个时间不一定是90s
    

  • 相关阅读:
    Object Modeling
    数据库的比较
    关系数据库与非关系数据库
    结构化查询语言-SQL
    SQLite
    acid (数据库事务正确执行的四个基本要素的缩写)
    UITableView设计思想 考察
    复杂软件的考虑点与UITableView
    设计模式与哲学
    复杂对象的组装与创建-建造者模式
  • 原文地址:https://www.cnblogs.com/hsyw/p/14169045.html
Copyright © 2020-2023  润新知