【云原生 · Kubernetes】部署高可用kube-scheduler集群
部署高可用kube-scheduler集群
该集群包含 3 个节点,启动后将通过竞争选举机制产生一个 leader 节点,其它节点为阻塞状态。当leader 节点不可用后,剩余节点将再次进行选举产生新的 leader 节点,从而保证服务的可用性。
先生成 x509 证书和私钥,kube-scheduler 在如下两种情况下使用该证书:
- 与 kube-apiserver 的安全端口通信;
- 在安全端口(https,10259) 输出 prometheus 格式的 metrics;
13.1 创建 kube-scheduler 证书和私钥
创建证书签名请求:
cd /opt/k8s/work
cat > /opt/k8s/cfssl/k8s/k8s-scheduler.json <<EOF
{
"CN": "system:kube-scheduler",
"hosts": [""],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "GuangDong",
"L": "GuangZhou",
"O": "system:kube-scheduler",
"OU": "Kubernetes-manual"
}
]
}
EOF
- hosts 列表包含所有 kube-scheduler 节点 IP;
- CN 和 O 均为 system:kube-scheduler ,kubernetes 内置的 ClusterRoleBindings system:kubescheduler 将赋予kube-scheduler 工作所需的权限;
生成证书和私钥:
cd /opt/k8s/work
cfssl gencert \
-ca=/opt/k8s/cfssl/pki/k8s/k8s-ca.pem \
-ca-key=/opt/k8s/cfssl/pki/k8s/k8s-ca-key.pem \
-config=/opt/k8s/cfssl/ca-config.json \
-profile=kubernetes \
/opt/k8s/cfssl/k8s/k8s-scheduler.json | \
cfssljson -bare /opt/k8s/cfssl/pki/k8s/k8s-scheduler
ls /opt/k8s/cfssl/pki/k8s/k8s-scheduler*pem
将生成的证书和私钥分发到所有 master 节点:
cd /opt/k8s/work
scp -r /opt/k8s/cfssl/pki/k8s/k8s-scheduler* root@192.168.2.175:/apps/k8s/ssl/k8s
scp -r /opt/k8s/cfssl/pki/k8s/k8s-scheduler* root@192.168.2.176:/apps/k8s/ssl/k8s
scp -r /opt/k8s/cfssl/pki/k8s/k8s-scheduler* root@192.168.2.177:/apps/k8s/ssl/k8s
13.2 创建和分发 kubeconfig 文件
kube-scheduler 使用 kubeconfig 文件访问 apiserver,该文件提供了 apiserver 地址、嵌入的 CA 证书和
kube-scheduler 证书:
cd /opt/k8s/kubeconfig
# 设置集群参数
kubectl config set-cluster kubernetes \
--certificate-authority=/opt/k8s/cfssl/pki/k8s/k8s-ca.pem \
--embed-certs=true \
--server=https://127.0.0.1:6443 \
--kubeconfig=kube-scheduler.kubeconfig
# 设置客户端认证参数
kubectl config set-credentials system:kube-scheduler \
--client-certificate=/opt/k8s/cfssl/pki/k8s/k8s-scheduler.pem \
--embed-certs=true \
--client-key=/opt/k8s/cfssl/pki/k8s/k8s-scheduler-key.pem \
--kubeconfig=kube-scheduler.kubeconfig
# 设置上下文参数
kubectl config set-context kubernetes \
--cluster=kubernetes \
--user=system:kube-scheduler \
--kubeconfig=kube-scheduler.kubeconfig
# 设置默认上下文
kubectl config use-context kubernetes --kubeconfig=kube-scheduler.kubeconfig
分发 kubeconfig 到所有 master 节点:
cd /opt/k8s/kubeconfig
scp kube-scheduler.kubeconfig root@192.168.2.175:/apps/k8s/config/
scp kube-scheduler.kubeconfig root@192.168.2.176:/apps/k8s/config/
scp kube-scheduler.kubeconfig root@192.168.2.177:/apps/k8s/config/
13.3 创建 kube-scheduler 配置文件
cd /opt/k8s/work
cat >kube-scheduler <<EOF
KUBE_SCHEDULER_OPTS=" \
--logtostderr=true \
--bind-address=0.0.0.0 \
--leader-elect=true \
--kubeconfig=/apps/k8s/config/kube-scheduler.kubeconfig \
--authentication-kubeconfig=/apps/k8s/config/kubescheduler.kubeconfig \
--authorization-kubeconfig=/apps/k8s/config/kubescheduler.kubeconfig \
--tls-cert-file=/apps/k8s/ssl/k8s/k8s-scheduler.pem \
--tls-private-key-file=/apps/k8s/ssl/k8s/k8s-scheduler-key.pem \
--client-ca-file=/apps/k8s/ssl/k8s/k8s-ca.pem \
--requestheader-allowed-names= \
--requestheader-extra-headers-prefix=X-Remote-Extra- \
--requestheader-group-headers=X-Remote-Group \
--requestheader-username-headers=X-Remote-User \
--alsologtostderr=true \
--kube-api-qps=100 \
--authentication-tolerate-lookup-failure=false \
--kube-api-burst=100 \
--log-dir=/apps/k8s/log \
--tls-ciphersuites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDH
E_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES
_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 \
--v=2"
EOF
- –kubeconfig :指定 kubeconfig 文件路径,kube-scheduler 使用它连接和验证 kube-apiserver;
- –leader-elect=true :集群运行模式,启用选举功能;被选为 leader 的节点负责处理工作,其它节 点为阻塞状态;
分发 kube-scheduler 配置文件到所有 master 节点
cd /opt/k8s/work
scp kube-scheduler root@192.168.2.175:/apps/k8s/conf/
scp kube-scheduler root@192.168.2.176:/apps/k8s/conf/
scp kube-scheduler root@192.168.2.177:/apps/k8s/conf/
13.4 创建 kube-scheduler systemd unit 模板文件
cd /opt/k8s/work
cat > kube-scheduler.service <<EOF
[Unit]
Description=Kubernetes Scheduler
Documentation=https://github.com/kubernetes/kubernetes
[Service]
LimitNOFILE=655350
LimitNPROC=655350
LimitCORE=infinity
LimitMEMLOCK=infinity
EnvironmentFile=-/apps/k8s/conf/kube-scheduler
ExecStart=/apps/k8s/bin/kube-scheduler \$KUBE_SCHEDULER_OPTS
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
13.5 为各节点创建和分发 kube-scheduler systemd unit 文件
分发到所有 master 节点:
cd /opt/k8s/work
scp kube-scheduler.service root@192.168.2.175:/usr/lib/systemd/system/
scp kube-scheduler.service root@192.168.2.176:/usr/lib/systemd/system/
scp kube-scheduler.service root@192.168.2.177:/usr/lib/systemd/system/
13.6 启动 kube-scheduler 服务
k8s-master-1 k8s-master-2 k8s-master-3 节点上执行
# 全局刷新service
systemctl daemon-reload
# 设置kube-scheduler开机启动
systemctl enable kube-scheduler
#重启kube-scheduler
systemctl restart kube-scheduler
13.7 检查服务运行状态
k8s-master-1 k8s-master-2 k8s-master-3 节点上执行
systemctl status kube-scheduler|grep Active
确保状态为 active (running) ,否则查看日志,确认原因:
journalctl -u kube-scheduler
kube-scheduler 监听 10259 端口,接收 https 请求:
[root@k8s-master-3 conf]# netstat -tnlp| grep kube-sc
tcp6 0 0 :::10259 :::* LISTEN
1887/kube-scheduler
13.8 查看当前的 leader
kubectl -n kube-system get leases kube-scheduler
root@Qist work# kubectl -n kube-system get leases kube-scheduler
NAME HOLDER AGE
kube-scheduler k8s-master-2_383bedd9-26ec-40c3-95e6-182aebe9b1b9 1d
13.9 测试 kube-scheduler 集群的高可用
随便找一个或两个 master 节点,停掉 kube-scheduler 服务,看其它节点是否获取了 leader 权限。
期待下次的分享,别忘了三连支持博主呀~
我是 念舒_C.ying ,期待你的关注~
附专栏链接
【云原生 · Kubernetes】runtime组件
【云原生 · Kubernetes】apiserver高可用
【云原生 · Kubernetes】kubernetes v1.23.3 二进制部署(三)
【云原生 · Kubernetes】kubernetes v1.23.3 二进制部署(二)
【云原生 · Kubernetes】kubernetes v1.23.3 二进制部署(一)
【云原生 · Kubernetes】Kubernetes 编排部署GPMall(一)
【云原生 · Kubernetes】部署高可用kube-scheduler集群的更多相关文章
- 基于MySQL+MHA+Haproxy部署高可用负载均衡集群
一.MHA 概述 MHA(Master High Availability)是可以在MySQL上使用的一套高可用方案.所编写的语言为Perl 从名字上我们可以看到.MHA的目的就是为了维护Master ...
- kubernetes部署高可用Harbor
前言 本文Harbor高可用依照Harbor官网部署,主要思路如下,大家可以根据具体情况选择搭建. 部署Postgresql高可用集群.(本文选用Stolon进行管理,请查看文章<kuberne ...
- keepalived工作原理和配置说明 腾讯云VPC内通过keepalived搭建高可用主备集群
keepalived工作原理和配置说明 腾讯云VPC内通过keepalived搭建高可用主备集群 内网路由都用mac地址 一个mac地址绑定多个ip一个网卡只能一个mac地址,而且mac地址无法改,但 ...
- [ Openstack ] Openstack-Mitaka 高可用之 Rabbitmq-server 集群部署
目录 Openstack-Mitaka 高可用之 概述 Openstack-Mitaka 高可用之 环境初始化 Openstack-Mitaka 高可用之 Mariadb-Galera集群 ...
- [ Openstack ] Openstack-Mitaka 高可用之 Mariadb-Galera集群部署
目录 Openstack-Mitaka 高可用之 概述 Openstack-Mitaka 高可用之 环境初始化 Openstack-Mitaka 高可用之 Mariadb-Galera集群 ...
- Dubbo入门到精通学习笔记(二十):MyCat在MySQL主从复制的基础上实现读写分离、MyCat 集群部署(HAProxy + MyCat)、MyCat 高可用负载均衡集群Keepalived
文章目录 MyCat在MySQL主从复制的基础上实现读写分离 一.环境 二.依赖课程 三.MyCat 介绍 ( MyCat 官网:http://mycat.org.cn/ ) 四.MyCat 的安装 ...
- kubernetes教程第一章-kubeadm高可用安装k8s集群
目录 Kubeadm高可用安装k8s集群 kubeadm高可用安装1.18基本说明 k8s高可用架构解析 kubeadm基本环境配置 kubeadm基本组件安装 kubeadm集群初始化 高可用Mas ...
- LVS+Keepalived搭建MyCAT高可用负载均衡集群
LVS+Keepalived 介绍 LVS LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国 ...
- Haproxy+Keepalived搭建Weblogic高可用负载均衡集群
配置环境说明: KVM虚拟机配置 用途 数量 IP地址 机器名 虚拟IP地址 硬件 内存3G 系统盘20G cpu 4核 Haproxy keepalived 2台 192.168.1.10 192 ...
- 高可用的MongoDB集群
1.序言 MongoDB 是一个可扩展的高性能,开源,模式自由,面向文档的数据库. 它使用 C++编写.MongoDB 包含一下特点: l 面向集合的存储:适合存储对象及JSON形式的数据. l ...
随机推荐
- 【设计模式】Java设计模式 - 单例模式
[设计模式]Java设计模式 - 单例模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 分享学习心得,欢迎指正,大家一起学习成长! 原创作品,更多关注我CSDN: ...
- linux 运维有趣的实用工具
1.实时监控磁盘 IO-IOTop IOTop 命令是专门显示硬盘 IO 的命令, 界面风格类似 top 命令. [root@localhost ~]# yum -y install iotop` 2 ...
- MariaDB数据库 主-从 部署
〇.前言 好久没碰数据库了 准备环境: centos7自带的MariaDB,没有的话下面是安装命令 yum install -y mariadb mariadb-server systemctl re ...
- 使用 Spring Boot Admin 监控应用状态
程序员优雅哥 SpringBoot 2.7 实战基础 - 11 - 使用 Spring Boot Admin 监控应用状态 1 Spring Boot Actuator Spring Boot Act ...
- 累加和为 K 的最长子数组问题
累加和为 K 的最长子数组问题 作者:Grey 原文地址: 博客园:累加和为 K 的最长子数组问题 CSDN:累加和为 K 的最长子数组问题 题目描述 给定一个整数组成的无序数组 arr,值可能正.可 ...
- 微服务系列之Api文档 swagger整合
1.前言 微服务架构随之而来的前后端彻底分离,且服务众多,无论是前后端对接亦或是产品.运营翻看,一个现代化.规范化.可视化.可尝试的文档是多么重要,所以我们这节就说说swagger. Swagger是 ...
- 使用 Elastic 技术栈构建 K8S 全栈监控 -2: 用 Metricbeat 对 Kubernetes 集群进行监控
文章转载自:https://www.qikqiak.com/post/k8s-monitor-use-elastic-stack-2/ 操作步骤 git clone https://github.co ...
- Helm包管理
Helm Kubernetes 包管理工具 Helm 可以帮助我们管理 Kubernetes 应用程序 - Helm Charts 可以定义.安装和升级复杂的 Kubernetes 应用程序,Char ...
- SkyWalking简要介绍
什么是 SkyWalking 分布式系统的应用程序性能监视工具,专为微服务.云原生架构和基于容器(Docker.K8s.Mesos)架构而设计.提供分布式追踪.服务网格遥测分析.度量聚合和可视化一体化 ...
- Elasticsearch:Elasticsearch HQ 介绍