Kubernetes集群二进制部署(三)——多master集群

一、环境

首先需要搭建单master节点部署环境

已完成的相关部署:

Kubernetes集群二进制部署(一)——Etcd数据库群集功能部署、flannel网络组建

Kubernetes集群二进制部署(二)——单master集群

服务器 IP 安装软件
Master01 192.168.11.11 kube-apiserver、kube-controller-manager、kube-scheduler、etcd
Master02 192.168.11.12 kube-apiserver、kube-controller-manager、kube-scheduler、etcd
负载均衡lb01 192.168.11.13/VIP:192.168.11.100 nginx、keepalived
负载均衡lb02 192.168.11.14/VIP:192.168.11.100 nginx、keepalived
Node01 192.168.11.16 kubelet、kube-proxy、docker 、flannel 、etcd
Node02 192.168.11.17 kubelet、kube-proxy、docker 、flannel 、etcd

二、软件包

百度网盘链接:https://pan.baidu.com/s/1o8kgiC_9b2hO8FRNaDGC3Q
提取码:qz5v

三、Master02部署

1、网络环境准备

#清空防火墙规则、关闭核心防护

[root @master02 ~]# iptables -F    #清空防火墙规则
[root @master02 ~]# setenforce 0   #关闭核心防护

#防止重启虚拟机IP地址变化

生产环境中是一定要关闭该功能的

[root @master02 ~]# systemctl stop NetworkManager
[root @master02 ~]# systemctl enable NetworkManager

2、部署master02

① 将master01上的kuberetes目录拷贝至master02上

[root @master01 ~]# scp -r /opt/kubernetes/ root@192.168.11.12:/opt

② 将master01上的三个组件启动脚本拷贝至master02上

[root @master01 ~]# scp /usr/lib/systemd/system/{kube-apiserver,kube-controller-manager,kube-scheduler}.service root@192.168.11.12:/usr/lib/systemd/system/

③ 修改master02配置文件 kube-apiserver中的IP地址

[root @master02 ~]# cd /opt/kubernetes/cfg
[root @master02 cfg]# vim kube-apiserver

