ReplicationController:部署托管的pods
保持pod的健康
我们制作一个中途不能正常处理请求的服务版本,用于做实验
// cat app.js
const http = require('http');
const os = require('os');
console.log("Kubia server starting...");
var requestCount = 0;
var handler = function(request, response) {
console.log("Received request from " + request.connection.remoteAddress);
requestCount++;
if (requestCount > 5) { // 注意这里,请求超过5次会500错误
response.writeHead(500);
response.end("I'm not well. Please restart me!");
return;
}
response.writeHead(200);
response.end("You've hit " + os.hostname() + "\n");
};
var www = http.createServer(handler);
www.listen(8080);这段代码大家阅读理解就好,镜像的操作都已经做好了。直接用yaml部署它,体验一下
create并查看这个pod
上面的events内容中出现了unhealthy信息,pod要被重启,从pod信息上能看到已经有重启次数计数了。
附加属性
我们有很多服务启动是需要时间的,为了避免频繁的重启,需要设置一下延时检测时间
initialDelaySeconds 这个参数很有实际用处
大家课下可以自己做这个实验,观察pod描述中的events日志验证
运行pod的多个实例
我们服务都是多副本的,例如100 - 200这样的规模,高可用的实现,我们实现一下。在基础部分我们尝试了一下,用的就是replicacontroller,看看这个yaml
但是最新的kubernetes已经建议大家使用新的副本集控制器ReplicaSet代替了。所以我们直接做ReplicaSet的练习,他们yaml文件类似
创建一下这个文件
检查一下我们的副本集,状态还挺清楚的
节点异常自动调度pod
因为有了这个副本集控制,kubernetes会时刻帮你看管副本个数,如果某个node(注意node概念是底层节点)错误导致丢失了某些副本,控制器会补充足够的副本在其他node上。
由于把节点下掉操作对大家环境影响较大,这里先不演示了。
水平缩放pod
修改一下副本集个数,将replica改小和改大,例如5,观察一下
输出类似
相比以前部署是不是非常简单了呢?
集群节点上运行系统级的pod
我们有一种部署需求,需要在每台节点有且只有一个副本,例如consul agent、redis、fluentd等等辅助性的组件,可以使用DaemonSet副本集。
比较简单,我们不必做这个实验了,理解它的用途就好,做一个特殊的实验,见下面描述文件。
这个描述功能是在含有ssd的节点上部署监控器ssd-monitor
创建上面的yaml看看

删除副本集
做一些清理工作吧
Well Done!到达这里你已经是半个DevOps了,这里是kubernetes的核心功能,能够自动的帮你管理副本集的状态。
下一节,我们让其他服务访问我们的副本集。
思考题
在不同命名空间都创建的DaemonSet,会互相冲突么,比如多部署或少部署?
最后更新于
这有帮助吗?