【k8s】多节点master部署k8s集群详解、步骤带图、配置文件带注释(上)

简介: 文章目录前言一、部署详解1.1 架构1.2 初始化环境(所有节点)

一、部署详解

1.1 架构

正文
• 1

1.2 初始化环境(所有节点)

#所有节点操作,关闭防火墙、selinux、swap交换、添加本地域名解析、调整内核参数、开启时间同步
systemctl stop firewalld
systemctl disable firewalld
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab 
cat >> /etc/hosts << EOF
192.168.13.10 master01
192.168.13.20 node01
192.168.13.30 node02
192.168.13.40 master02
192.168.13.50 nginx01
192.168.13.60 nginx02
EOF
cat > /etc/sysctl.d/k8s.conf << EOF
#开启网桥模式,可将网桥的流量传递给iptables链
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
#关闭ipv6协议
net.ipv6.conf.all.disable_ipv6=1
net.ipv4.ip_forward=1
EOF
sysctl --system
yum install ntpdate -y
ntpdate time.windows.com

1.3 部署etcd集群(命令)

#在 master01 节点上操作
hostnamectl set-hostname master01
su
#准备cfssl证书生成工具(从官网下载,也可以提前下载后直接上传,我采用下载后上传)
#wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -O /usr/local/bin/cfssl
#wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -O /usr/local/bin/cfssljson
#wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -O /usr/local/bin/cfssl-certinfo
#若出现:无法建立 SSL 连接。这个报错,则将https换为http即可!
cd /usr/local/bin/
#上传证书到/usr/local/bin/目录中
chmod +x /usr/local/bin/cfssl*
#通过脚本生成CA证书、etcd 服务器证书以及私钥
mkdir -p /opt/etcd/etcd-cert
cd /opt/etcd/etcd-cert/
#上传 etcd-cert.sh和etcd.sh脚本(需修改脚本IP地址)
chmod +x etcd-cert.sh etcd.sh
./etcd-cert.sh
#若证书生成成功,则会多出以下文件(ls查看)
#ca-config.json  ca-csr.json  ca.pem        server.csr       server-key.pem
#ca.csr          ca-key.pem   etcd-cert.sh  server-csr.json  server.pem
#准备启动etcd服务的相关文件
mkdir -p /opt/etcd/{cfg,bin,ssl}
cd /opt/etcd/
#上传 etcd-v3.4.9-linux-amd64.tar.gz 到 /opt/etcd 目录中,启动etcd服务
tar xf etcd-v3.4.9-linux-amd64.tar.gz
mv /opt/etcd/etcd-v3.4.9-linux-amd64/etcd* /opt/etcd/bin/
mv /opt/etcd/etcd-cert/*.pem /opt/etcd/ssl/
cd /opt/etcd/etcd-cert/
./etcd.sh etcd01 192.168.13.10 etcd02=https://192.168.13.20:2380,etcd03=https://192.168.13.30:2380
#若你的脚本和我的不一样,最后加了:systemctl restart etcd启动etcd服务,则会报错,但是不会影响程序
ps -ef | grep etcd
scp -r /opt/etcd/ root@192.168.13.20:/opt/
scp -r /opt/etcd/ root@192.168.13.30:/opt/
scp /usr/lib/systemd/system/etcd.service root@192.168.13.20:/usr/lib/systemd/system/
scp /usr/lib/systemd/system/etcd.service root@192.168.13.30:/usr/lib/systemd/system/
#在所有node节点操作,修改配置文件为对应的节点
hostnamectl set-hostname node01
su
vim /opt/etcd/cfg/etcd
#[Member]
ETCD_NAME="etcd02"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.13.20:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.13.20:2379"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.13.20:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.13.20:2379"
ETCD_INITIAL_CLUSTER="etcd01=https://192.168.13.10:2380,etcd02=https://192.168.13.20:2380,etcd03=https://192.168.13.30:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
systemctl start etcd
systemctl enable etcd
systemctl status etcd
#回到master01节点,启动etcd服务
systemctl restart etcd
#检查etcd群集状态(两条命令,哪个都行,启动成功则会出现3个true或3个started)
ETCDCTL_API=3 /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints="https://192.168.13.10:2379,https://192.168.13.20:2379,https://192.168.13.30:2379" endpoint health --write-out=table
ETCDCTL_API=3 /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints="https://192.168.13.10:2379,https://192.168.13.20:2379,https://192.168.13.30:2379" --write-out=table member list
#至此,etcd集群部署完毕

1.3 部署etcd集群(图解)


1.4 master01节点部署相关组件(命令)

#在 master01节点上操作,生成证书
mkdir -p /opt/kubernetes/{bin,cfg,ssl,logs,k8s-cert}
cd /opt/kubernetes/
#上传k8s-cert.sh,master.zip,kubernetes-server-linux-amd64.tar.gz到/opt/kubernetes目录
#五个脚本,涉及路径指向,若是修改路径,则需要将路径对应上(报错会显示多少行)
unzip master.zip
tar xf kubernetes-server-linux-amd64.tar.gz
chmod +x *.sh
#创建用于生成CA证书、相关组件的证书和私钥的目录
mv /opt/kubernetes/k8s-cert.sh /opt/kubernetes/k8s-cert
cd /opt/kubernetes/k8s-cert/
./k8s-cert.sh
#若证书生成成功,则会多出以下文件(ls *.pem查看)
#admin-key.pem  apiserver-key.pem  ca-key.pem  kube-proxy-key.pem  
#admin.pem      apiserver.pem      ca.pem      kube-proxy.pem
cp ca*pem apiserver*pem /opt/kubernetes/ssl/
cd /opt/kubernetes/kubernetes/server/bin
cp kube-apiserver kubectl kube-controller-manager kube-scheduler /opt/kubernetes/bin/
ln -s /opt/kubernetes/bin/* /usr/local/bin/
#创建 bootstrap token 认证文件,apiserver 启动时会调用,然后就相当于在集群内创建了一个这个用户,接下来就可以用 RBAC 给他授权
cd /opt/kubernetes/
vim token.sh
#!/bin/bash
#获取随机数前16个字节内容,以十六进制格式输出,并删除其中空格
BOOTSTRAP_TOKEN=$(head -c 16 /dev/urandom | od -An -t x | tr -d ' ')
#生成 token.csv 文件,按照 Token序列号,用户名,UID,用户组 的格式生成
cat > /opt/kubernetes/cfg/token.csv <<EOF
${BOOTSTRAP_TOKEN},kubelet-bootstrap,10001,"system:kubelet-bootstrap"
EOF
chmod +x token.sh
./token.sh
#查看roken.csv是否生成成功
cat /opt/kubernetes/cfg/token.csv
cd /opt/kubernetes/
#启动kube-apiserver、scheduler、controller-manager三项服务
./apiserver.sh 192.168.13.10 https://192.168.13.10:2379,https://192.168.13.20:2379,https://192.168.13.30:2379
./scheduler.sh
./controller-manager.sh
./admin.sh
#可通过ps过滤查看程序是否启动成功
#ps aux | grep kube-apiserver
#ps aux | grep kube-scheduler
#ps aux | grep kube-controller-manager
#生成kubectl连接集群的证书
kubectl create clusterrolebinding cluster-system-anonymous --clusterrole=cluster-admin --user=system:anonymous
#通过kubectl工具查看当前集群组件状态(成功会显示manager、scheduler为ok)
kubectl get cs

1.4 master01节点组件部署(截图)

1.5 work node节点组件部署(命令)

#在所有node节点上安装docker引擎(必须先创建docker,否则会出现:No resources found报错)
yum install -y yum-utils device-mapper-persistent-data lvm2 
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
yum install -y docker-ce docker-ce-cli containerd.io
systemctl start docker.service
systemctl enable docker.service 
#创建kubernetes工作目录
mkdir -p /opt/kubernetes/{bin,cfg,ssl,logs}
cd /opt/
#上传 node.zip 到 /opt 目录中,解压 node.zip 压缩包,获得kubelet.sh、proxy.sh
unzip node.zip
chmod +x kubelet.sh proxy.sh
#在 master01 节点上操作,把 kubelet、kube-proxy 拷贝到 node 节点
cd /opt/kubernetes/kubernetes/server/bin
scp kubelet kube-proxy root@192.168.13.20:/opt/kubernetes/bin/
scp kubelet kube-proxy root@192.168.13.30:/opt/kubernetes/bin/
mkdir -p /opt/kubernetes/kubeconfig
cd /opt/kubernetes/kubeconfig
#上传 kubeconfig.sh 文件到 /opt/kubernetes/kubeconfig 目录中,生成 kubeconfig 的配置文件
chmod +x kubeconfig.sh
./kubeconfig.sh 192.168.13.10 /opt/kubernetes/k8s-cert/
scp bootstrap.kubeconfig kube-proxy.kubeconfig root@192.168.13.20:/opt/kubernetes/cfg/
scp bootstrap.kubeconfig kube-proxy.kubeconfig root@192.168.13.30:/opt/kubernetes/cfg/
#RBAC授权,使用户 kubelet-bootstrap 能够有权限发起 CSR 请求
kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap
#以上皆为master01节点操作
#在 node01 节点上操作,启动 kubelet 服务
cd /opt
/opt/kubelet.sh 192.168.13.20
ps aux | grep kubelet
#在 master01 节点上操作,通过 CSR 请求,通过命令获取节点名称(NAME列)
kubectl get csr
#通过对应命令为节点签发证书
kubectl certificate approve 节点名称(NAME列)
#Approved,Issued 表示已授权 CSR 请求并签发证书(Approved,Issued状态表示已签发)
kubectl get csr
#查看节点,由于网络插件还没有部署,节点会没有准备就绪 NotReady
kubectl get node
#以上皆为master01节点操作
#在所有node节点上操作,加载 ip_vs 模块
for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*")
do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;
done
#启动proxy服务
/opt/proxy.sh 192.168.13.20
ps aux | grep kube-proxy

1.5 work node节点组件部署(截图)

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
存储 Kubernetes 开发工具
使用ArgoCD管理Kubernetes部署指南
ArgoCD 是一款基于 Kubernetes 的声明式 GitOps 持续交付工具,通过自动同步 Git 存储库中的配置与 Kubernetes 集群状态,确保一致性与可靠性。它支持实时同步、声明式设置、自动修复和丰富的用户界面,极大简化了复杂应用的部署管理。结合 Helm Charts,ArgoCD 提供模块化、可重用的部署流程,显著减少人工开销和配置错误。对于云原生企业,ArgoCD 能优化部署策略,提升效率与安全性,是实现自动化与一致性的理想选择。
884 0
|
存储 Kubernetes 异构计算
Qwen3 大模型在阿里云容器服务上的极简部署教程
通义千问 Qwen3 是 Qwen 系列最新推出的首个混合推理模型,其在代码、数学、通用能力等基准测试中,与 DeepSeek-R1、o1、o3-mini、Grok-3 和 Gemini-2.5-Pro 等顶级模型相比,表现出极具竞争力的结果。
|
存储 Kubernetes 监控
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
1151 33
|
Kubernetes 开发者 Docker
集群部署:使用Rancher部署Kubernetes集群。
以上就是使用 Rancher 部署 Kubernetes 集群的流程。使用 Rancher 和 Kubernetes,开发者可以受益于灵活性和可扩展性,允许他们在多种环境中运行多种应用,同时利用自动化工具使工作负载更加高效。
748 19
|
7月前
|
人工智能 算法 调度
阿里云ACK托管集群Pro版共享GPU调度操作指南
本文介绍在阿里云ACK托管集群Pro版中,如何通过共享GPU调度实现显存与算力的精细化分配,涵盖前提条件、使用限制、节点池配置及任务部署全流程,提升GPU资源利用率,适用于AI训练与推理场景。
605 1
|
7月前
|
弹性计算 监控 调度
ACK One 注册集群云端节点池升级:IDC 集群一键接入云端 GPU 算力,接入效率提升 80%
ACK One注册集群节点池实现“一键接入”,免去手动编写脚本与GPU驱动安装,支持自动扩缩容与多场景调度,大幅提升K8s集群管理效率。
430 89
|
12月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
ACK One 的多集群应用分发,可以最小成本地结合您已有的单集群 CD 系统,无需对原先应用资源 YAML 进行修改,即可快速构建成多集群的 CD 系统,并同时获得强大的多集群资源调度和分发的能力。
838 9
|
12月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
本文介绍如何利用阿里云的分布式云容器平台ACK One的多集群应用分发功能,结合云效CD能力,快速将单集群CD系统升级为多集群CD系统。通过增加分发策略(PropagationPolicy)和差异化策略(OverridePolicy),并修改单集群kubeconfig为舰队kubeconfig,可实现无损改造。该方案具备多地域多集群智能资源调度、重调度及故障迁移等能力,帮助用户提升业务效率与可靠性。
|
人工智能 分布式计算 调度
打破资源边界、告别资源浪费:ACK One 多集群Spark和AI作业调度
ACK One多集群Spark作业调度,可以帮助您在不影响集群中正在运行的在线业务的前提下,打破资源边界,根据各集群实际剩余资源来进行调度,最大化您多集群中闲置资源的利用率。
|
Prometheus Kubernetes 监控
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。

推荐镜像

更多