8. K8s 资源部署

作者&投稿:耿杰 (若有异议请与网页底部的电邮联系)
~

很少在 Kubernetes 中直接创建一个Pod,甚至是单实例(Singleton)的 Pod。 这是因为 Pod 被设计成了相对临时性的、用后即抛的一次性实体, 不支持高可用 。一般使用工作负载资源来创建和管理多个 Pod。 资源的控制器能够处理副本的管理、上线,并在 Pod 失效时提供自愈能力。
能够管理一个或者多个 Pod 的工作负载资源有:

Pod 类似于共享namesapce、cgroup、文件系统卷的一组 Docker 容器。创建Pod时,除了会创建1个或多个工作容器外, 还会额外在Pod中创建Pod容器,Pod容器用于实现k8s的各种功能

查询基础信息

查询详细信息

查询Pod的标签

ReplicationController 确保在任何时候都有特定数量的 Pod 副本处于运行状态。 换句话说,ReplicationController 确保一个 Pod 或一组同类的 Pod 总是可用的。
RC会根据 spec.selector 将当前已经运行的Pod加入RC,当 Pod 数量过多时,ReplicationController 会终止多余的 Pod。当 Pod 数量太少时,ReplicationController 将会启动新的 Pod。

查询基础信息

查询详细信息

问题:
Pod创建完成后,如何访问Pod呢?直接访问Pod会有如下几个问题:

解决方法:
Kubernetes中的Service对象就是用来解决上述Pod访问问题的。Service有一个固定IP地址 Cluster IP ,Service将访问它的流量转发给Pod,具体转发给哪些Pod通过Label来选择,而且Service可以给这些Pod做负载均衡。

Node物理节点的IP地址

Service的IP地址,此为虚拟IP地址。外部网络无法ping通,只有kubernetes集群内部访问使用。

每个Pod的IP地址

Cluster地址和pod地址在不同网段,Cluster地址为虚拟地址,不配在pod上或主机上,外部访问时,先到Node节点网络(所有Node开放同一个端口号),再转到service网络,最后代理给pod网络。

Service的类型决定了如何向外暴露Service

通过集群的内部 IP 暴露服务,选择该值时服务只能够在集群内部访问。 这也是默认的 ServiceType。

通过每个节点上的 IP 和静态端口(NodePort)暴露服务。 NodePort 服务会路由到自动创建的 ClusterIP 服务。 通过请求 <Node节点 IP>:<节点端口>,你可以从集群的外部访问一个 NodePort 服务。

NodePort类型的Service例子:

Service默认的负载均衡模式是RR轮询模式,可以通过修改 spec.sessionAffinity 为 ClientIP 来实现源地址会话保持。可以设置会话保持的超时时间(默认时间是10800s),设置 spec.sessionAffinityConfig.clientIP.timeoutSeconds 的值。

Deployment 管理 ReplicaSet,并向 Pod 提供声明式的更新以及许多其他有用的功能,

首先根据文件创建deployment,加入 --record 参数来记录历史,方便在回滚时查看针对每个 Deployment 修订版本所执行过的命令。

Deployment会创建ReplicaSet,ReplicaSet负责启动Pods。ReplicaSet 的名称始终被格式化为 [Deployment名称]-[随机字符串] 。 其中的随机字符串是使用 pod-template-hash 作为种子随机生成的。

Deployment 控制器每次注意到新的 Deployment 时,都会创建一个 ReplicaSet 以启动所需的 Pods。 如果更新了 Deployment,则控制标签匹配 .spec.selector 但模板不匹配 .spec.template 的 Pods 的现有 ReplicaSet 被缩容。最终,新的 ReplicaSet 缩放为 .spec.replicas 个副本, 所有旧 ReplicaSets 缩放为 0 个副本。

当 Deployment 正在上线时被更新,Deployment 会针对更新创建一个新的 ReplicaSet 并开始对其扩容,之前正在被扩容的 ReplicaSet 会被翻转,添加到旧 ReplicaSets 列表 并开始缩容。

