Kubernetes集群部署实战(自用笔记)
本次笔记记录了在欧拉操作系统上从零部署Kubernetes(K8S)1.28集群的完整实操流程,涵盖环境准备、容器运行时安装、集群初始化、网络插件部署、监控组件安装、Dashboard配置、资源对象管理及生产环境最佳实践。
一、环境初始化准备
1.1关闭Swap交换空间

关闭命令:
bash
#临时关闭
swapoff -a
#永久关闭(注释掉/etc/fstab中的swap行)
sed -i '/swap/d' /etc/fstab
1.2配置主机名与DNS解析
bash
#设置主机名(每个节点唯一)
hostnamectl set-hostname master
hostnamectl set-hostname node1
hostnamectl set-hostname node2
#配置/etc/hosts解析
cat >> /etc/hosts << EOF
192.168.160.139 master
192.168.160.140 node1
192.168.160.141 node2
EOF
1.3启用内核路由转发与网桥参数
| 参数 | 值 | 说明 |
| net.iov4.ip_forward | 1 | IPv4路由转发 |
| net.bridge.bridge-nf-call-iptables | 1 | 网桥iptables调用 |
| net.bridge.bridge-nf-call-ip6tables | 1 | 网桥ip6tables调用 |
配置方法:
bash
# 加载br_netfilter模块
modprobe be_netfilter
# 配置内核参数
cat > /etc/sysctl.d/k8s.conf << EOF
net.ipv4.ip_forward=1
net.bridge.brodge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
EOF
#使配置生效
sysctl - p /etc/sysctl.d/k8s.conf
二、容器运行时与CRI插件安装
2.1containerd运行时安装

2.2CRI-Docker插件安装
用途:兼容原有Docker使用习惯,使K8S通过CRI接口调用Docker。
bash
#安装cri-dockerd
rpm -ivh cri-dockerd-0.3.x.rpm
#验证安装
cri-dockerd --version
#启动服务
systemctl start cri-docker
systemctl enable cri-docker
2.3启动插件并配置K8S运行时
bash
#在kubeadm init中指定CRI socket
--cri-socket /var/run/cri-dockerd.sock
三、K8S核心组件安装与初始化
3.1安装kubeadm/kubelet/kubectl
三个核心组件:
| 组件 | 功能 |
| kubeadm | 集群引导工具 |
| kubelet | 节点代理 |
| kubectl | 集群管理CLI |
bash
#配置K8S yum源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
EOF
#安装指定版本
yum insta;; -y kubesdm-1.28.15 kubelet-1.25.15 kubect-1.25.15
#启动kubelet
systemctl enablr kubelet
systemctl start kubelet
3.2Master节点初始化
bash
kubeadm init \
--apiserver-advertise-address=192.168.160.139 \
--pod-network-cide=10.244.0.0/16 \
--service-cidr=10.96.0.0/12 \
--cri-socket /var/run/cri-dockerd.sock \
--kubernetes-bersion=1.28.15
参数说明:
| 参数 |
说明 |
| --apiserver-advertise-address | API Server通告地址 |
| --pod-network-cidr | Pod网络CIDR |
| --service-cidr |
Service网络CIDR |
| --cri-socket | 指定CRI socket |
| --kubernetes-version | K8S版本 |
3.3初始化后配置管理凭证
bash
#创建.kube目录
mkdie -p $HOME/.kube
#拷贝管理凭证
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
#修改权限
chown $(id -u):$(id -g) $HOME/.kube/config
#验证集群状态
kubectl get nodes
3.4Worker节点加入集群
bash
#在Master节点生成加入命令
kubeadm token create --print-join-command
#在Worker节点执行(示例)
kubeadm join 192.168.160.139:6443 \
--token <token> \
--discovery-token-ca-cert-hash sha256:<hash> \
--cri-socker /var/run/cri-dockerd.sock
四、网络插件Calico部署
4.1离线镜像预加载
Calico镜像(国内无法直连下载):
| 镜像 | 用途 |
| calico/cni:v3.26 | CNI插件 |
| calico/node:v3.26 | 节点组件 |
| calico/kube-controllers:v3.26 | 控制器 |
bash
#导入镜像(所有节点)
docker load -i calico-cni-v3.26.tar
docker load -i calico-node-v3.26.tar
docker load -i calico-kube-controllers-v3.26.tar
4.2应用Calico资源
bash
#下载Calico YAML(或使用离线文件)
wget https://raw.githubusercontent.com/projectcalico/calico/v3.26/manifests/calico.yaml
#修改CALLCO_IPV4POOL_CIDR
#必须与kubeadm init中--pod-network-cidr一致
#即: 10.244.0.0/16
#应用配置
kubectl apply -f calico.yaml
4.3节点状态就绪验证
bash
#查看节点状态
kubectl get nodes
#状态由NotReady变成Ready,标识网络插件生效
#NAME STAUS ROLES AGE VERSION
#master Ready control-plane 10m v1.28.15
#node1 Ready <none> 5m v1.28.15
#node2 Ready <none> 5m v1.28.15
五、监控组件Metrics Server部署
5.1证书与资源配置
bash
#复制证书文件至Master节点
cp ca.crt /etc/kubernetes/pki/
cp server.crt /etc/kubernetes/pki/
#部署Metrics Server
kubectl create -f metrics-server.yaml
5.2资源指标查看
bash
#查看节点资源使用率
kubectl top nodes
#输出示例:
#NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
#mater 250m 12% 1024Mi 25%
#node1 150m 7% 512Mi 12%
#查看Pod资源占用
kubectl top pods
#查看指定命名空间的Pod
kubectl top pods -n kube-system
六、Dashboard图形化界面配置
6.1创建ServiceAccount与RBAC绑定
bash
#创界admin-user服务账户
kubectl create serviceaccount admin-user -n kuble-system
#绑定cluster-admin集群角色
kubectl create clusterrolebinding admin-user-binding \
--clusterrole=cluster-admin \
--serviceaccount=kube-system:admin-user
6.2生成访问Token
bash
#生成临时访问令牌
kubectl create token admin-user -n kuble-system
#输出示例:
# eyJhbGciOiJSUzI1NiIsImtpZCI6IjEyMzQ1Njc4OTA...
#注意:Token有效期有限,安全性高
6.3NodePort方式暴露
bash
#修改Dashboard Service类型
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard
#将type:ClusterIP改为type:NodePort
#添加nodePort:30001(端口必须≥30000)
#或使用patch命令
kubectl patch svc kubernetes-dashboard -n kubernetes-dashboard \
-p '{"spec":{"type":"NodePort","ports":[{"port":443,"targetPort":8443,"nodePort":30001}]}}'
6.4访问Dashboard
访问地址:https://<Msater-IP>:30001
登录方式:
1.选择“Token”
2.粘贴生成的Token
3.点击登录
七、工作负载管理与高级实践
7.1Deployment控制器使用
bash
#创建Deployment
kubectl create deployment nginx --image=nginx
#查看Deployment
kubectl get deployments
#查看Pod
kubectl get pods
#动态扩缩容
kubectl scale deployment nginx --replicas=3
#查看扩容结果
kubectl get pods
7.2Service服务暴露
bash
#创建Service(类型为NodePort)
kubectl expose deploment nginx \
--port=80 \
--target-port=80 \
--type=NodePoet
#查看Service
kubectl get svc
#访问服务
curl http://<Node-IP>:<NodePort>
7.3静态Pod机制说明

