二进制安装kubernetes1.14.1-pod基础-07

pod对象的相位

pod对象启动到完结,总会处于一下生命进程状态中
     Pending:       Api server将Pod资源 存入etcd中,但是尚未被调度完毕(例如: 资源不够 内存不足等),或者处于下载镜像中。
     Running:         Pod已经调度到某个子节点,并且已经被kubelet创建完毕并启动完毕,但是容器是否启动不确定。
     Successded:   Pod中的所有的容器都已经成功终止,并且不会被重启
     Failed:             所有容器被终止,但是至少有一个容器终止失败,返回了非0值的退出状态或者被系统终止。
     Unknown:        Api server 无法正常获取到Pod对象(例如:健康状态)的信息。通常是无法和子节点的kubelet通信导致的。

pod创建过程

用户传输提交创建一个Pod,会把次请求调度到Api server,Api server 会把用户未指定的参数按照默认字段的默认值自动补全,然后把请求调度资源存储到etcd数据库中,然后Api server会把一个创建Pod的监控事件通知给Scheduler,  这时候Scheduler会自动监控Pod的创建,然后通过bind算法把Pod的创建(可能是根据资源)的结果返还给Api server,然后Api server会把此结果填充到etcd中,这时候Api server 会把创建Pod的请求发个对应的节点主机Kubelet,对应子节点的kubelet会通过Api server把存储在etcd的数据pod的所有属性调度到本地的docker服务,然后创建容器,创建完成与否都会把结果反馈到本机的kubelet,kubelet把实际结果状态提交给Api server,然后Api server把Pod的实际状态填写到etcd中。

pod的重启机制

Pod的对象应为容器程序崩溃或者容器申请的资源超出限制资源等原因都会导致容器被终止,此时是否应该重启取决于其重启机制(restartPolict)
Always:        只要Pod对象终止就重启,默认策略
NoFaikure:仅仅在Pod对象出现错误时,才重启
Never:        从不重启

Pod终止过程

客户端请求删除一个Pod,会把这个请求发送给 Api server,Api server会把删除Pod记录存储到etcd中,并不会立即删除此Pod(防止正在运行访问的程序进程被误删除),等待30s宽限期。然后把删除请求访问发送到节点的kubelet,然后通过docker删除正在运行的容器。在返回最终结果到Api server,通过Api server到etcd数据库删除对应Pod的数据库对象。

pod级别安全上下文 securityContext

管理容器安全方面的
[[email protected] ~]# kubectl  explain  pods.spec.securityContext
    fsGroup <integer>:             适用于pod中所有容器的特殊补充组
    runAsGroup  <integer>:      容器内容只能按照定义的组运行 groupid号
    runAsNonRoot    <boolean>:容器内容只能按照定义的非管理员用户运行 true|false(可以使用管理员)
    runAsUser   <integer>:          容器内容只能按照定义的用户运行 id号
    seLinuxOptions  <Object>:   启用selinux管理安全防护,主节点要支持selinux
    supplementalGroups  <[]integer>:额外补充附属组运行
    sysctls <[]Object>:       设定为你的运行容器设定运行内核参数

容器级别安全上下文 securityContext 只针对单个容器设定

[email protected] ~]# kubectl  explain  pods.spec.containers.securityContext
    allowPrivilegeEscalation    <boolean>: true|falase  允不允许以管理员身份运行 AllowPrivilegeEscalation始终为真
    capabilities    <Object>:      运行容器时添加/删除功能
    privileged  <boolean>:     true|false  以特权模式运行容器
    procMount   <string>:         procMount表示要用于容器的proc挂载的类型
    readOnlyRootFilesystem  <boolean>:   此容器是否具有只读根文件系统。默认的是假
    runAsGroup  <integer>:       用于运行容器进程用户组的GID
    runAsNonRoot    <boolean>:  指示容器必须作为非根用户运行
    runAsUser   <integer>:       用于运行容器进程用户的UID
    seLinuxOptions  <Object>:要应用于容器的SELinux上下文。如果未指定的,容器运行时将为每个对象分配一个随机的SELinux上下文容器。也可以在PodSecurityContext中设置。如果同时设置中指定的值SecurityContext优先。
            # 设置容器可以调用那些内核参数capabilities
        [[email protected] ~]# kubectl  explain  pods.spec.containers.securityContext.capabilities
   KIND:     Pod
   VERSION:  v1
   RESOURCE: capabilities <Object>
   DESCRIPTION:
        The capabilities to add/drop when running containers. Defaults to the
        default set of capabilities granted by the container runtime.
        Adds and removes POSIX capabilities from running containers.
   FIELDS:
      add   <[]string>
        Added capabilities
      drop  <[]string>
        Removed capabilities

Pod设置优先级 priorityClassName

[[email protected] ~]# kubectl  explain  pods.spec.priorityClassName

Pod 设置容器级别的操作系统 资源(CPU,内存)占用

Kubernetes 作为当下最流行的的容器集群管理平台,需要统筹集群整体的资源使用情况,将合适的资源分配给pod容器使用,既要保证充分利用资源,提高资源利用率,又要保证重要容器在运行周期内能够分配到足够的资源稳定运行。
    对于一个pod来说,资源最基础的2个的指标就是:CPU和内存。
Kubernetes提供了个采用requests和limits 两种类型参数对资源进行预分配和使用限制。
limit 会限制pod的资源利用:
当pod 内存超过limit时,会被oom。
当cpu超过limit时,不会被kill,但是会限制不超过limit值。

[[email protected] ~]# kubectl  explain  pods.spec.containers.resources
   limits: 资源上限
         requests: 资源下限

