十.部署kube-scheduler

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

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

1. 创建kube-scheduler证书

1)创建kube-scheduler证书签名请求

# kube-scheduler与kubei-apiserver通信采用双向TLS认证;
# kube-apiserver提取CN作为客户端的用户名,即system:kube-scheduler。 kube-apiserver预定义的 RBAC使用的ClusterRoleBindings system:kube-scheduler将用户system:kube-scheduler与ClusterRole system:kube-scheduler绑定
[root@kubenode1 ~]# mkdir -p /etc/kubernetes/scheduler
[root@kubenode1 ~]# cd /etc/kubernetes/scheduler
[root@kubenode1 scheduler]# touch scheduler-csr.json
[root@kubenode1 scheduler]# vim scheduler-csr.json
{
"CN": "system:kube-scheduler",
"hosts": [
"172.30.200.21",
"172.30.200.22",
"172.30.200.23"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "ChengDu",
"L": "ChengDu",
"O": "system:kube-scheduler",
"OU": "cloudteam"
}
]
}

2)生成kube-scheduler证书与私钥

[root@kubenode1 scheduler]# cfssl gencert -ca=/etc/kubernetes/ssl/ca.pem \
-ca-key=/etc/kubernetes/ssl/ca-key.pem \
-config=/etc/kubernetes/ssl/ca-config.json \
-profile=kubernetes scheduler-csr.json | cfssljson -bare scheduler

# 分发scheduler.pem,scheduler-key.pem
[root@kubenode1 scheduler]# scp scheduler*.pem root@172.30.200.22:/etc/kubernetes/scheduler/
[root@kubenode1 scheduler]# scp scheduler*.pem root@172.30.200.22:/etc/kubernetes/scheduler/

2. 创建kube-scheduler kubeconfig文件

kube-scheduler kubeconfig文件中包含Master地址信息与必要的认证信息。

# 配置集群参数;
# --server:指定api-server,采用ha之后的vip;
# cluster名自定义,设定之后需保持一致;
# --kubeconfig:指定kubeconfig文件路径与文件名;如果不设置,默认生成在~/.kube/config文件
[root@kubenode1 scheduler]# kubectl config set-cluster kubernetes \
--certificate-authority=/etc/kubernetes/ssl/ca.pem \
--embed-certs=true \
--server=https://172.30.200.10:6443 \
--kubeconfig=scheduler.conf # 配置客户端认证参数;
# 认证用户为前文签名中的“system:kube-scheduler”;
# 指定对应的公钥证书/私钥等
[root@kubenode1 scheduler]# kubectl config set-credentials system:kube-scheduler \
--client-certificate=/etc/kubernetes/scheduler/scheduler.pem \
--embed-certs=true \
--client-key=/etc/kubernetes/scheduler/scheduler-key.pem \
--kubeconfig=scheduler.conf # 配置上下文参数
[root@kubenode1 scheduler]# kubectl config set-context system:kube-scheduler@kubernetes \
--cluster=kubernetes \
--user=system:kube-scheduler \
--kubeconfig=scheduler.conf # 配置默认上下文
[root@kubenode1 scheduler]# kubectl config use-context system:kube-scheduler@kubernetes --kubeconfig=scheduler.conf

# 分发scheduler.conf文件到所有master节点;
[root@kubenode1 scheduler]# scp scheduler.conf root@172.30.200.22:/etc/kubernetes/scheduler/
[root@kubenode1 scheduler]# scp scheduler.conf root@172.30.200.22:/etc/kubernetes/scheduler/

3. 配置kube-scheduler的systemd unit文件

相关可执行文件在部署kubectl时已部署完成。

# kube-scheduler在kube-apiserver启动之后启动
[root@kubenode1 ~]# touch /usr/lib/systemd/system/kube-scheduler.service
[root@kubenode1 ~]# vim /usr/lib/systemd/system/kube-scheduler.service
[Unit]
Description=Kubernetes Scheduler
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.target
After=kube-apiserver.service [Service]
EnvironmentFile=/usr/local/kubernetes/kube-scheduler.conf
ExecStart=/usr/local/kubernetes/bin/kube-scheduler $KUBE_SCHEDULER_ARGS
Restart=on-failure
RestartSec=5 [Install]
WantedBy=multi-user.target # 启动参数文件
# --kubeconfig:kubeconfig配置文件路径,配置文件中包含master地址信息与必要的认证信息;
# --leader-elect:设置为true时进行leader选举,集群高可用部署时scheduler必须选举leader,默认即true
[root@kubenode1 ~]# touch /usr/local/kubernetes/kube-scheduler.conf
[root@kubenode1 ~]# vim /usr/local/kubernetes/kube-scheduler.conf
KUBE_SCHEDULER_ARGS="--master=https://172.30.200.10:6443 \
--kubeconfig=/etc/kubernetes/scheduler/scheduler.conf \
--leader-elect=true \
--logtostderr=false \
--log-dir=/var/log/kubernetes/scheduler \
--v=2" # 创建日志目录
[root@kubenode1 ~]# mkdir -p /var/log/kubernetes/scheduler

4. 启动并验证

1)kube-scheduler状态验证

[root@kubenode1 ~]# systemctl daemon-reload
[root@kubenode1 ~]# systemctl enable kube-scheduler
[root@kubenode1 ~]# systemctl start kube-scheduler
[root@kubenode1 ~]# systemctl status kube-scheduler

2)kube-scheduler选举查看