7.4节点角色标签配置
bash
#查看当前节点标签
kubectl get nodes --show-labels
#为Worker节点添加角色标签
kubectl label node node1 node-role.kubernetes.io/worker=worker
kubectl label node nodes node-role.kubernetes.io/worker=worker
#再次查看节点
kubectl get nodes
#输出示例:
#NAME STATUS ROLES AGE VERSION
#master Ready control-plane 1h v1.28.15
#node1 Ready worker 1h v1.28.15
#node2 Ready worker 1h v1.28.15
八、生产环境设计规范
8.1Master/Node节点配比
| 集群规模 | Master数量 | Master配置 |
| 小型(≤10 Node) | 1 |
2核CPU/4GB内存 |
| 中型(11-50 Node) | 3(高可用) | 4核CPU/8GB内存 |
|
大型(>50 Node) |
3+(高可用) | 8核CPU/16GB内存+ |
8.2资源规划依据
容量估算方法:
业务指标:
1.日均访问量:50万
2.峰值QPS:1000
估算过程:
1.单Pod处理能力:100 QPS
2.所需Pod副本数:1000/100=10
3.单Pod资源:0.5核CPU / 512MB内存
4.总资源需求:5核CPU/5gb内存
5.Node数量(按4核4G计算):2台
6.预留30%冗余:3台Node
8.3虚拟机环境优化建议
| 配置项 | 最低配置 | 推荐配置 |
| CPU | 2核 | 4核 |
| 内存 | 2GB | 4GB |
| 磁盘 | 20GB | 50GB |
九、常用命令速查
9.1集群管理
bash
#查看集群信息
kubectl cluster-info
#查看节点状态
kubectl get nodes
#查看节点详情
kubectl describe node <node-name>
#查看所有命名空间的Pod
kubectl get pods -A
9.2工作负载管理
bash
#创建Deployment
kubectl create deployment <name> --image=<image>
#扩缩容
kubectl scale deployment <name> --replicas=<num>
#查看Deployment
kubectl get deployment
#查看Pod详情
kubectl describe pod <pod-name>
#查看Pod日志
kubectl logs <pod-name>
#进去Pod容器
kubectl exec -it <pod-name> -- /bin/bash
9.3服务与网络
bash
#创建Service
kubectl expose deployment <name> --port=<port> --target-port=<target>
#查看Service
kubectl get svc
#查看Endpoints
kubectl get endpoints
十、总览

总结
| 模块 | 核心要点 |
| 环境准备 | 关闭Swao、主机名解析、内核参数配置 |
| 容器运行时 | K8S 1.24+不再支持Docker,适用containerd或cri-dockerd |
| 集群初始化 | kubeadm init指定CIDR和CRI socket |
| 网络插件 | Calico CIDR必须与kubeadm init一致 |
| 监控组件 |
Metrics Server提供资源指标查看 |
| Dsahboard | ServiceAccount+RBAC+Token认证 |
| 工作负载 | Deployment管理Pod副本,静态Pod由Kubelet直接管理 |
| 生产规范 | 根据集群规模配置Master规格,预留冗余资源 |
实践要点:Calico的CALICO_IPV4POOL_CIDR必须与kubeadm init的--pod-network-cidr完全一致;Dashboard推荐使用Token认证;生产环境Master节点建议3节点高可用部署。

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)