例如,假定你在创建一个 Deployment 以生成 nginx:1.14.2 的 5 个副本,但接下来 更新 Deployment 以创建 5 个 nginx:1.16.1 的副本,而此时只有 3 个nginx:1.14.2 副本已创建。在这种情况下,Deployment 会立即开始杀死 3 个 nginx:1.14.2 Pods, 并开始创建 nginx:1.16.1 Pods。它不会等待 nginx:1.14.2 的 5 个副本都创建完成 后才开始执行变更动作。

升级操作,两种方式:

Deployment之所以能如此容易的做到回滚,是因为Deployment是通过ReplicaSet控制Pod的,升级后之前ReplicaSet都一直存在,Deployment回滚做的就是使用之前的ReplicaSet再次把Pod创建出来。Deployment中保存ReplicaSet的数量可以使用 revisionHistoryLimit 参数限制,默认值为10。

查看Deployment 修订历史

输出

查看第n次的修订历史

输出

回滚到之前的修订版本

回滚后,Deployment 修订历史发生变化,revision 1变为revision 3

可以在触发一个或多个更新之前暂停 Deployment,然后再恢复其执行。 这样做使得你能够在暂停和恢复执行之间应用多个修补程序,而不会触发不必要的上线操作。

暂停

恢复

通过检测容器响应是否正常来决定是否重启Pod,Kubernetes支持如下三种探测机制:

Liveness Probe在 containers 字段中定义

为Deployment中的Pod配置Liveness Probe,Probe往容器的80端口发送HTTP GET请求,如果请求不成功,Kubernetes会重启容器。

在容器中执行 cat /tmp/healthy 命令,如果成功执行并返回 0 ,则说明容器是健康的。




余庆县17812591824: 如何在K8S平台部署微服务 -
尧南竹沥: 使用Rancher来运行Kubernetes有很多优势.大多数情况下能使用户和IT团队部署和管理工作更加方便.Rancher自动在Kubernetes后端实现etcd 的HA,并且将所需要的服务部署到此环境下的任何主机中.在设置访问控制,可以轻易连接到现有...

余庆县17812591824: 如何在k8s上部署一个mysql -
尧南竹沥: 有两种方法: 直接用yum源进行安装yum -y install mysql-server 源码安装去mysql官网下载你需要的版本,解压,创建用户,/usr/local/mysql5.6/scripts/mysql_install_db --basedir=/usr/local/mysql5.6 --datadir=/data/mysql5.6 --user=mysql

余庆县17812591824: 如何进行K8S存储系统 -
尧南竹沥: 在K8S运行的服务,从简单到复杂可以分成三类:无状态服务、普通有状态服务和有状态集群服务.下面分别来看K8S是如何运行这三类服务的.无状态服务,K8S使用RC(或更新的Replica Set)来保证一个服务的实例数量,如果说某个Pod...

余庆县17812591824: k8s中kube - scheduler的作用是什么? -
尧南竹沥: 它作为调度器,接收来自于管理控制器(kube-controller-manager)触发的调度操作请求,然后根据请求规格、调度约束、整体资源情况等因素进行调度计算,最后将任务写到etcd,目标节点的kubelet 组件监听到由其负责的资源创建工作,然后执行具体调度任务.目前我刚从黑马程序员毕业,我学的运维,这些知识刚好我们讲过,正好告诉你,希望能帮到你.

余庆县17812591824: k8s怎么把容器里面的内容挂出来 -
尧南竹沥: 1. 普通Volume 最简单的普通Volume是单节点Volume.它和Docker的存储卷类似,使用的是Pod所在K8S节点的本地目录.第二种类型是跨节点存储卷,这种存储卷不和某个具体的K8S节点绑定,而是独立于K8S节点存在的,整个存储集群和K...

余庆县17812591824: 如何创建和管理k8s集群 -
尧南竹沥: 1、加入VPMN集团网,必须持该集团介绍信,到移动营业厅进行登记,或者由该集团的集团联系人联系该集团的客户经理进行加入.当然如果你有朋友在移动工作,也可以随便找个集团给你加几个号码进去.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网