kube-controller-manager运行控制器,它们是处理集群中常规任务的后台线程

Controller Manager就是集群内部的管理控制中心,由负责不同资源的多个Controller构成,共同负责集群内的Node、Pod等所有资源的管理,比如当通过Deployment创建的某个Pod发生异常退出时,RS Controller便会接受并处理该退出事件,并创建新的Pod来维持预期副本数。

几乎每种特定资源都有特定的Controller维护管理以保持预期状态,而Controller Manager的职责就是把所有的Controller聚合起来:

(1)提供基础设施降低Controller的实现复杂度
(2)启动和维持Controller的正常运行

Controller Manager负责集群内的Node、Pod副本、服务端点(Endpoint)、命令空间(Namespace)、服务帐号(ServiceAccount)、资源定额(ResourceQuota)的管理,当某个Node意外宕机时,Controller Manager会及时发现并执行自动化修复流程,确保集群始终处于预期的工作状态

每个Controller通过API Server提供的接口实时监控整个集群的每个资源对象的当前状态,当发生各种故障导致系统状态发生变化时,会尝试将系统状态修复到"期望状态"

Kube-Controller-Manager是Kube-Master相关的3个服务之一,是有状态的服务,会修改集群的状态信息

如果多个master节点上的相关服务同时生效,则会有同步与一致性问题,所有多master节点中的kube-controller-manager服务只能是主备的关系,kubernetes采用租赁锁(lease-lock)实现leader的选举,具体到kube-controller-manager,设置启动参数"--leader-elect=true"

Controller工作流程

集群规划

主机名 角色 IP地址
mfyxw30.mfyxw.com controller-manager 192.168.80.30
mfyxw40.mfyxw.com controller-manager 192.168.80.40

温馨提示:这里部署文档以HDSS7-21.host.com主机为例,另外一台运算节点安装部署方法类似

1.创建controller-manager启动脚本

在mfyxw30.mfyxw.com主机上执行

[root@mfyxw30 ~]#cat > /opt/kubernetes/server/bin/kube-controller-manager.sh << EOF
#!/bin/sh
./kube-controller-manager \\
--cluster-cidr 10.10.0.0/16 \\
--leader-elect true \\
--log-dir /data/logs/kubernetes/kube-controller-manager \\
--master http://127.0.0.1:8080 \\
--service-account-private-key-file ./cert/ca-key.pem \\
--service-cluster-ip-range 172.16.0.0/16 \\
--root-ca-file ./cert/ca.pem \\
--v 2
EOF

在mfyxw40.mfyxw.com主机上执行

[root@mfyxw40 ~]#cat > /opt/kubernetes/server/bin/kube-controller-manager.sh << EOF
#!/bin/sh
./kube-controller-manager \\
--cluster-cidr 10.10.0.0/16 \\
--leader-elect true \\
--log-dir /data/logs/kubernetes/kube-controller-manager \\
--master http://127.0.0.1:8080 \\
--service-account-private-key-file ./cert/ca-key.pem \\
--service-cluster-ip-range 172.16.0.0/16 \\
--root-ca-file ./cert/ca.pem \\
--v 2
EOF

2.调整文件权限和创建目录

在mfyxw30.mfyxw.com上调整文件权限及创建目录

[root@mfyxw30 ~]#chmod +x /opt/kubernetes/server/bin/kube-controller-manager.sh
[root@mfyxw30 ~]#mkdir -p /data/logs/kubernetes/kube-controller-manager

在mfyxw40.mfyxw.com上调整文件权限及创建目录

[root@mfyxw40 ~]#chmod +x /opt/kubernetes/server/bin/kube-controller-manager.sh
[root@mfyxw40 ~]#mkdir -p /data/logs/kubernetes/kube-controller-manager

3.为controller-manager创建supervisor配置

在mfyxw30.mfyxw.com主机上为为controller-manager创建supervisor配置文件