### Kubernetes 1.26 Master 集群二进制部署指南 在 Kubernetes 1.26 中,使用二进制方式部署 Master 集群是一种较为底层但灵活性更高的方法。该部署方式要求手动配置所有组件,包括 kube-apiserver、kube-controller-manager、kube-scheduler、etcd、kubelet 和 kube-proxy 等。 #### 基础环境准备 - **操作系统**:建议使用 Ubuntu 或 CentOS,确保所有节点之间网络互通。 - **硬件要求**:每个 Master 节点至少需要 2 核 CPU 和 4GB 内存。 - **时间同步**:使用 `chronyd` 或 `ntpd` 同步所有节点的时间。 - **主机名解析**:在 `/etc/hosts` 文件中配置所有节点的 IP 地址和主机名映射。 - **禁用交换分区**:通过 `swapoff -a` 禁用交换分区,并在 `/etc/fstab` 中注释掉 swap 挂载项。 #### 安装依赖包 在所有节点上安装必要的软件包,例如 `conntrack`、`ipset`、`iptables` 等: ```bash sudo apt-get update && sudo apt-get install -y conntrack ipset iptables ``` #### 安装 Docker Kubernetes 支持种容器运行时,Docker 是其中一种常见选择。安装最新版本的 Docker 并设置开机自启: ```bash curl -fsSL https://get.docker.com | sh- sudo systemctl enable docker && sudo systemctl start docker ``` #### 下载并解压 Kubernetes 二进制文件 从 [Kubernetes GitHub 发布页面](https://github.com/kubernetes/kubernetes/releases) 下载所需版本的二进制文件,然后将其解压到目标目录: ```bash wget https://dl.k8s.io/v1.26.0/kubernetes-server-linux-amd64.tar.gz tar -xzvf kubernetes-server-linux-amd64.tar.gz cd kubernetes/server/bin/ sudo cp kube-apiserver kube-controller-manager kube-scheduler kubectl /usr/local/bin/ ``` #### 配置 etcd 集群 etcd 是 Kubernetes 的分布式键值存储系统,用于保存集群的所有数据。在节点上安装并配置 etcd 集群,确保高可用性。以下是单个节点的示例配置: ```bash ETCD_NAME="master1" ETCD_DATA_DIR="/var/lib/etcd" ETCD_LISTEN_PEER_URLS="http://192.168.1.10:2380" ETCD_LISTEN_CLIENT_URLS="http://192.168.1.10:2379,http://127.0.0.1:2379" ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.1.10:2380" ETCD_ADVERTISE_CLIENT_URLS="http://192.168.1.10:2379" ETCD_INITIAL_CLUSTER="master1=http://192.168.1.10:2380,master2=http://192.168.1.11:2380,master3=http://192.168.1.12:2380" ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-1" ETCD_INITIAL_CLUSTER_STATE="new" ``` #### 配置 kube-apiserver 在每个 Master 节点上配置 kube-apiserver,指定 etcd 集群地址和其他参数: ```bash KUBE_APISERVER_OPTS="--logtostderr=true --v=4 --etcd-servers=http://192.168.1.10:2379,http://192.168.1.11:2379,http://192.168.1.12:2379 --bind-address=0.0.0.0 --secure-port=6443 --advertise-address=192.168.1.10 --allow-privileged=true --service-cluster-ip-range=10.0.0.0/24 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,NodeRestriction --authorization-mode=RBAC,Node --enable-bootstrap-token-auth --token-auth-file=/etc/kubernetes/token.csv --tls-cert-file=/etc/kubernetes/pki/apiserver.crt --tls-private-key-file=/etc/kubernetes/pki/apiserver.key --client-ca-file=/etc/kubernetes/pki/ca.crt --service-account-key-file=/etc/kubernetes/pki/sa.pub --requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt --proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.crt --proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client.key --requestheader-allowed-names=front-proxy-client --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --enable-aggregator-routing=true" ``` #### 配置 kube-controller-manager 在每个 Master 节点上配置 kube-controller-manager,指定 master 地址和其他参数: ```bash KUBE_CONTROLLER_MANAGER_OPTS="--logtostderr=true --v=4 --master=127.0.0.1:8080 --leader-elect=true --address=0.0.0.0 --cluster-name=kubernetes --cluster-signing-cert-file=/etc/kubernetes/pki/ca.crt --cluster-signing-key-file=/etc/kubernetes/pki/ca.key --service-account-private-key-file=/etc/kubernetes/pki/sa.key --root-ca-file=/etc/kubernetes/pki/ca.crt --node-cidr-mask-size=24" ``` #### 配置 kube-scheduler 在每个 Master 节点上配置 kube-scheduler,指定 master 地址和其他参数: ```bash KUBE_SCHEDULER_OPTS="--logtostderr=true --v=4 --master=127.0.0.1:8080 --leader-elect=true --address=0.0.0.0" ``` #### 启动 Master 组件 创建 systemd 服务文件并启动各组件服务。以 kube-apiserver 为例: ```ini [Unit] Description=Kubernetes API Server Documentation=https://github.com/kubernetes/kubernetes [Service] ExecStart=/usr/local/bin/kube-apiserver \ --logtostderr=true \ --v=4 \ --etcd-servers=http://192.168.1.10:2379,http://192.168.1.11:2379,http://192.168.1.12:2379 \ --bind-address=0.0.0.0 \ --secure-port=6443 \ --advertise-address=192.168.1.10 \ --allow-privileged=true \ --service-cluster-ip-range=10.0.0.0/24 \ --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,NodeRestriction \ --authorization-mode=RBAC,Node \ --enable-bootstrap-token-auth \ --token-auth-file=/etc/kubernetes/token.csv \ --tls-cert-file=/etc/kubernetes/pki/apiserver.crt \ --tls-private-key-file=/etc/kubernetes/pki/apiserver.key \ --client-ca-file=/etc/kubernetes/pki/ca.crt \ --service-account-key-file=/etc/kubernetes/pki/sa.pub \ --requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt \ --proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.crt \ --proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client.key \ --requestheader-allowed-names=front-proxy-client \ --requestheader-extra-headers-prefix=X-Remote-Extra- \ --requestheader-group-headers=X-Remote-Group \ --enable-aggregator-routing=true Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target ``` #### 配置 kubelet 在所有节点上配置 kubelet,指定 master 地址和其他参数: ```bash KUBELET_OPTS="--logtostderr=true --v=4 --hostname-override=192.168.1.10 --kubeconfig=/etc/kubernetes/kubelet.conf --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --config=/etc/kubernetes/config/kubelet --cgroup-driver=systemd/cgroupfs" ``` #### 配置 kube-proxy 在所有节点上配置 kube-proxy,指定 master 地址和其他参数: ```bash KUBE_PROXY_OPTS="--logtostderr=true --v=4 --master=192.168.1.10:6443 --config=/etc/kubernetes/config/proxy" ``` #### 初始化集群 使用 `kops` 或手动创建 CA 证书和密钥对,生成所需的 TLS 证书。之后,通过 `kubectl` 工具验证集群状态: ```bash kubectl get nodes ``` #### 高可用配置 为了实现高可用性,可以使用 Keepalived 或 HAProxy 设置虚拟 IP 地址,指向所有 Master 节点。这样客户端可以通过虚拟 IP 访问集群,而无需关心具体的 Master 节点。 #### 监控与维护 使用 Prometheus 和 Grafana 进行监控,定期检查日志文件(如 `/var/log/kube-apiserver.log`),并确保所有组件正常运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值