必威体育Betway必威体育官网
当前位置:首页 > IT技术

pod管理

时间:2019-10-06 15:15:30来源:IT技术作者:seo实验室小编阅读:71次「手机版」
 

pod

pod管理包括但不限于:

- 创建、删除、更新、查询

- 资源限制

- 调度约束

- 重启策略

- 健康检查

- 问题定位

概述


pod是k8s集群中最小的单元,一个pod可以包含一个容器,也可以包含多个容器。

这里写图片描述

创建/查询/更新/删除

创建pod对象

通过pod.yaml来创建pod对象。

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    APP: nginx
spec:
  containers:
  - name: nginx
    image: nginx

然后通过命令kubectl create -f pod.yaml执行创建pod对象。

通过kubectl get pod -o wide查看到刚创建的pod:

这里写图片描述

查询pod信息

查询pod就通过下面的命令查看:

// 查看pod信息
kubectl get pod

// 详细查看pod信息
kubectl get pod -o wide

// 查看指定namespace的pod(默认default不需要指定)
kubectl get pod -n [namespace]

// 查看pod描述
kubectl describe pod [podname]

删除pod

kubectl delete pod [podname]

这里写图片描述

还可以指定创建pod时的yaml文件进行删除指定的pod:

kubectl delete -f pod.yaml

更新pod

更新pod必须先删除pod然后创建新的。

这里在上一步删除之后,先修改pod.yaml文件,将镜像升级到1.12:

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.12

然后重复开始创建的一部执行命令:

kubectl create -f pod.yaml

这里写图片描述

这里写图片描述

更新成功了。

还有一个方法是修改yaml文件后执行命令kubectl replace -f pod.yaml --force来用新的yaml生成的pod替换原有的pod。这里使用--force参数是因为在替换的时候可能会失败,所以使用这个参数表示强制替换。

这个命令的原理也是先删除原有pod,再创建新的pod

资源限制


限制pod的资源是为了防止异常的情况下导致资源占用过多使得宿主机甚至服务响应慢或者不可用的情况。

在创建pod的时候指定pod资源,编辑pod_res.yaml文件:

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"

其中resources字段就是限制资源的,requests是保证最小使用的情况,limits保证容器使用资源不超过这个限制。上边的配置就表示:内存最小64M最大不超过128M,CPU最小250m最大不超过500m。这种限制是交给docker进行限制的。

现在创建这个具有限制条件的pod:

kubectl create -f pod_res.yaml

然后通过kubectl describe pod nginx-pod查看这个pod的详细信息,其中可以看到这个资源限制部分的内容

这里写图片描述

调度约束


例如在一个集群中拥有两套环境,假设想要让pod跑在某一个节点上就需要对pod进行调度约束:

调度约束的方式有两种:

Pod.spec.nodeName 强制约束Pod调度到指定Node节点上

Pod.spec.nodeSelector 通过lable-selector机制选择节点

Pod.spec.nodeName方式

编辑pod_direct.yaml文件:

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec: 
  nodeName: 10.10.99.228
  containers:
  - name: nginx
    image: nginx

其中nodeName就指定pod部署节点位置。

然后创建这个pod:

kubectl create -f pod_direct.yaml

查看是否部署在了指定的节点上:

这里写图片描述

Pod.spec.nodeSelector方式

这个方式是通过匹配节点的标签来将pod部署在指定的node上的,所以节点必须先打好标签:

kubectl label node 10.10.99.228 env_role=dev

查看刚打的标签:

这里写图片描述

更改pod_direct.yaml文件:

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod2
  labels:
    app: nginx
spec:
  nodeSelector:
    env_role: dev
  containers:
  - name: nginx
    image: nginx

创建这个pod(注意这个pod名字叫nginx-pod2)

kubectl create -f pod_direct.yaml 

查看分配情况:

这里写图片描述

重启策略


重启策略有三种:

Always:当容器停止,总是重建容器,默认策略。

OnFailure:当容器异常退出(退出状态码非0)时,才重启容器。

Never:当容器终止退出,从不重启容器。

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx
    restartPolicy: OnFailure

只需要在yaml文件中的containers这一级指定restartPolicy就可以了。

健康检查


在k8s集群中,如果容器出现异常,那么默认情况下k8s会重建这个容器。但是如果容器中的程序出现异常,k8s则还会认为这个容器是正常的,依旧将请求转发到这个容器。

Probe检查机制

提供Probe机制,有以下两种类型:

livenessProbe:如果检查失败,将杀死容器,根据Pod的restartPolicy来操作。

readinessProbe:如果检查失败,Kubernetes会把Pod从service endpoints中剔除。

Probe检查方法

Probe支持以下三种检查方法:

httpGet:发送HTTP请求,返回200-400范围状态码为成功。

exec:执行Shell命令返回状态码是0为成功。

tcpsocket:发起TCP Socket建立成功。

实例

在创建pod的时候指定健康检查方式(pod_healthcheck.yaml):

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
    - containerPort: 80
    livenessProbe:
      httpGet:
        path: /index.html
        port: 80

这里是采用了httpGet方式,判断服务80端口的http返回结果,首先创建容器:

kubectl create -f pod_healthcheck.yaml

这里写图片描述

pod已经建立

通过命令kubectl describe pod nginx-pod可以看到健康检查的配置:

这里写图片描述

他就会不断请求这个web服务的页面,判断返回值。

也可以通过观察这个pod服务的日志来查看检查请求:

kubectl log nginx-pod

这里写图片描述

通过命令进入容器删除检测的页面:

 kubectl exec -it nginx-pod bash
 rm -f /usr/share/nginx/html/index.html

这里写图片描述

检查返回404错误状态

通过pod的事件可以看到整个过程:检测到404后删除pod并重建:

这里写图片描述

问题定位

一般是通过常用的三个指令:

// 查看pod具体信息
kubectl describe pod [podname]

// 查看pod日志
kubectl log [podname]

// 连接pod
kubectl exec -it [podname] bash

相关阅读

ipod如何同步音乐 itunes怎么同步音乐到ipod

iPod是全球知名品牌苹果推出的一款优秀音乐播放器,不过很多小白朋友购买iPod后,不知道如何往iPod里边添加音乐,下面seo实验室小编就

DNSPod吴洪声:从草根站长到创业者的旅途

每当我们听到兴趣是成功的先导、有了兴趣,就成功了一半等哲言时,总无法深刻的领会到其中的含义,因为有时候我们往往因为背负太大的社

苹果AirPods致癌? 苹果:可以放心使用,不用担心辐射问题

A5创业网(公众号:iadmin5)3月15日消息,近日有媒体报道称,来自全球40个国家的250名科学家联名向世卫组织和联合国发出请愿书,警告不要大

2019新款iPod Touch配置如何 2019款iPod Touch配置及

2019新ipodtouch怎么样?配置如何?值得入手吗?下面小编带来2019款iPod Touch配置及售价介绍,希望对大家有所帮助。2019年5月28日苹果推

小问智能耳机增强版TicPods Free Pro拆解全过程图解评

小问智能耳机增强版TicPods Free Pro是一款TWS真无线耳机,真正能做到随时在线、智能交互和跨设备联动。相比AirPods的蓝牙属性,出门

分享到:

栏目导航

推荐阅读

热门阅读