day04-kubernetes(k8s)
本文介绍了Kubernetes(K8s)集群的部署过程,包括控制节点和工作节点的配置。主要内容包含:1.K8s概述及集群架构;2.控制节点部署步骤,包括环境准备、containerd安装、kubeadm配置及Calico网络插件安装;3.工作节点加入集群的方法;4.部署完成后的验证方式。通过详细的配置说明和操作命令,帮助学习者完成K8s集群的搭建,为后续学习打下基础。文中特别强调了生产环境与测试环
今天学习了K8S的概述、控制节点的部署、计算节点的部署。
一、k8s的概述
1.1 kubernetes概述
Kubernetes(简称 K8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用。它支持跨多台主机的容器调度、服务发现、负载均衡、健康检查、滚动更新等核心功能,是云原生应用的核心基础设施。
1.2 k8s的集群架构
Kubernetes 集群由 控制平面(Control Plane,以前叫Master节点) ,工作节点(Worker Nodes),镜像仓库构成。
- 控制平面:负责集群的全局控制与调度。
- 工作节点:运行实际的应用容器(Pod)
- 像镜仓库:存放私有镜像,为节点提供镜像支持
1.3 本次部署环境规划
主机名 | IP 地址 | 角色 | 最低配置 | 说明 |
---|---|---|---|---|
harbor |
192.168.88.240 | 私有镜像仓库 | 2 核 CPU, 4GB 内存 | 用于存放私有镜像,加速拉取 |
master |
192.168.88.50 | 控制节点 | 2 核 CPU, 4GB 内存 | 运行 kube-apiserver、etcd、scheduler 等组件 |
node001 |
192.168.88.51 | 工作节点 | 2 核 CPU, 2GB 内存 | 运行应用 Pod |
node002 |
192.168.88.52 | 工作节点 | 2 核 CPU, 2GB 内存 | 运行应用 Pod |
node003 |
192.168.88.53 | 工作节点 | 2 核 CPU, 2GB 内存 | 运行应用 Pod |
✅ 说明:
- 生产环境建议控制节点为 3 台实现高可用(HA),当前为学习环境,使用单 master。
- 所有节点操作系统建议为 RockeyLinux8.6。
- 所有节点需时间同步、SSH 互通、关闭防火墙或配置规则。
1.3 角色与功能
master节点:提供集群控制,对集群进行全局决策,检测和响应集群事件。master节点上有四个组件:
- apiserver:
- schedule
- controllermanager
- etcd
node节点:负责为容器提供运行环境,可以水平扩展,运行容器的实际节点。node节点上有三个组件:
- kubelet
- kubeproxy
- docker
镜像仓库:存储镜像,为节点提供镜像支持 。仓库组件: redistry或harbor
二、安装部署控制节点(master)
2.1 前期准备
2.1.1 主机名与网络配置
# 主机名成解析 编辑五台服务器的/etc/hosts文件,添加下面内容
192.168.88.240 harbor
192.168.88.50 master
192.168.88.51 node001
192.168.88.52 node002
192.168.88.53 node003
2.1.2 关闭防火墙与 SELinux
systemctl disable firewalld --now
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
2.1.3 禁用 Swap
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
2.1.4 加载内核模块与配置内核参数
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system
2.2 安装容器运行时(containerd)
推荐使用 containerd
作为容器运行时(Docker 已被弃用)。
yum install -y containerd
mkdir -p /etc/containerd
containerd config default | tee /etc/containerd/config.toml
# 修改配置:使用 systemd 作为 cgroup 驱动
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
systemctl enable containerd --now
2.3 添加 Kubernetes YUM 源(国内优化)
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
2.4 安装 kubeadm、kubelet、kubectl
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet # 注意:先不启动
2.5 预拉取镜像(使用阿里云镜像仓库)
由于国内无法访问 k8s.gcr.io
,需从阿里云镜像仓库拉取。
# 1. 保存为 pull-k8s-images.sh
vim pull-k8s-images.sh
KUBE_VERSION=v1.28.0
KUBE_PAUSE_VERSION=3.9
ETCD_VERSION=3.5.9-0
COREDNS_VERSION=v1.10.1
images=(
kube-apiserver:$KUBE_VERSION
kube-controller-manager:$KUBE_VERSION
kube-scheduler:$KUBE_VERSION
kube-proxy:$KUBE_VERSION
pause:$KUBE_PAUSE_VERSION
etcd:$ETCD_VERSION
coredns:$COREDNS_VERSION
)
for image in ${images[@]}; do
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$image
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$image k8s.gcr.io/$image
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$image
done
# 2. 添加执行权限
chmod +x pull-k8s-images.sh
# 3. 在每个节点上运行
./pull-k8s-images.sh
✅ 验证:
crictl images
查看是否已加载所需镜像。
2.6 初始化控制节点
kubeadm init \
--apiserver-advertise-address=192.168.88.50 \
--pod-network-cidr=192.168.0.0/16 \
--service-cidr=10.96.0.0/12 \
--kubernetes-version=v1.28.0 \
--ignore-preflight-errors=Swap
📌 关键参数说明:
--pod-network-cidr
:Pod 网络段,需与后续 CNI 插件一致。--service-cidr
:Service 虚拟 IP 段。--ignore-preflight-errors=Swap
:忽略 Swap 警告(仅测试环境使用)。
2.7 初始化成功后配置 kubeconfig
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
2.8 验证控制节点状态
kubectl get nodes
# 输出应为:
# NAME STATUS ROLES AGE VERSION
# master NotReady control-plane 2m v1.28.0
⚠️ 当前状态为
NotReady
,因为尚未安装网络插件。
三、安装 Calico 网络插件
3.1 Calico 概述
Calico 是一个高性能的 Kubernetes CNI(容器网络接口)插件,提供 Pod 间通信、网络策略(NetworkPolicy)控制、BGP 路由等功能。
- 支持 IPIP、VXLAN、BGP 等模式
- 适用于大规模集群
- 提供细粒度的网络安全策略
3.2 安装 Calico
# 下载 Calico 配置清单
curl https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml -O
# 修改 calico.yaml 中的 POD CIDR(确保与 kubeadm init 一致)
sed -i 's?192.168.0.0/16?192.168.0.0/16?g' calico.yaml
# 部署 Calico
kubectl apply -f calico.yaml
✅ 验证:
kubectl get pods -n kube-system | grep calico kubectl get nodes # 状态应变为 Ready
四、部署工作节点(计算节点)
4.1 工作节点概述
工作节点(Worker Node)负责运行应用容器,通过 kubelet
与控制平面通信,执行 Pod 调度任务。
4.2 获取 join token
在 master
节点上生成加入集群的命令:
kubeadm token create --print-join-command
输出示例:
kubeadm join 192.168.88.50:6443 --token abcdef.1234567890abcdef \
--discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
🔐 Token 有效期为 24 小时,过期需重新生成。
4.3 在 node001~003 上执行 join 命令
在每台工作节点上执行以下步骤:
- 安装 containerd、kubeadm、kubelet(同 master 步骤 2.2~2.4)
- 执行
kubeadm join ...
命令
# 示例(在 node001 上执行)
kubeadm join 192.168.88.50:6443 --token abcdef.1234567890abcdef \
--discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
✅ 节点加入后,
kubelet
会自动启动并注册到集群。
4.4 验证节点状态
在 master
上查看:
kubectl get nodes
预期输出:
NAME STATUS ROLES AGE VERSION
master Ready control-plane 10m v1.28.0
node001 Ready <none> 2m v1.28.0
node002 Ready <none> 1m v1.28.0
node003 Ready <none> 30s v1.28.0
✅ 所有节点状态为
Ready
,表示集群部署成功!
五、总结
阶段 | 关键操作 |
---|---|
环境准备 | 主机名、网络、关闭防火墙、禁用 swap、配置内核参数 |
控制节点 | 安装 containerd、kubeadm/kubelet/kubectl、拉取镜像、kubeadm init |
网络插件 | 部署 Calico,启用 Pod 网络通信 |
工作节点 | 安装基础组件,执行 kubeadm join 加入集群 |
✅ 下一步建议:
- 部署私有镜像仓库 Harbor(在 192.168.88.240 上)
- 部署 Dashboard 可视化界面
- 创建第一个 Deployment 和 Service
- 学习 Helm、Ingress、ConfigMap、Secret 等核心资源
📌 学习心得:今天完成了 Kubernetes 集群的搭建全过程,从理论到实践,掌握了控制节点与工作节点的部署流程,理解了各组件协作机制,为后续深入学习打下坚实基础!
更多推荐
所有评论(0)