kubernetes Master部署之ControllerManager部署(4)

Controller Manager作为集群内部的管理控制中心,主要负责集群内的资源管理,包括Node、Pod、命名空间、额定资源等。比如当某个Node意外宕机,Controller Manager会及时发现并执行自动化修复。

一、部署k8s Controller Manager

确保controller-manager-key.pem 和 controller-manager.pem存在,我这里在前面的文章中已经创建好相关私钥。执行如下操作:

cd /etc/kubernetes
export KUBE_APISERVER="https://192.168.15.200:6443"

配置 cluster

kubectl config set-cluster kubernetes --certificate-authority=/etc/kubernetes/ssl/ca.pem --embed-certs=true --server=${KUBE_APISERVER} --kubeconfig=controller-manager.conf

配置 credentials

kubectl config set-credentials system:kube-controller-manager --client-certificate=/etc/kubernetes/ssl/controller-manager.pem --embed-certs=true --client-key=/etc/kubernetes/ssl/controller-manager-key.pem --kubeconfig=controller-manager.conf

配置 context

kubectl config set-context system:kube-controller-[email protected] --cluster=kubernetes --user=system:kube-controller-manager --kubeconfig=controller-manager.conf

配置 default context

kubectl config use-context system:[email protected]es --kubeconfig=controller-manager.conf

controller-manager.conf 文件生成后将这个文件分发到各个 Master 节点的 /etc/kubernetes 目录下。

scp controller-manager.conf k8s-master02:/etc/kubernetes/
scp controller-manager.conf k8s-master03:/etc/kubernetes/

创建 kube-controller-manager的systemd服务启动文件,如下:

export KUBE_APISERVER="https://192.168.15.200:6443"
cat > /usr/lib/systemd/system/kube-controller-manager.service << EOF
[Unit]
Description=kube-controller-manager
After=network.target
After=kube-apiserver.service

[Service]
EnvironmentFile=-/etc/kubernetes/controller-manager
ExecStart=/usr/local/bin/kube-controller-manager         --logtostderr=true         --v=0         --master=https://192.168.15.200:6443 \
        --kubeconfig=/etc/kubernetes/controller-manager.conf         --cluster-name=kubernetes         --cluster-signing-cert-file=/etc/kubernetes/ssl/ca.pem         --cluster-signing-key-file=/etc/kubernetes/ssl/ca-key.pem         --service-account-private-key-file=/etc/kubernetes/ssl/ca-key.pem         --root-ca-file=/etc/kubernetes/ssl/ca.pem         --insecure-experimental-approve-all-kubelet-csrs-for-group=system:bootstrappers         --use-service-account-credentials=true         --service-cluster-ip-range=10.96.0.0/12         --cluster-cidr=10.244.0.0/16         --allocate-node-cidrs=true         --leader-elect=true         --controllers=*,bootstrapsigner,tokencleaner
Restart=on-failure
Type=simple
LimitNOFILE=65536
EOF

分发到其他主机:

scp /usr/lib/systemd/system/kube-controller-manager.service k8s-master02://usr/lib/systemd/system/
scp /usr/lib/systemd/system/kube-controller-manager.service k8s-master03://usr/lib/systemd/system/

在各节点启动服务:

systemctl daemon-reload
systemctl enable kube-controller-manager
systemctl start kube-controller-manager
systemctl status kube-controller-manager

查看服务状态,是否正常启动;

提示:请确保 apiserver-csr.json 定义的证书授权 IP 内容里把 VIP 填写进去,如果未填写进去,请重新使用 cfssl 生成证书后放入各个 master 节点的 /etc/kubernetes/pki 上,并重启  kube-apiserver.service 服务。最后,关于k8s apiserver高可用还有一些问题需要这里做一些总结,我们这里通过 corosync + pacemaker 软件使得某种 apiserver 服务高可用,这是因为apiserver是无状态服务允许同时存在不同的节点。而scheduler,controller-manager在集群中只能在一台主机开启,这里我们可以在启动controller-manager和scheduler 只要加上 --leader-elect=true 参数就可以同时启动,系统会自动选举leader。具体来说,如果有多台master node,上面都安装了scheduler,controller-manager, apiserver:

  • 对于schduler服务,同一时间只在一台master 节点上运行;
  • 对于controller-manager,同一时间只在一台master 节点上运行;
  • 对于apiserver,同一时间只在一台master 节点上运行;

