十.部署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. windows下nginx访问web目录提示403 Forbidden

    在windows下 http服务器nginx时,访问web目录提示403 Forbidden,首先需要了解nginx出现403错误是什么意思: 403 Forbidden表示你在请求一个资源文件但是n ...

  2. TestNG+Maven+IDEA 自动化测试(二) TestNG.xml

    示例代码: https://github.com/ryan255/TestNG-Demo 项目代码结构参考上一章 TestNG+Maven+IDEA 自动化测试(一) 环境搭建 maven插件引入 & ...

  3. iOS笔记,开发经验总结【持续更新】

    1. 设置navigationBar 背景颜色有色差, 原因:如果单纯的设置背景颜色也是有高斯模糊处理的效果,对纯色高斯模糊处理过后相当于纯色的70%(猜测)透明化处理,但是反正就是有色差 解决方法一 ...

  4. Java接口和抽象类详解

    父类定义了相关子类的共有属性和行为.而接口可以定义类的共同行为(包括非相关的类). 了解接口前,先来说说抽象类.抽象类介乎于普通类和接口之间,提供部分实现方法以及未实现方法,可以看作为一个半成品. 抽 ...

  5. solve the promble of VMware Workstation Ubuntu18.04 ethernet interface losting

    $ ifconfig -aens33: flags=4098<BROADCAST,MULTICAST>  mtu 1500    ether 00:**:**:**:**:**  txqu ...

  6. 偏前端-纯css,手写轮播-(焦点切换 和 自动轮播 只可选择一种,两者不可共存)

    现在我们一般都是在网上找个轮播插件,各种功能应有尽有,是吧!!~大家似乎已经生疏了手写是什么感觉.万一哪天想不起来,人家要手写,就尴尬了!~~跟我一起复习一下吧 不多说:效果图看一下: 高度不能是固定 ...

  7. Composer管理thinkphp版本

    安装Composer 下载 Composer 安装前请务必确保已经正确安装了 PHP.打开命令行窗口并执行 php -v 查看是否正确输出版本号. 打开命令行并依次执行下列命令安装最新版本的 Comp ...

  8. 多线程深入理解和守护线程、子线程、锁、queue、evenet等介绍

    1.多线程类的继承 import threading import time class MyThreading(threading.Thread): def __init__(self,n): su ...

  9. c语言智能指针 附完整示例代码

    是的,你没有看错, 不是c++不是c#, 就是你认识的那个c语言. 在很长一段时间里,c的内存管理问题, 层出不穷,不是编写的时候特别费劲繁琐, 就是碰到内存泄漏排查的各种困难, 特别在多线程环境下, ...

  10. Google protobuf使用技巧和经验

    Google protobuf是非常出色的开源工具,在项目中可以用它来作为服务间数据交互的接口,例如rpc服务.数据文件传输等.protobuf为proto文件中定义的对象提供了标准的序列化和反序列化 ...