
正文
linux重启pod命令 linux重启named
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
Kubernetes如何管理pod更高可用
如果容器直接启动失败(如业务进程异常退出),那么Kubelet会尝试 在本机重启容器,尝试间隔时间按照指数递增(10s,20s,40s...),最长不超过5分钟 。
当业务容器启动成功后, Kubelet只能知道容器已经处于运行状态,但容器里面运行应用的真实状态就不得而知了。 为此,Kubelet引入了 探针 机制,Kubelet支持两种探针LivenessProbe和ReadinessProbe。
LivenessProbe( 存活探针):探测容器中的应用是否正在运行。如果探测失败,Kubelet会终止容器,并根据“重启策略”重建容器。如果设置存活探针,默认状态为Success,LivenessProbe的SuccessThreshold为1。
ReadinessProbe( 绪探探针):探测容器中,应用是否准备好服务请求。如果探测失败,端点控制器将从与Pod匹配的所有Service端点中删除该Pod的IP地址。初始延迟之前的就绪状态默认为Failure。如果容器不提供就绪探针,则默认状态为Success。
那么在什么条件下使用存活(liveness)或就绪(readiness)探针呢?
如果容器中的应用能够在遇到问题或不健康的情况下自行崩溃,则不一定需要存活探针,Kubelet根据Pod的restartPolicy自动执行正确的操作。
如果应用在故障时仍然保持运行状态不退出,则需要借助 存活探针 ,探测服务真实状态,并指定restartPolicy为Always或OnFailure。
应用启动是需要时间的。为了避免容器刚启动(此时应用还未启动)时,kube-proxy就直接将流量导入容器引发的错误,需要引入 就绪探针 。探测成功后,才开始将业务流量导入Pod。(如果是多个副本,根据业务量进行弹缩副本,引入就绪探针,外部访问时就可以避免访问到还没有启动完成的pod。如果是单个副本或者固定副本数,个人觉得并不需要就绪探针)
通常存活探针和就绪探针使用相同的探测方式来检测应用状态:
1)ExecAction:在容器内执行指定命令。如果命令退出时,返回码为0,则认为探测成功。
2)TCPSocketAction:对指定端口上的容器IP地址进行TCP检查。如果端口打开,则诊断为成功。这个可以理解为telnet端口,查看是否被监听。
3)HTTPGetAction:对指定的端口和路径上的容器IP地址发送HTTP Get请求。如果响应的状态码大于等于200,并且小于400,则认为探测成功。
在一个Pod的生命周期中,Kubernetes提供了两个钩子函数,一个是容器启动之后PostStart,另一个是容器关闭前PreStop。
由于PostStart和容器Entrypoint是异步执行的,Kubernetes并不能保证PostStart一定是在Entrypoint之后执行的,但如果PostStart一直无法结束,那么Pod将无法进入Running状态,所以PostStart通常可以在短时间内完成任务,不会驻留太长时间。
PreStop一定是在容器关闭之前执行,执行完成后,才会继续执行关闭操作。如果PreStop在关闭时间(默认30s)之内无法完成时,将强制停止,并将关闭时间设置成2s,继续执行之后的关闭操作。
PostStart和PreStop的配置方式和探针配置非常相似,都支持Exec(命令行)和HTTP请求两种方式。
以上官网提供的一个PostStart和PreStop的案例,目的是在容器启动后输出一段内容到message文件中,以及在容器关闭前停止nginx服务。
另一个案例:SpringCloud应用都是通过统一的服务注册发现中心eureka,在应用的服务端添加preStop的hook可以完成容器关闭前,通知eureka摘除服务节点,从而避免客户端报错500。
Kubernetes通过资源调度算法将资源公平合理地分配给每一个Pod,从而能充分利用资源,达到资源的最优分配。集群资源有可能不足,为了保障高优先级任务的稳定运行,引入了 QoS的概念 。QoS通过释放低优先级任务占用资源,转移给高优先级任务,从而保障高优先级任务的执行,那么Kubernetes如何做到Pod分优先级的呢?Pod的QoS分级从高到低分为三个级别:Guaranteed、Burstable和Best-Effort。
Guaranteed 级别是指Pod中所有容器都必须设置limit。如果有一个容器设置了request,那么所有的容器都要设置,并且针对每个容器的request和limit必须相等。如果一个容器只设置了limit,而未设定request,则request值等于limit值。
Burstable 级别是指Pod中只要有一个容器的request和limit的设置不相同,该Pod的QoS即为Burstable。
Best-Effort 是指Pod中所有容器的request和limit均未设置。
疑问:容器的request和limit是人为设置的,那么QoS是Kubernetes根据人为设置的request和limit来自动判断是某个级别还是人为设置?
为了保证高优先级Pod(如果pod和容器是一对一,这个地方说是容器也可以)的稳定运行,Kubelet引入了Pod驱赶策略,将优先级较低的Pod驱赶到其他节点运行。那么何时会触发驱赶呢? Kubelet设置Pod的驱赶条件 主要包括memory.available(节点内存可用值)、nodefs.available (文件系统存储可用值)、nodefs.inodesFree(inode可用值)、imagefs.available(镜像文件系统存储可用值)和imagefs.inodesFree(镜像文件系统inode可用值)这五个指标。
备注:QoS三个级别是针对Pod所有资源的,包括Pod的内存和存储。此处的驱赶条件是某个节点上所有Pod的资源占用之和是否达到该节点上因资源的使用情况设置的驱赶条件(奇怪的是,没啥没有CPU资源?)。
如果Kubelet启动参数设置memory.available<10%或者memory.available<1Gi后,当Kubelet所在主机剩余可用内存不足10%或者1GB后,将会触发驱赶动作。
Kubelet驱赶的阈值分为软硬两个值,软阈值是指当节点满足该阈值后,Kubelet允许业务Pod优雅停止,硬阈值则是会触发Kubelet强制杀死Pod并且会标注节点处于不健康状态(内存不足MemoryPressure、磁盘不足DiskPressure),从而阻止新Pod在调度时候分配到该节点。
除了上面介绍的QoS优先级以外,在Kubernetes 1.8版本引入了 PriorityClass(优先级)和Preemption(抢占) 功能,但直到Kubernetes 1.14,该功能才进入稳定版本。之前版本的 Scheduler 在出现资源不足时,新的容器将会一直处于等待调度状态(Pending),直到运维人员手动添加新资源,或者删除其他容器后,这些容器才有可能被重新调度。为了保障高优先级任务的执行,引入了Pod优先级和抢占机制,这保证了高优先级的任务首先被调度,并且在整个集群资源不足的情况下,终止低优先级任务,从而保障高优先任务的稳定执行。
在驱赶后,主机上面的资源可能仍然无法满足要求,此时便会触发Linux内核的OOM killer,它会终止优先级较低的进程,保障系统继续运行。
在Kubelet启动容器时,不同优先级的容器会设置对应的OOM分数(分数越大,优先级越低,在资源不足时,将首先被回收),默认的OOM分数如下。
Burstable级别Pod的OOM分数则是通过下面公式计算得出的,可见Pod申请的内存越多,OOM分数越低,优先级越高。
为了保障Pod不被OOM,请将优先高的任务设置成guaranteed。
之后的Kubernetes又引入了亲和(Affinity)和反亲和(Anti-affinity)调度策略,可以更加灵活地设置容器和容器,以及容器和节点之间的调度关系。亲和和反亲和策略主要分为3个场景:节点亲和、Pod亲和及Pod反亲和,每种场景下都有两种策略:RequiredDuringSchedulingIgnoredDuringExecution (调度时必须满足规则)和PreferredDuringScheduling IgnoredDuringExecution(调度时可选满足规则)。
通过上面的亲和/反亲和策略能够很好地控制容器调度到某些节点。除此外,Kubernetes还提供一种排除策略,控制容器不调度到某些节点上,通过为主机添加Taint (污点)和为Pod添加Tolerations(容忍)的方式完成。
节点支持设置3种污点策略:NoSchedule (严格不调度)、PreferNoSchedule(最好不调度)及NoExecute(不允许运行)。当节点被设置为污点后,只有设置容忍测量Pod才能调度这个节点。
相关问答
Q1: linux怎么看数据库监听是否启动
查看Oracle数据库监听是否启动应使用lsnrctl命令,命令如下
$ lsnrctl status
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ocm1.oracle.domain)(PORT=1521)))
STATUS of the LISTENER
————————
Alias LISTENER
Version TNSLSNR for Linux: Version 10.2.0.1.0 – Production
Start Date 17-MAY-2011 21:03:40
Uptime 0 days 0 hr. 2 min. 49 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/10.2.1/db/network/admin/listener.ora
Listener Log File /u01/app/oracle/product/10.2.1/db/network/log/listener.log
Listening Endpoints Summary…
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ocm1.oracle.domain)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ocm1.oracle.domain)(PORT=1522)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ocm1.oracle.domain)(PORT=1600)))
Services Summary…
Service “POD” has 1 instance(s).
Instance “POD”, status READY, has 1 handler(s) for this service…
Service “POD1″ has 1 instance(s).
Instance “POD”, status UNKNOWN, has 1 handler(s) for this service…
Service “PODS” has 1 instance(s).
Instance “POD”, status READY, has 2 handler(s) for this service…
Service “pod_XPT” has 1 instance(s).
Instance “POD”, status READY, has 1 handler(s) for this service…
Service “repos” has 2 instance(s).
Instance “repos”, status UNKNOWN, has 1 handler(s) for this service…
Instance “repos”, status READY, has 1 handler(s) for this service…
Service “repos_XPT” has 1 instance(s).
Instance “repos”, status READY, has 1 handler(s) for this service…
The command completed successfully
lsnrctl命令常用参数:
$ lsnrctl status:检查当前监听器的状态
$ lsnrctl start [listener-name] 启动所有的监听器,可以指定名字来启动特定的监听器
$ lsnrctl stop [listener-name] 关闭所有的监听器,可以指定名字来关闭特定的监听器
$ lsnrctl reload 重启监听器,此命令可以代替lsnrctl stop,lsnrctl start
$ lsnrctl help 可以显示所有可用的监听器命令
Q2: linux查看pod启动状态
linux查看pod启动状态步骤:
实验一:使用命令kube_pod_status_phase查看pod对应状态。
1.当pod中容器状态为ErrImagePull时使用命kube_pod_status_phase{pod=''}==1查看pod状态为Running。
2.当pod中容器状态为ImagePullBackOff时使用命令kube_pod_status_phase{pod=''}==1查看pod状态pending。
实验二使用命令kube_pod_container_status_running直接查看容器状态0代表异常、1代表正常:
1.当容器状态为CrashLoopBackOff时可查看到容器是异常的。
2.当容器状态为Completed查看到容器是异常的。
Q3: Kubernetes-Pod基本概念(六)
一个pod是一组紧密相关的容器,是一起运行在同一个工作节点上,以及同一个Linux命名空间中。每个pod就像是一个独立的逻辑机器,拥有自己的IP、主机名、进程等,运行一个独立的应用程序。
pod是逻辑主机,一个pod的所有容器都运行在同一个逻辑机器上,其他pod中的容器,即使运行在同一个工作节点上,也会出现在不同的节点上。即一个pod包含多个容器时,这些容器总是运行在同一个工作节点上,一个pod绝不可能跨多个工作节点。
举例 :
每个pod自有IP,包含1个或多个容器,每个容器运行一个应用进程
查看pod命令
$ kubectl get pods
READY:0/1 表示pod的单个容器显示为未就绪的状态;相反,1/1表示已就绪;
STATUS: Pending 表示pod处于挂起状态;相反,Running表示pod处于运行状态;
运行应用两大步骤:1)构建镜像并推送至镜像仓库中;2)K8s创建pod进行调度;
流程:
1)本地构建镜像;
2)推送镜像至镜像仓库;
3)kubectl创建并部署应用;
4)kubectl发出REST请求至REST API服务器;
5)创建pod并调度到工作节点;
6)kubelet收到通知;
7)kubelet告知Docker运行镜像;
8)Docker从镜像仓库中拉取镜像;
9)Docker创建并运行容器;
如果单个容器中运行多个不相关的进程,保持所有进程运行、管理它们的日志将很难,需要包含一种在进程崩溃时能够自动重启的机制,同事,这些进程都将记录到相同的标准输出中,很难确定每个进程分别记录的内容。
不能讲多个进程聚集在一个单独的容器中,需要pod将容器绑定在一起,并将它们作为一个单元进行管理,在包含容器的pod下,可以同时运行一些密切现骨干的进程,并为其提供相同的环境,此时这些进程就好像全部运行于单独的容器中,同时保持一定的隔离性。
k8s可以通过配置docker让一个pod内的所有容器共享相同的Linux命名空间(network、UTS命名空间、IPC命名空间),从而使容器都共享相同的主机名、网络名和IPC通信。
同一个pod中的容器运行的多个进程不能绑定到相同的端口号,否则会端口冲突(每个pod都有独立的端口空间,不同pod中的容器不会有端口冲突现象。)
同一个pod中的容器具有相同的loopback网络接口,所以容器可以通过localhost与同一个pod中的其他容器进行通信。
注意 :
容器不应该包含多个进程,pod也不应该包含多个并不需要运行在同一主机上的容器。如下图:
1)yaml中使用的kubernetes API版本和yaml描述的资源类型;
2)metadata:包括名称、命名空间、标签和关于该容器的其他信息;
3)spec:包含pod内容的实际说明,如pod的容器、卷和其他数据;
4)status:包含运行中的pod的当前信息,如pod所处的条件、每个容器的描述和状态,以及内部IP和其他基本信息。
描述信息:
1)该文件遵循Kubernetes API的v1版本;
2)描述的资源类型是pod;
3)资源名称为kubia-manual;
4)该pod由基于luksa/kubia镜像的单个容器组成;
5)容器名称为kubia;
6)容器监听的端口是8080;
按名称删除
$ kubectl delete po pod_name
其中, pod_name 为pod名称;删除命令指示uk8s终止该pod中所有容器,k8s向进程发送一个SIGTERM信号并等待一定的秒数(默认30s),使得其正常关闭,若未及时关闭,则通过SIGKILL终止进程。
删除多个pod
$ kubectl delete po pod_name1 pod_name2
多个pod删除使用空格隔开;
按照标签删除
$ kubectl depete po -l tag_key=tag_value
其中, tag_key 为标签健, tag_value 为标签值;
按照整个命名空间删除
$ kubectl delete ns namespace_name
其中, namespace_name 为命名空间名称
Q4: 如何在linux系统中使用ipod音乐软件更新ipod
A. iPod上运行的Linux使用的是改良过的ucLinux,这是一种在单片机上运行的Linux系统,但功能仍很完善。podzilla是iPod Linux上的GUI外壳程序(即图型化操作界面),在最新的iPodLinux installer里面自带了podzilla可选安装。podzilla有很多非官方版,可以实现不同功能。
B. iPod Linux不会删除原iPod固件,是双系统(iPod原Apple OS固件和iPod Linux)引导,一般不可能对你的iPod造成什么硬损伤,切换操作系统的方式是按“上一首”()。
C. iPod Linux可能会导致iPod停止响应,即死机。这时重新启动iPod即可(不同的iPod方式不同,请查阅iPod说明书)。
软硬件准备:
iPod updater: [url][/url]
苹果的官方软件,升级iPod内置的Apple OS之用;如果安装失败,可以用它来恢复iPod到原来的系统;
iPodLinux installer 最新版本: [url][/url]
iPod Linux的主程序,包括Linux操作系统和可选应用程序如podzilla;
iPodApplicationManager: [url][/url]
安装了Linux系统之后要装的应用程序管理工具,可以用它来安装Linux系统里面的应用软件;
硬件包括一台有USB接口的电脑,保证网络连接通畅,一定要能访问[url][/url] 和 [url][/url] 这两个网站(国外站点)。另外,电脑的操作系统最好是干净的,没有中什么病毒、也没什么系统错误;最最最重要的,是你要懂一点英文,高中水平就够了,因为安装软件是英文的~~~安装过程中要仔细看说明啊~~所谓磨刀不误砍柴功啊啊~~~
详细步骤:
1.先把上面所有东西准备齐全,注意供电局通知说今天会不会停电 - -!!...
2.用iPod updater更新iPod,文件会全丢了,如果有重要资料自己先做好备份(这一步是为了降低安装失败的风险,你可以不做,但是你一定要对自己人品有足够信心和面对失败的勇气);
3.连接iPod,默认已打开磁盘模式。如果没有进入磁盘模式,则电脑不会认出USB,这时需要手动进入磁盘模式,重启iPod,出现Apple LOGO的时候按住中间的白色按钮和播放/暂停键,就可以进入磁盘模式了。另外要注意的是,安装过程中千万别断开USB线;
4.运行iPodLinux installer,如果出现未找到iPod的提示,那么请检查USB接线和iPod是否打开了磁盘模式;
5.然后是一直next,如果问你要不要备份iPod的文件,如果你已经备份过了那就不选(如下图)。
这个时候要选一下默认启动哪个操作系统,如果你选的是apple OS那么要进入Linux只要重启nano之后按住“上一首”那个键不要松开就可以了,反之亦然。(如下图)
6.接着就是漫长的下载解压安装等待。。。你要做的就是看着安装进度条默默祈祷一切顺利不要停电;一些主要的下载进度如下:
当显示successfully什么什么的,那么恭喜你,安装成功了!
注意事项:
A. 选择路径的时候不要可以有中文,例如"C:\Documents and Settings\Administrator\桌面\iPodLinux"这样的路径就会出错。
B. iPodupdater一定要是苹果官方网站060323的版本或者更早版本,那个英文站点的Nike的版本会出问题。
C. 英文站点说那个iPodLinux-installer-2.2w.zip解压缩一定要放在d:/下,这样安装成功率高,应该无所谓吧,主要是A事项一定要注意- -!。
D. 安装成功之后,在Linux系统下,电脑的USB接口是认不出iPod的(据说通过1394火线口就可以,我没试过),只有切换到磁盘模式才可以,你可以切换到Apple OS打开磁盘模式。
E. 如果安装出错了,实在没办法搞定,那就恢复系统吧。。。详见最后面恢复方法。
应用程序管理器的安装:
如果你想玩在iPod上玩Doom(类似于CS的3D射击游戏,效果很好),那么需要——安装iPodApplicationManager(可选功能);
1.连接ipod后运行解压后的那个iPod Application Manager.BAT;
2.选择安装floydzilla,别的我没装;
3.等待。。。
4.恭喜大功告成
现在就可以进nano的Linux系统了。重启iPod nano,然后出现苹果标志之后,如果默认进入apple OS那么只要重启nano之后按住“上一首”那个键不要松开就可以了,反之亦然;
开机后当APPLE LOGO出现时,按住中间的白按钮和播放/暂停键,这时iPod会切换到移动硬盘模式,现在把iPod连到电脑上,用情况一里介绍的方法就可以恢复iPod原固件了。按住中间的白色按钮和播放/暂停键。
iPod Linux可以实现的功能:
最大的功能莫过于让nano可以看电影了,虽然只支持未解压缩过的.avi,但是开发小组还是相当勤奋的~~我们只有期待更多的格式支持了; 其次可以玩游戏,甚至是gameboy的模拟器都有;
另外注意,电影放在iPod根目录下面,然后用File Browser进行文件浏览,进那个hp文件目录里面就可以看见iPod上的所有资源了。
进入Linux的启动画面;
玩游戏iDOOM的画面;摄像头拍的,不清楚。。。
iPod Linux安装失败对策及恢复系统方法
重启ipod的方法:1-3代:按住*上面四个按钮中的中间两个约5秒;4代、Nano、Video:按住MENU键和中间的圆的确定按钮约5秒;
进入磁盘模式方法:重新启动iPod之后,当APPLE LOGO出现时,按住中间的白按钮和播放/暂停键,这时iPod会切换到移动硬盘模式,然后把iPod连到电脑上。
iPod Linux有可能会安装失败。但是随着软件开发团队的不断修正BUG已经很少了,主要就是要确保你自己的电脑是干净的系统,另外USB供电也要正常。
1.如果不能进入iPodLinux,而是显示一文件夹图标和一个惊叹号:
这时,把iPod连上电脑,在确认你已经开启iPod的磁盘模式的情况下(默认都是开启的),电脑仍会识别出iPod。然后,进入一个iPod根目录下的隐藏目录“iPod_Control”,再进入Device目录,下面有一个叫SysInfo的文件,用记事本打开它,找到“buildID:”,把后面的数字改小(如原来是0x02208000 现在改成0x02108000)。然后,运行APPLE的固件更新程序iPod updater恢复系统。
2.开机后,一直显示APPLE LOGO而没有动静,或者一直显示iPod Linux的小企鹅图标没有动静:这种情况下,重启iPod。重启iPod后,默认会进入原来的固件。如果仍然进入Linux,那么1-3代iPod:在出现APPLE LOGO时,按住上一首键(左侧那个)。4代、Nano、Video:在出现APPLE LOGO时,将机顶的HOLD键拨到红色锁定位置。
3.。。。这种情况我没遇到过,不过据说如果这样的话,你只有去APPLE修理中心了,千万别对维修员说你装了iPod Linux,死磕说是系统问题,论坛里有几个兄弟就是这样拿到了一个新的iPod~~~- -!
关于linux重启pod命令和linux重启named的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。