# 因kubenode1是第一个启动kube-scheduler节点,尝试获取leader权限,成功
[root@kubenode1 ~]# cat /var/log/kubernetes/scheduler/kube-scheduler.INFO | grep "leaderelection"

# 在kubenode2上观察,kubenode2在尝试获取leader权限,但未成功,后续操作挂起
[root@kubenode2 ~]# tailf /var/log/kubernetes/scheduler/kube-scheduler.INFO

3)验证master节点功能

# 在任意具有客户端工具kubectl的节点上均可查询master集群各核心组件的状态;
# kubectl默认会调用~/.kube/config的kube-apiserver信息与认证信息;
# “kubectl get componentstatuses”可简写” kubectl get cs”
[root@kubenode1 ~]# kubectl get componentstatuses

高可用Kubernetes集群-8. 部署kube-scheduler的更多相关文章

  1. 高可用Kubernetes集群-11. 部署kube-dns

    参考文档: Github介绍:https://github.com/kubernetes/dns Github yaml文件:https://github.com/kubernetes/kuberne ...

  2. 高可用Kubernetes集群-15. 部署Kubernetes集群统一日志管理

    参考文档: Github:https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/fluentd-elasticsear ...

  3. 高可用Kubernetes集群-14. 部署Kubernetes集群性能监控平台

    参考文档: Github介绍:https://github.com/kubernetes/heapster Github yaml文件: https://github.com/kubernetes/h ...

  4. 高可用Kubernetes集群-12. 部署kubernetes-ingress

    参考文档: Github:https://github.com/kubernetes/ingress-nginx Kubernetes ingress:https://kubernetes.io/do ...

  5. 高可用Kubernetes集群-7. 部署kube-controller-manager

    九.部署kube-controller-manager kube-controller-manager是Kube-Master相关的3个服务之一,是有状态的服务,会修改集群的状态信息. 如果多个mas ...

  6. 高可用Kubernetes集群-6. 部署kube-apiserver

    八.部署kube-apiserver 接下来3章节是部署Kube-Master相关的服务,包含:kube-apiserver,kube-controller-manager,kube-schedule ...

  7. 高可用Kubernetes集群-10. 部署kube-proxy

    十二.部署kube-proxy 1. 创建kube-proxy证书 1)创建kube-proxy证书签名请求 # kube-proxy提取CN作为客户端的用户名,即system:kube-proxy. ...

  8. 高可用Kubernetes集群-13. 部署kubernetes-dashboard

    参考文档: Github介绍:https://github.com/kubernetes/dashboard Github yaml文件:https://github.com/kubernetes/d ...

  9. 高可用Kubernetes集群-9. 部署kubelet

    十一.部署kubelet 接下来两个章节是部署Kube-Node相关的服务,包含:kubelet,kube-proxy. 1. TLS bootstrap用户授权 # kubelet采用TLS Boo ...

随机推荐

  1. 在Eclipse中执行、配置Hadoop

    版权全部: zhe-jiang.he@hp.com  严禁转载! 1.安装插件 准备程序: eclipse-3.3.2(这个版本号的插件仅仅能用这个版本号的eclipse) hadoop-0.20.2 ...

  2. 字体在mac win 系统如何优雅的展示

    我们知道,不同的操作系统,不同的浏览器,页面字体的显示和渲染存在差异. 那么如何设置font-family,能够使字体在不同的环境下,也拥有好的展示效果? 1.操作系统中字体默认的字体 windows ...

  3. Java并发编程(九)线程间协作(下)

    上篇我们讲了使用wait()和notify()使线程间实现合作,这种方式很直接也很灵活,但是使用之前需要获取对象的锁,notify()调用的次数如果小于等待线程的数量就会导致有的线程会一直等待下去.这 ...

  4. 前端应该掌握的ps知识

    你说有美图秀秀之后PS要over了,NO PS 依旧很重要,当然除了修人像,比如切图什么的 来吧 开始吧 在开始切图之前,先科普几个小技巧 1. 如果快速从大图中拿出自己想要的小图 : 需求:快速拿出 ...

  5. Git很简单--图解攻略

    Git Git 是目前世界上最先进的分布式版本控制系统(没有之一) 作用 源代码管理 为什么要进行源代码管理? 方便多人协同开发 方便版本控制 Git管理源代码特点 1.Git是分布式管理.服务器和客 ...

  6. cookie,session,token

    发展史 1.很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新的HTTP协议, 就是请求加响应,  尤其是我不用 ...

  7. 执行mongod其他实例出现的问题

    windows环境下,配置其他mongo实例,会出现一些问题 1.配置路径不对,执行bat文件时出现闪屏 根据提示创建C:\data\db\ 目录(因为mongodb默认在/data/db下创建数据库 ...

  8. [译]C语言实现一个简易的Hash table(2)

    上一章,简单介绍了Hash Table,并提出了本教程中要实现的几个Hash Table的方法,有search(a, k).insert(a, k, v)和delete(a, k),本章将介绍Hash ...

  9. python学习笔记(一)学习资料记录

    相关资料网站 1. python3简明教程 适合新学者,因为可以在线操作,并且校验结果,同时还有考试系统.比较基础 2. python数据分析数据科学中文英文工具书籍下载 免费的中英文数据的PDF下载 ...

  10. 1.Hadoop集群安装部署

    Hadoop集群安装部署 1.介绍 (1)架构模型 (2)使用工具 VMWARE cenos7 Xshell Xftp jdk-8u91-linux-x64.rpm hadoop-2.7.3.tar. ...