在整套环境中,我们又将引入一个新的问题。pacemaker + corosync 的高可用性谁来保证?因为高可用集群都存在脑裂或者管理员误操作的情况,一旦高可用集群出现脑裂,多台master会出现抢占VIP以及在多个节点上同时启动了scheduler或者controller-manager,就会造成系统故障。

时间: 2024-10-07 05:27:12

kubernetes Master部署之ControllerManager部署(4)的相关文章

kubernetes Master部署之Scheduler 以及 HA部署(5)

Kubernetes Scheduler作用是将Controller Manager将要新建的Pod按照特定的调度算法和调度策略绑定到集群中某个合适的Node上,并将绑定信息写入到etcd中. 一.部署Scheduler 下面生成kube-scheduler的kubeconfig文件,操作如下: cd /etc/kubernetes export KUBE_APISERVER="https://192.168.15.200:6443" 配置 cluster kubectl config

Kubernetes二进制部署——多master节点集群部署(2)

前言: 接上一篇单节点部署(1)部署多节点 部署环境 负载均衡Nginx1:192.168.13.128/24Nginx2:192.168.13.129/24Master节点master1:192.168.13.131/24 kube-apiserver kube-controller-manager kube-scheduler etcdmaster2:192.168.13.130/24 kube-apiserver kube-controller-manager kube-scheduler

kubernetes 集群的安装部署

本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn 摘要: 首先kubernetes得官方文档我自己看着很乱,信息很少,所以结合了很多博客搭建的 其次因为既然用到docker,当然离不开kubernetes管理,还有swarm,前者管理复杂,但功能齐全 这里仅仅是安装部署,还未使用,具体使用出现问题后续更新 前提条件 系统时centos7上 关闭防火墙 systemctl stop firewalld.service

kubernetes 1.10.1 版本 部署

kubernetes组件 Master组件: kube-apiserver Kubernetes API,集群的统一入口,各组件协调者,以HTTP API提供接口服务,所有对象资源的增删改查和监听操作都交给APIServer处理后再提交 kube-controller-manager 处理集群中常规后台任务,一个资源对应一个控制器,而ControllerManager就是负责管理这些控制器的. kube-scheduler 根据调度算法为新创建的Pod选择一个Node节点. Node组件: ku

Kubernetes集群的安装部署

此文参照https://www.cnblogs.com/zhenyuyaodidiao/p/6500830.html,并根据实操过程略作修改. 1.环境介绍及准备: 1.1 物理机操作系统 物理机操作系统采用Centos7.3 64位,细节如下. [[email protected] ~]# uname -aLinux k8s-master 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64

kubernetes系列03—kubeadm安装部署K8S集群

1.kubernetes安装介绍 1.1 K8S架构图 1.2 K8S搭建安装示意图 1.3 安装kubernetes方法 1.3.1 方法1:使用kubeadm 安装kubernetes(本文演示的就是此方法) 优点:你只要安装kubeadm即可:kubeadm会帮你自动部署安装K8S集群:如:初始化K8S集群.配置各个插件的证书认证.部署集群网络等.安装简易. 缺点:不是自己一步一步安装,可能对K8S的理解不会那么深:并且有那一部分有问题,自己不好修正. 1.3.2 方法2:二进制安装部署k

Kubernetes之dashboard1.8的部署

根据官方文档下载部署文件 https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml 编辑该并使用下列命令实现将角色名替换: :%s/kubernetes-dashboard-minimal/kubernetes-dashboard/g 创建kubernetes-dashboard-rbac.yaml 下载的部署文件,有个地方需要注意下

Kubernetes 生产环境安装部署 基于 Kubernetes v1.14.0 之 部署规划

1. 安装规划 1.1 部署节点说明 etcd集群规划 etcd 中心集群 192.168.2.247192.168.2.248192.168.2.249 etcd 事件集群 192.168.2.250192.168.2.251192.168.2.252 Kubernetes master节点集群规划 192.168.3.10192.168.3.11192.168.3.12192.168.3.13192.168.3.14 Kubernetes master vip 192.168.4.1192.

K8s(Kubernetes)简介及安装部署

前言: k8s是Kubernetes的简称,因为K和S之间有8个字母,所以才会被称为k8s. k8s最初是在Google公司内部使用了10多年的技术,它的前身是叫做Borg(博格),直到2015年才被Google公司捐赠为开源项目. 如果之前我们有接触过OpenStack,那么应该知道管理VM虚拟机资源可以用OpenStack.那么管理容器所对应的开源平台是什么呢?k8s就是其中之一,在k8s之前也有很多容器管理平台,有docker自身的docker swarm,也有apache推出的Mesos