• 04:k8s核心组件 和 rc 控制器


    在学习rc控制器之前,我们再来了解一下k8s的核心组件:(详细介绍看官网)

     

     架构图:

     

    什么是rc(replication controller) 控制器:

    Replication Controller 保证了在所有时间内,都有特定数量的Pod副本正在运行,如果太多了,Replication Controller就杀死几个,如果太少了,Replication Controller会新建几个,和直接创建的pod不同的是,Replication Controller会替换掉那些删除的或者被终止的pod,不管删除的原因是什么(维护阿,更新啊,Replication Controller都不关心)。基于这个理由,我们建议即使是只创建一个pod,我们也要使用Replication Controller。Replication Controller 就像一个进程管理器,监管着不同node上的多个pod,而不是单单监控一个node上的pod,Replication Controller 会委派本地容器来启动一些节点上服务(Kubelet ,Docker)。

    Replication Controller只会对那些RestartPolicy = Always的Pod的生效,(RestartPolicy的默认值就是Always),Replication Controller 不会去管理那些有不同启动策略pod

    使用rc控制器 起容器

    1:创建 nginx-rc.yml 文件(kind: ReplicationController和之前的pod 最大区别在这里类型)
    [root@k8s-master ~]# cat nginx-rc.yml
    apiVersion: v1
    kind: ReplicationController #rc 类型
    metadata:
    name: nginx #kubectl get rc nginx 通过命令rc显示的名称
    spec:
    replicas: 3 #容器副本数,就是起几个nginx的容器,这里是起3个(集群)
    selector:
    app: myweb #注意这里的名字,要和labels的一致,否则会报错
    template:
    metadata:
    labels:
    app: myweb #rc是通过识别这个名字来管理容器的,保证容器副本一直是3
    spec:
    containers:
    - name: nginx #和上面的metadata一致就行
    image: 192.168.6.129:5000/nginx:latest
    ports:
    - containerPort: 80

    #如果容器里面需要指定变量:

     

    #创建容器,查看

     

    #删除一个容器,瞬间又起一个(前面创建文件指定了三个副本)优先删除容器起的时间是最小的

     

    #修改 容器的信息 rc方式启动是这样修改:

    [root@k8s-master ~]# kubectl edit rc nginx

    #立刻就变为4个了

    #Pod方式启动是这样修改:
    [root@k8s-master tmp]# kubectl edit pod nginx

    #或者直接修改nginx.yml 文件,起10个副本(10个容器) --- Kubectl apply -f nginx-rc.yml 重新加载配置文件

     

     

     ===========================================================================

    扩展: rc 的故障自愈(控制容器副本数和定义的一致)

    1: 使用pod 方式起一个容器
    [root@k8s-master ~]# vim k8s_pod.yml

     

     2:修改labels标签,改成和rc yml里面定义的一样。

    [root@k8s-master ~]# kubectl edit pod nginx #或者修改配置文件,在apply加载
    或者修改之前的pod,把metadata:
    name: nginx
    labels:
    app: myweb2 #改成myweb
    # 保存后:会发现刚才pod起的容器自动没有了:

     

    rc其实就是通过app: myweb的来管理pod的,rc 会发现原本定义的是10个副本,现在是11个了,
    默认会把当前创建时间最小的杀掉,所以只剩下之前rc起的10个容器了。
    同理:
    我们也可以修改一个pod,把里面的app: myweb 改成其它名字,这样就个pod就会脱离rc 的控制。

    ======================================================================

    扩展2:rc 自动部署升级 或 回滚:
    修改配置文件:

    [root@k8s-master ~]# cp nginx.yml nginx2.yml
    [root@k8s-master ~]# vim nginx2.yml

     

    和之前的对比:

     

    #创建一个192.168.6.129:5000/nginx:v1.1 镜像

     

     #每10s 就会升级一个pod,升级一个就会删除一个原先的。(新的是nginx2- xxxxx)

     

    #重新打开一个窗口,升级完成后,全部变成nginx2 了。

     

     

  • 相关阅读:
    The required MAP capability is more than the supported max container capability in the cluster. Killing the Job. mapResourceRequest: <memory:2048, vCores:2> maxContainerCapability:<memory:1024, vCores
    centos6.8安装cdh6.0.0
    oracle拼接sql
    数据插入不覆盖更新,设置定时任务
    支持向量机在 R 语言中的实现和使用
    怎么彻底去掉office365
    汽车电子软件规范学习
    ISO/IEC TS 17961 C Secure Coding Rules
    UML图
    Gitflow工作流程
  • 原文地址:https://www.cnblogs.com/jim-xu/p/11913074.html
Copyright © 2020-2023  润新知