Kubernetes基石-pod容器
引用三个问题来叙述Kubernetes的pod容器
1.为什么不直接在一个Docker容器中运行所有的应用进程。
2.为什么pod这种容器中要同时运行多个Docker容器(可以只有一个)
3.为什么k8s使用pod这种容器而不直接使用Docker容器
apiVersion: v1 #指定当前描述文件遵循v1版本的KubernetesAPI
kind: Pod #我们在描述一个pod
metadata:
name: kubia-manual #指定pod的名称
namespace: custom-namespace #指定当前描述的pod所在的命名空间
labels: #指定pod标签
creation_method: manual
env: prod
spec:
nodeSelector: #告诉k8s我们希望把当前pod部署到拥有指定标签的节点上,k8s节点拥有一个默认的节点标签,其中键为kubernetes.io/hostname,值为该节点的实际主机名,因此我们可以将pod调度到某个确定的节点。但如果指定节点处于离线状态,通过hostname 标签将nodeSelector设置为特定节点可能会导致pod不可调度。
labelKey: "labelValue"
containers:
- image: fanqisoft/coreqi #创建容器所使用的镜像
name: coreqi #容器的名称
ports:
-containerPort: #应用监听的端口
protocol: TCP
livenessProbe:
httpGet: #一个Http Get 存活探针
path: / #Http请求的路径
port: #探针连接的网络端口
initialDelaySeconds: #kubernetes会在第一次探测前等待15秒,没有没有设置该选项,探针将在启动时立即开始探测容器,如果使用探针,务必设置该选项。
⒊向pod发送请求
kubectl port-forward kubia-manual :
⒋pod健康
1.存活探针(liveness probe)
ReplicationController是一种Kubernetes资源,可确保它的pod始终保持运行状态。
如果pod因任何原因消失(例如节点从集群中消失或由于该pod己从节点中逐出),则ReplicationController会注意到缺少了pod并创建替代pod。
非托管的pod节点异常退出后将没有东西负责重建它,而由ReplicationController管理的pod异常退出后,ReplicationController将会创建一个新的pod来替换异常退出的pod。
一般而言,ReplicationController旨在创建和管理一个pod的多个副本(replicas)。这就是ReplicationController名字的由来。
当节点故障时,只有ReplicationController 管理的pod 会被重新创建。
ReplicationController会持续监控正在运行的pod列表,并保证相应“类型”的pod的数目与期望相符。如正在运行的pod太少,它会根据pod模板创建新的副本。如正在运行的pod太多,它将删除多余的副本。
你可能会对有多余的副本感到奇怪。这可能有几个原因:
·有人会手动创建相同类型的pod。
·有人更改现有的pod的“类型”。
·有人减少了所需的pod的数量,等等。
一个ReplicationController有三个主要部分:
label selector(标签选择器),用于确定ReplicationController作用域中有哪些
pod·replica count(副本个数),指定应运行的pod数量
pod template(pod模板),用于创建新的pod副本
ReplicationController的副本个数、标签选择器,甚至是pod模板都可以随时修改,但只有副本数目的变更会影响现有的pod。
更改ReplicationController的标签选择器和pod模板对现有pod没有影响。更改标签选择器会使现有的pod 脱离ReplicationController的监视范围,因此ReplicationController将会停止关注它们。
在创建pod后,ReplicationController并不关心其pod的实际“内容”(容器镜像、环境变量及其他)。因此,修改ReplicationController的pod模板仅影响由此ReplicationController创建的新pod。
使用ReplicationController的好处像Kubernetes中的许多事物一样,ReplicationController尽管是一个令人难以置信的简单概念,却提供或启用了以下强大功能:
·确保一个pod(或多个pod副本)持续运行,解决方法是在监控的pod丢失时启动一个新pod。
·集群节点发生故障时,它将为故障节点上运行的所有pod(即受ReplicationController 控制的节点上的那些pod)创建替代副本。
·它能轻松实现pod的水平伸缩,手动和自动都可以
注意:pod实例永远不会重新安置到另一个节点。ReplicationController的解决方案是根据pod模板创建一个全新的pod实例而不是去移动当前实例,它与正在替换的实例无关。
ReplicationController的创建
就像pod和其他Kubernetes资源,可以通过上传JSON或YAML描述文件到Kubernetes API 服务器来创建ReplicationController。
apiVersion: v1 #指定当前描述文件遵循v1版本的KubernetesAPI
kind: ReplicationController #我们在描述一个ReplicationController
metadata:
name: coreqi-manual #指定ReplicationController的名称
spec:
replicas: #pod实例的目标数目
selector: #pod选择器决定了ReplicationController的操作对象
app: coreqi #当前ReplicationController将确保符合标签选择器app=coreqi的pod实例始终是三个,当没有足够的pod时,将使用下面的pod模板创建新的pod
template: #创建新pod所使用的pod模板
metadata:
labels:
app: coreqi #模板中的pod标签显然必须和ReplicationController的标签选择器相匹配,否则控制器将无休止的创建新的pod实例。因为创建新的pod不会使实际的副本数量接近期望的副本数量。为了防止出现这种情况,Kubernetes API服务会校验ReplicationController的定义不会接收错误的配置。
#不指定ReplicationController的标签选择器也是一种选择,因为ReplicationController会自动从模板中提取标签,而且描述文件也将更简短
spec:
containers:
- name: coreqi
image: fanqisoft/coreqi
ports:
- containerPort:
创建了ReplicationController的描述文件后我们就可以通过相应的指令去创建它了。
kubectl create -f coreqi-rc.yaml
由ReplicationController创建的pod并不是绑定到ReplicationController。ReplicationController只会管理与当前ReplicationController标签选择器相匹配的pod。通过更改pod的标签,可以将它从ReplicationController的作用域中添加或删除。它甚至可以从一个ReplicationController移动到另一个。
提示:尽管一个pod没有绑定到一个ReplicationController,但该pod在metadata.ownerReferences字段中引用它,可以轻松使用它来找到一个pod属于哪个ReplicationController。
如果你更改了一个pod的标签,使它不再与ReplicationController的标签选择器相匹配,那么该pod就变得和其他手动创建的pod一样了。它不再被任何东西管理。如果运行该节点的pod异常终止,它显然不会被重新调度。但请记住,当你更改pod的标签时,ReplicationController发现一个pod丢失了,将会启动一个新的pod替换它。
例如,一个ReplicationController管理具有app=coreqi标签的pod,当我们对一个pod删除这个标签或修改其值时,ReplicationController会将该pod移出管理范围。添加新的标签并没有用,因为ReplicationController 并不关心该pod是否有任何附加标签,它只关心该pod是否具有当前ReplicationController标签选择器中引用的所有标签。
更改ReplicationController的pod模板只影响之后创建的pod,并且不会影响现有的pod。要修改旧的pod,需要删除它们,并让ReplicationController根据新模板将其替换为新的pod。
Kubernetes基石-pod容器的更多相关文章
- kubernetes concepts -- Pod Overview
This page provides an overview of Pod, the smallest deployable object in the Kubernetes object model ...
- 基于Kubernetes构建企业容器云
前言 团队成员有DBA.运维.Python开发,由于需要跨部门向公司私有云团队申请虚拟机, 此时我在思考能否在现有已申请的虚拟机之上,再进行更加细粒度的资源隔离和划分,让本团队的成员使用, 也就是在私 ...
- 腾讯基于Kubernetes的企业级容器云平台GaiaStack (转)
GaiaStack介绍 GaiaStack是腾讯基于Kubernetes打造的容器私有云平台.这里有几个关键词: 腾讯:GaiaStack可服务腾讯内部所有BG的业务: Kubernetes:Gaia ...
- Kubernetes之POD
什么是Pod Pod是可以创建和管理Kubernetes计算的最小可部署单元.一个Pod代表着集群中运行的一个进程. Pod就像是豌豆荚一样,它由一个或者多个容器组成(例如Docker容器),它们共享 ...
- Kubernetes探索学习004--深入Kubernetes的Pod
深入研究学习Pod 首先需要认识到Pod才是Kubernetes项目中最小的编排单位原子单位,凡是涉及到调度,网络,存储层面的,基本上都是Pod级别的!官方是用这样的语言来描述的: A Pod is ...
- Kubernetes+Docker+Istio 容器云实践
随着社会的进步与技术的发展,人们对资源的高效利用有了更为迫切的需求.近年来,互联网.移动互联网的高速发展与成熟,大应用的微服务化也引起了企业的热情关注,而基于Kubernetes+Docker的容器云 ...
- Kubernetes之Pod使用
一.什么是Podkubernetes中的一切都可以理解为是一种资源对象,pod,rc,service,都可以理解是 一种资源对象.pod的组成示意图如下,由一个叫”pause“的根容器,加上一个或多个 ...
- 026.[转] 基于Docker及Kubernetes技术构建容器云平台 (PaaS)
[编者的话] 目前很多的容器云平台通过Docker及Kubernetes等技术提供应用运行平台,从而实现运维自动化,快速部署应用.弹性伸缩和动态调整应用环境资源,提高研发运营效率. 本文简要介绍了与容 ...
- kubernetes之pod健康检查
目录 kubernetes之pod健康检查 1.概述和分类 2.LivenessProbe探针(存活性探测) 3.ReadinessProbe探针(就绪型探测) 4.探针的实现方式 4.1.ExecA ...
随机推荐
- 【模板】强连通分量和tarjan算法
看了好久才终于明白了这个算法..复杂度是O(n+m). 我觉得这个算法不是很好理解,但是看懂了以后还是觉得听巧妙的. 下面给出模板代码和三组简单数据帮助理解. 代码如下: #include <s ...
- 【转】Qt编写串口通信程序全程图文讲解
本文章原创于www.yafeilinux.com 转载请注明出处. (说明:我们的编程环境是windows xp下,在Qt Creator中进行,如果在Linux下或直接用源码编写,程序稍有不同,请自 ...
- Python可变参数函数用法详解
来自:http://c.biancheng.net/view/2257.html 很多编程语言都允许定义个数可变的参数,这样可以在调用函数时传入任意多个参数.Python 当然也不例外,Python ...
- Bootstrap4从入门到精通视频教程
一.布局 0.课件1.Bootstrap介绍_栅格系统2.禁用响应式_响应式分界点 二.内容 3.排版_代码4.图片_图片框5.表格 三.公共样式 6.边框_浮动7.颜色_Display显示属性8.文 ...
- adb、pm命令操作apk包
1.adb shell pm list package 打印出来所有安装到手机上的APP包名 2.adb shell pm path com.xxx.xxx 找出安装后的包名应用的apk所在位置 3. ...
- pytorch-Alexnet 网络
Alexnet网络结构, 相比于LeNet,Alexnet加入了激活层Relu, 以及dropout层 第一层网络结构: 11x11x3x96, 步长为4, padding=2 第二层网络结构: 5x ...
- mysql授权指定ip远程登录
use user //更新用户表: UPDATE `user` SET `Host` = '175.6.6.230' where `Host` = '175.6.6.230'; //授权用户表: GR ...
- 记一个微信支付-1错误JSAPI缺少参数app|get_brand_request:Fail
最近公司要做一个H5小游戏里边涉及到微信公众号支付,中间摸爬滚打遇到了很多坑.记录一下,留待后人看. 我们来看一下这个方法 GetJsApiParameters 怎么样,看起来像不像输出了一个JSON ...
- 动态绑定v-model
<template> <div class="pieAll" > <template v-for="(item, index) in tes ...
- Thinkphp5 的sesssion在同一个控制器不同的方法无法获取session的原因和对策
这一段在用thinkPHP5开发微信小程序接口的时候,在同一个控制器一个方法中存入session,在另一个方法中取出session,一直都是无法取出. 查阅各种资料得到原因:thinkPHP5里面的s ...