[root@mfyxw30 ~]#cat > /etc/supervisord.d/kube-conntroller-manager.ini << EOF
[program:kube-controller-manager-80.30]
command=/opt/kubernetes/server/bin/kube-controller-manager.sh ; the program (relative uses PATH, can take args)
numprocs=1 ; number of processes copies to start (def 1)
directory=/opt/kubernetes/server/bin ; directory to cwd to before exec (def no cwd)
autostart=true ; start at supervisord start (default: true)
autorestart=true ; retstart at unexpected quit (default: true)
startsecs=30 ; number of secs prog must stay running (def. 1)
startretries=3 ; max # of serial start failures (default 3)
exitcodes=0,2 ; 'expected' exit codes for process (default 0,2)
stopsignal=QUIT ; signal used to kill process (default TERM)
stopwaitsecs=10 ; max num secs to wait b4 SIGKILL (default 10)
user=root ; setuid to this UNIX account to run the program
redirect_stderr=false ; redirect proc stderr to stdout (default false)
stdout_logfile=/data/logs/kubernetes/kube-controller-manager/controll.stdout.log ; stdout log path, NONE for none; default AUTO
stdout_logfile_maxbytes=64MB ; max # logfile bytes b4 rotation (default 50MB)
stdout_logfile_backups=4 ; # of stdout logfile backups (default 10)
stdout_capture_maxbytes=1MB ; number of bytes in 'capturemode' (default 0)
stdout_events_enabled=false ; emit events on stdout writes (default false)
stderr_logfile=/data/logs/kubernetes/kube-controller-manager/controll.stderr.log ; stderr log path, NONE for none; default AUTO
stderr_logfile_maxbytes=64MB ; max # logfile bytes b4 rotation (default 50MB)
stderr_logfile_backups=4 ; # of stderr logfile backups (default 10)
stderr_capture_maxbytes=1MB ; number of bytes in 'capturemode' (default 0)
stderr_events_enabled=false ; emit events on stderr writes (default false)
EOF

在mfyxw40.mfyxw.com主机上为为controller-manager创建supervisor配置文件

[root@mfyxw40 ~]#cat > /etc/supervisord.d/kube-conntroller-manager.ini << EOF
[program:kube-controller-manager-80.40]
command=/opt/kubernetes/server/bin/kube-controller-manager.sh ; the program (relative uses PATH, can take args)
numprocs=1 ; number of processes copies to start (def 1)
directory=/opt/kubernetes/server/bin ; directory to cwd to before exec (def no cwd)
autostart=true ; start at supervisord start (default: true)
autorestart=true ; retstart at unexpected quit (default: true)
startsecs=30 ; number of secs prog must stay running (def. 1)
startretries=3 ; max # of serial start failures (default 3)
exitcodes=0,2 ; 'expected' exit codes for process (default 0,2)
stopsignal=QUIT ; signal used to kill process (default TERM)
stopwaitsecs=10 ; max num secs to wait b4 SIGKILL (default 10)
user=root ; setuid to this UNIX account to run the program
redirect_stderr=false ; redirect proc stderr to stdout (default false)
stdout_logfile=/data/logs/kubernetes/kube-controller-manager/controll.stdout.log ; stdout log path, NONE for none; default AUTO
stdout_logfile_maxbytes=64MB ; max # logfile bytes b4 rotation (default 50MB)
stdout_logfile_backups=4 ; # of stdout logfile backups (default 10)
stdout_capture_maxbytes=1MB ; number of bytes in 'capturemode' (default 0)
stdout_events_enabled=false ; emit events on stdout writes (default false)
stderr_logfile=/data/logs/kubernetes/kube-controller-manager/controll.stderr.log ; stderr log path, NONE for none; default AUTO
stderr_logfile_maxbytes=64MB ; max # logfile bytes b4 rotation (default 50MB)
stderr_logfile_backups=4 ; # of stderr logfile backups (default 10)
stderr_capture_maxbytes=1MB ; number of bytes in 'capturemode' (default 0)
stderr_events_enabled=false ; emit events on stderr writes (default false)
EOF

4.启动服务并检查

在mfyxw30.mfyxw.com主机上执行启用服务和检查

[root@mfyxw30 ~]# supervisorctl update
[root@mfyxw30 ~]# supervisorctl status

在mfyxw30.mfyxw.com主机上执行启用服务和检查

[root@mfyxw40 ~]# supervisorctl update
[root@mfyxw40 ~]# supervisorctl status

