Kubernetes 集群的安装与部署
·
文章目录
一、什么是 Kubernetes
Kubernetes(简称 K8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用。它由 Google 最初设计并捐赠给云原生计算基金会(CNCF),现已成为容器编排领域的事实标准。
核心概念
Pod:最小的部署单元,包含一个或多个共享资源的容器。
Deployment:定义 Pod 的副本数和更新策略,支持滚动更新和回滚。
Service:为一组 Pod 提供稳定的 IP 和 DNS 名称,实现负载均衡。
Namespace:逻辑隔离集群资源,支持多租户环境。
核心组件
控制平面(Control Plane):
- API Server:提供集群管理的 REST API 接口。
- Scheduler:决定容器在哪个节点上运行。
- Controller Manager:负责节点状态、副本数等控制逻辑。
- etcd:分布式键值存储,保存集群状态数据。
工作节点(Worker Node):
5. kubelet:与控制平面通信,管理节点上的容器。
6. kube-proxy:处理网络规则和负载均衡。
7. 容器运行时(如 Docker、containerd):实际运行容器的软件。
二、K8s 集群的初始化
环境准备
小tips:内存不足时,可以去掉一个·计算节点
| 主机名 | IP地址 | 最低配置 |
|---|---|---|
| harbor | 192.168.88.240 | 2CPU,4G内存 |
| master | 192.168.88.10 | 2CPU,4G内存 |
| node1 | 192.168.88.11 | 2CPU,2G内存 |
| node2 | 192.168.88.12 | 2CPU,2G内存 |
| node3 | 192.168.88.13 | 2CPU,2G内存 |
控制节点配置
配置 yum 软件仓库
# 上传K8s相关包到Harbor主机
# 通过ftp服务对外提供的yum仓库访问路径
/var/ftp/rpms/
# 更新仓库清单:repodata
createrepo --update /var/ftp/rpms/
系统环境配置
# 在已配置yum源的基础上,新增yum源
vim /etc/yum.repos.d/k8s.repo
[k8s]
name=Rocky Linux $releasever - Kubernetes
baseurl="ftp://192.168.88.240/rpms"
enabled=1
gpgcheck=0
# 禁用swap交换分区和firewall
sed '/swap/d' -i /etc/fstab
swapoff -a
dnf remove -y firewalld-*
# 可通过以下命令检查内存及交换分区情况
free -h
安装软件包
# 配置本地域名解析
vim /etc/hosts
192.168.88.240 harbor
192.168.88.10 master
192.168.88.11 node1
192.168.88.12 node2
192.168.88.13 node3
# 安装Kubernetes相关工具和依赖包
dnf install -y kubeadm kubelet kubectl containerd.io ipvsadm nftables iproute-tc
# 生成containerd的默认配置文件
containerd config default > /etc/containerd/config.toml
# 编辑containerd的配置文件
vim /etc/containerd/config.toml
# 配置containerd使用Harbor镜像仓库的pause镜像
# 指定pause镜像的仓库地址
67: sandbox_image = "harbor:443/k8s/pause:3.10"
# 启用systemd cgroup驱动
139: SystemdCgroup = true
# 设置证书目录路径
162: config_path = "/etc/containerd/certs.d"
# 创建containerd证书目录
mkdir -p /etc/containerd/certs.d
# 进入证书目录并创建Harbor仓库的配置目录
cd /etc/containerd/certs.d
mkdir harbor:443
# 编辑Harbor仓库的配置文件
vim harbor:443/hosts.toml
# 配置Harbor仓库的访问设置
server = "https://harbor:443"
[host."http://192.168.88.240:443"]
capabilities = ["pull", "resolve", "push"]
skip_verify = true
# 将Harbor仓库的配置复制到默认配置目录
cp -a harbor:443 _default
# kubelet和containerd服务设置开机自启
systemctl enable --now kubelet containerd
配置内核参数
# 设置开机自动加载以下内核模块,文件名以.conf结尾即可
vim /etc/modules-load.d/k8s.conf
# 启用桥接网络的iptables支持,用于容器网络
br_netfilter
# 启用连接跟踪模块,用于网络连接跟踪
xt_conntrack
# 启动服务,加载模块
systemctl start systemd-modules-load.service
# 设置开机自动设置内核模块参数,优化Kubernetes网络性能
vim /etc/sysctl.d/99-k8s.conf
# 启用IP转发,允许节点转发数据包
net.ipv4.ip_forward = 1
# 允许桥接接口使用iptables规则
net.bridge.bridge-nf-call-iptables = 1
# 设置连接跟踪的最大数量,防止高负载下连接被拒绝
net.netfilter.nf_conntrack_max = 65536
# 设置内核模块参数
sysctl -p /etc/sysctl.d/99-k8s.conf
导入 K8s 镜像
# 安装Docker
dnf install -y docker-ce
# 配置私有镜像仓库
vim /etc/docker/daemon.json
{
"registry-mirrors":["https://harbor:443"],
"insecure-registries":["harbor:443"]
}
# 配置Docker服务开机自启,并查看镜像仓库是否配置成功
systemctl enable --now docker
docker info
...
Insecure Registries:
harbor:443
::1/128
127.0.0.0/8
Registry Mirrors:
https://harbor:443/
Live Restore Enabled: false
# 上传K8s相关镜像到本地
# 登录Harbor仓库
docker login harbor:443
# 提前在Harbor仓库中新建k8s项目
# 加载镜像并上传到Harbor仓库
docker load -i init/v1.32.2.tar.xz
for img in $(docker images --format '{{.Repository}}:{{.Tag}}')
do
[[ "${img}" =~ ^"harbor:443/".+ ]] && continue
docker tag ${img} harbor:443/k8s/${img##*/}
docker push harbor:443/k8s/${img##*/}
docker rmi ${img} harbor:443/k8s/${img##*/}
done
添加 Tab 键支持
# 生成kubeadm和kubectl命令的Bash补全脚本
# 将其保存到/etc/bash_completion.d/下的文件中并交给source执行
source <(kubeadm completion bash | tee /etc/bash_completion.d/kubeadm)
source <(kubectl completion bash | tee /etc/bash_completion.d/kubectl)
初始化 master 节点
# --dry-run:模拟运行 --config:指定初始化的配置文件
kubeadm init --config=init/init.yaml --dry-run 2> error.log
cat error.log
rm -rf error.log /etc/kubernetes/tmp
# 主控节点初始化,将初始化产生的信息保存到日志中
kubeadm init --config=init/init.yaml | tee init/init.log
# 若初始化失败,可将错误日志发给AI进行查看
# 管理授权,以下命令初始化成功后会输出到屏幕中
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
# 验证安装结果
kubectl get nodes
NAME STATUS ROLES AGE VERSION
master NotReady control-plane 22s v1.32.2
安装网络插件
上传镜像
# 上传K8s相关插件到本地
cd plugins/calico
# 加载镜像并上传到Harbor仓库
docker load -i calico.tar.xz
for img in $(docker images --format '{{.Repository}}:{{.Tag}}')
do
[[ "${img}" =~ ^"harbor:443/".+ ]] && continue
docker tag ${img} harbor:443/k8s/${img##*/}
docker push harbor:443/k8s/${img##*/}
docker rmi ${img} harbor:443/k8s/${img##*/}
done
安装 calico 插件
# 更新镜像地址
sed -ri 's,^(\s*image: )(.*/)?(.+),\1harbor:443/k8s/\3,' calico.yaml
# 查看修改情况
grep image: calico.yaml
image: harbor:443/k8s/cni:v3.29.2
image: harbor:443/k8s/cni:v3.29.2
image: harbor:443/k8s/node:v3.29.2
image: harbor:443/k8s/node:v3.29.2
image: harbor:443/k8s/kube-controllers:v3.29.2
# 通过资源清单文件安装网络组件
kubectl create -f calico.yaml
# 查看状态
kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready control-plane 23m v1.32.2
计算节点配置
获取凭证
# 在master节点上获取凭证
# 查看token
kubeadm token list
TOKEN TTL EXPIRES USAGES DESCRIPTION EXTRA GROUPS
abcdef.0123456789abcdef 23h 2026-03-21T16:13:21Z authentication,signing <none> system:bootstrappers:kubeadm:default-node-token
# 获取hash值
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt \
|openssl rsa -pubin -outform der |openssl dgst -sha256 -hex
# 删除token
kubeadm token delete abcdef.0123456789abcdef
bootstrap token "abcdef" deleted
# 创建token --ttl:指定过期时间,0表示永不过期
# 此命令会输出安装计算节点的命令,可将其保存到文件中
kubeadm token create --ttl=0 --print-join-command |tee info.txt
初始化 node 节点
# node节点执行控制节点的安装步骤2、3、4
kubeadm join <APIServer的IP>:6443 --token <你的token> \
--discovery-token-ca-cert-hash sha256:<ca 证书 hash>
# 在master节点上验证
kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready control-plane 16m v1.32.2
node1 Ready <none> 104s v1.32.2
node2 Ready <none> 97s v1.32.2
查看集群状态
# 以下容器运行起来即为搭建成功
kubectl -n kube-system get pods
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-7f5bcc6579-9zb7n 1/1 Running 0 12m
calico-node-bq6gd 1/1 Running 0 12m
calico-node-d8bhp 1/1 Running 0 4m35s
calico-node-g28ww 1/1 Running 0 4m42s
coredns-74967867c-8bbcz 1/1 Running 0 19m
coredns-74967867c-gwv76 1/1 Running 0 19m
etcd-master 1/1 Running 0 19m
kube-apiserver-master 1/1 Running 0 19m
kube-controller-manager-master 1/1 Running 3 (11m ago) 19m
kube-proxy-bscnf 1/1 Running 0 4m35s
kube-proxy-fwx98 1/1 Running 0 19m
kube-proxy-xwmg2 1/1 Running 0 4m42s
kube-scheduler-master 1/1 Running 2 19m
更多推荐




所有评论(0)