.
[[email protected] ~]# vim memory-pod.yaml

     apiVersion: v1
     kind: Pod
     metadata:
       name: cpu-memory
                 namespace: prod
     spec:
       containers:
         name: cpustrace
         image: nginx
         command: ["/usr/bin/ab","-c 100","-n 10000","localhost:8080/login"]
         resources:
           requests:
              memory: "128Mi"
              cpu: "200m"   #设置0.2颗cpu
           limits:
              memory: "512Mi" #设置最大使用内存512M
              cpu: "400m"  #设置最大0.4颗cpu
.
            resources:
                requests:
                   memory: "128Mi"
                   cpu: "1"   #设置1颗cpu
                limits:
                   memory: "512Mi" #设置最大使用内存512M
                   cpu: "2"  #设置最大使用2颗cpu
       超过内存设置 报错OOM信息

原文地址:https://blog.51cto.com/9025736/2400832

时间: 2024-11-13 00:10:54

二进制安装kubernetes1.14.1-pod基础-07的相关文章

二进制安装kubernetes1.14.1-pod配置清单之客户端访问方式03

查看pod配置清单 参考: (https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.14/) [[email protected] ~]# kubectl explain pods.metadata.[.........] [[email protected] ~]# kubectl explain pods.spec.[........] 开放端口+ip地址访问:此处的一旦绑定,只能指定的ip或者端口访问 [[emai

二进制安装kubernetes1.14.1初次尝试-02

查看资源类型 查看多少个控制器 kubectl get deploy 查看多少个控制器 = kubectl get deployments 创建名称空间资源 namespace数据集群资源 kubectl create -h [[email protected] .ssh]# kubectl create namespace develop #创建develop名称资源空间 namespace/develop created [[email protected] .ssh]# kubectl c

二进制安装kubernetes1.14.1-pod配置清单之资源注解04

资源注解 annotate 注解也是 键值 类型的数据,但是不能用于被标签选择器用于标签和挑选对象,仅仅用于提供 资源元数据接口. 注解中的元数据不受字符限制,键值前缀可以很长,键值和键不能超过63个字符,但是字符可以为结构化或者非结构化的形式(可以是 数组或者数字等 ),也支持使用在标签中,但是禁止使用其他字符. 在新版本中,为一些资源引入新字段时,常用注解的方式提供,防止增删改等困扰,一旦引用到会淘汰相关的注解. 后期的一些pod资源管理软件 可能会使用注解进行pod管理. 查看资源注解 语

使用kubeadm在CentOS上搭建Kubernetes1.14.3集群

练习环境说明:参考1 参考2 主机名称 IP地址 部署软件 备注 M-kube12 192.168.10.12 master+etcd+docker+keepalived+haproxy master M-kube13 192.168.10.13 master+etcd+docker+keepalived+haproxy master M-kube14 192.168.10.14 master+etcd+docker+keepalived+haproxy master N-kube15 192.

mysql二进制安装,升级,多实例部署

目标 理解线上部署考虑的因素 学会编译安装以及二进制安装mysql 学会升级mysql 学会多实例部署mysql数据库 学会合理部署mysql线上库 考虑因素: 版本选择,5.1,5.5还是5.6? 分支选择,官方社区版?percona server?mariadb? 推荐官方版,简单易上手 安装方式,包安装?二进制包安装?源码安装? 线上推荐二进制包安装 路径配置,参数配置(尽量模板化,标准化) 一个实例多个库,or多个实例单个库? 二进制安装mysql 下载软件安装包 解压放到指定目录(比如

k8s 二进制安装 1.11.0

本篇安装单个etcd,然后进行扩容etcd节点至2个.3个 二进制安装k8s 1.11.0 实验架构 master: 192.168.0.91 etcd node2: 192.168.0.92 node3: 192.168.0.93 1.环境配置 如下操作在所有节点操作 配置hosts解析 [[email protected]-10-1-1-8 k8s]# hostnamectl set-hostname master [[email protected]-10-1-1-68 ~]# hostn

二进制安装Prometheus

二进制安装Prometheus 服务器列表: 服务器名称 操作系统 IP地址 服务 test03 Ubuntu 16.04.4 192.168.1.58 Prometheus, Alertmanager,grafana test02 Ubuntu 16.04.4 192.168.1.57 Node_exporter 1.安装prometheus Prometheus官网下载地址:https://prometheus.io/download/ 下载prometheus [email protect

Ubuntu16.04安装kubernetes1.13集群

Ubuntu16.04安装kubernetes1.13集群 最新的安装可以使用以下方式:https://www.cnrancher.com/docs/rancher/v2.x/cn/overview/quick-start-guide 方便,快捷! 以下为正文. 前言 Docker容器化,虚拟化技术上的又一个猛将,可以极高提高软件部署的速度.运行一个Docker容器,这个容器作为一个进程分配了计算资源,不同容器之间资源隔离,仿佛每个容器都是一台机器, 并且通过宿主机网桥,可以模拟一个局域网.可以

在真机里安装 ubuntu 14.04和一些常用的软件(三)

在前面的基础上,最近使用ubuntu上网 看视频和用brackets 缩写PHP代码都可以了,不过我喜欢测试一些新的软件,最近安装了几个软件,在这儿记录一下. 第一.桌面美化软件--docky 和 Cairo-dock 安装都很方便,docky 直接在软件中心里安装就可以 安装完成,添加软件时的操作如下: 1.打开要添加的软件 2.在docky面板上看到图标,右键点击图标,有一个命令锁定在docky上,就可以了 cairo-dock:安装都先找到ppa 源再安装,命令如下: Add the PP