Kubernets二进制安装(9)之部署主控节点控制器controller-manager的更多相关文章

  1. Kubernets二进制安装(6)之部署主控节点服务--etcd

    Etcd是Kubernetes集群中的一个十分重要的组件,用于保存集群所有的网络配置和对象的状态信息. 整个kubernetes系统中一共有两个服务需要用到etcd用来协同和存储配置,分别是 网络插件 ...

  2. Kubernets二进制安装(10)之部署主控节点部署调度器服务kube-scheduler

    Kubernetes Scheduler是一个策略丰富.拓扑感知.工作负载特定的功能,调度器显著影响可用性.性能和容量.调度器需要考虑个人和集体的资源要求.服务质量要求.硬件/软件/政策约束.亲和力和 ...

  3. Kubernets二进制安装(7)之部署主控节点服务--apiserver二进制安装

    kube-apiserver集群规划 主机名 角色 IP地址 mfyxw30.mfxyw.com kube-apiserver主 192.168.80.30 mfyxw40.mfyxw.com kub ...

  4. Kubernets二进制安装(7)之部署主控节点服务--apiserver简介

    API Server简介 Kubernetes API Server提供了K8S各类资源对象(如:pod.RC.Service等)的增删改查及watch等HTTP Rest接口,是整个系统的数据总线和 ...

  5. Kubernets二进制安装(12)之部署Node节点服务的kube-Proxy

    kube-proxy是Kubernetes的核心组件,部署在每个Node节点上,它是实现Kubernetes Service的通信与负载均衡机制的重要组件; kube-proxy负责为Pod创建代理服 ...

  6. Kubernets二进制安装(11)之部署Node节点服务的kubelet

    集群规划 主机名 角色 IP地址 mfyxw30.mfyxw.com kubelet 192.168.80.30 mfyxw40.mfyxw.com kubelet 192.168.80.40 注意: ...

  7. Kubernets二进制安装(13)之部署Flannel

    Flannel简介 ​ Flannel是CoreDNS团队针对Kubernetes设计的一个网络规划服务,简单来说,它的功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址 ...

  8. Kubernets二进制安装(8)之部署四层反向代理

    四层反向代理集群规划 主机名 角色 IP地址 mfyxw10.mfyxw.com 4层负载均衡(主) 192.168.80.10 mfyxw20.mfyxw.com 4层负载均衡(从) 192.168 ...

  9. 6、二进制安装K8s之部署kubectl

    二进制安装K8s之部署kubectl 我们把k8s-master 也设置成node,所以先master上面部署node,在其他机器上部署node也适用,更换名称即可. 1.在所有worker node ...

随机推荐

  1. golang语言初体验

    Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型.编译型语言.Go 语言语法与 C 相近,但功能上 ...

  2. 如何使用github搜索需要的开源项目

    按照项目名/仓库名搜索(大小写不敏感)in:name xxx按照README搜索(大小写不敏感)in:readme xxx按照description搜索(大小写不敏感)in:description x ...

  3. oracle 释放表空间到OS(resize)

    1.查看表空间里面的对象 SELECT OWNER AS OWNER, SEGMENT_NAME AS SEGMENT_NAME, SEGMENT_TYPE AS SEGMENT_TYPE, SUM ...

  4. [java]文件上传下载删除与图片预览

    图片预览 @GetMapping("/image") @ResponseBody public Result image(@RequestParam("imageName ...

  5. websocket的应用---Django

    websocket的应用---Django 1.长轮询 轮询:在前端通过写js实现.缺点:有延迟.服务器压力大. 就是客户端通过一定的时间间隔以频繁请求的方式向服务器发送请求,来保持客户端和服务器端的 ...

  6. YOLOv4

    @ 目录 YOLO v4源码 CMake安装 CUDA安装 cuDNN安装 OpenCV安装 Cmake编译 VS编译 图像测试 测试结果 YOLOv4是最近开源的一个又快又准确的目标检测器. 首先看 ...

  7. MongoDB数据库的基本使用!

    MongoDB数据库的基本使用! 1 进入mongoose数据库 在控制台中输入 mongo; 2 查看所有的数据库 show dbs; 3 查看当前数据库的名称 db; 4 查看数据库中的所有的表 ...

  8. XShell的手动直连,避免配置ssh免密的一些问题

  9. 一体化的Linux系统性能和使用活动监控工具–Sysstat

    [转]原文出处: Tecmint-Kuldeep Sharma   译文出处:Linux Story-天寒   欢迎分享原创到伯乐头条 在监控系统资源.系统性能和使用活动方面,Sysstat的确是一个 ...

  10. 防sql注入之参数绑定 SQL Injection Attacks and Defense 预处理语句与存储过程

    http://php.net/manual/zh/pdo.prepared-statements.php 预处理语句与存储过程 很多更成熟的数据库都支持预处理语句的概念.什么是预处理语句?可以把它看作 ...