本地部署kubernetes详细步骤

news/2025/3/10 13:06:16/文章来源:https://www.cnblogs.com/horacexie/p/18762451

本地部署kubernetes

手动启用 IPv4 数据包转发

#设置所需的 sysctl 参数,参数在重新启动后保持不变
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
EOF
#应用 sysctl 参数而不重新启动
sudo sysctl --system
#验证
sysctl net.ipv4.ip_forward

默认情况下,Linux 内核不允许 IPv4 数据包在接口之间路由。
大多数 Kubernetes 集群网络实现都会更改此设置(如果需要)

禁用交换分区

free -h
sudo swapoff -a
sudo sed -i '/swap/s/\/swap/#\/swap/' /etc/fstab

配置/etc/hosts

192.168.10.20    cka-master
192.168.10.21    cka-node1
192.168.10.22    cka-node2

. 开放防火墙端口

Master 节点需开放

6443(API Server)
2379-2380(etcd,仅单节点或独立部署时需要)
10250(kubelet API)
30000-32767(NodePort 服务)

Worker 节点需开放

10250(kubelet API)
30000-32767(NodePort 服务)

设置NTP时间同步

# 启用 NTP 自动同步(依赖 systemd-timesyncd 服务)
sudo timedatectl set-ntp true

安装 containerd

下载地址:https://github.com/containerd/containerd/releases/containerd-1.6.2-linux-amd64.tar.gz

解压到: /usr/local:

$ tar Cxzvf /usr/local containerd-1.6.2-linux-amd64.tar.gz

配置containerd.service

下载地址:https://raw.githubusercontent.com/containerd/containerd/main/containerd.service

保存至:/usr/local/lib/systemd/system/containerd.service

#需手动创建containerd.service服务目录
sudo mkdir -p /usr/local/lib/systemd/system/
#重新加载和重启containerd服务
systemctl daemon-reload
systemctl enable --now containerd

安装 runc

下载地址:https://github.com/opencontainers/runc/releases/runc/runc.amd64

安装路径: /usr/local/sbin/runc.

sudo install -m 755 runc.amd64 /usr/local/sbin/runc

配置containerd

#生成containerd默认配置文件
sudo mkdir /etc/containerd/
containerd config default | sudo tee /etc/containerd/config.toml#修改 BinaryName 字段为实际路径(如 /usr/sbin/runc)
grep BinaryName /etc/containerd/config.toml -n
sudo vi /etc/containerd/config.toml +129
BinaryName = '/usr/local/sbin/runc'#配置cgroup驱动
cat <<EOF | sudo tee -a /etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]  SystemdCgroup = true
EOF#替换阿里云镜像--用于kubenetes核心组件镜像拉取
grep sandbox /etc/containerd/config.toml
sudo sed -i 's/registry.k8s.io/registry.aliyuncs.com\/google_containers/' /etc/containerd/config.tomlsudo systemctl restart containerd

安装kubernetes三件套

#下载地址:
https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.32/deb/amd64/sudo dpkg -i kubernetes-cni_1.6.0-1.1_amd64.deb
sudo dpkg -i kubeadm_1.32.2-1.1_amd64.deb
sudo dpkg -i kubectl_1.32.2-1.1_amd64.debsudo dpkg -i cri-tools_1.32.0-1.1_amd64.deb
sudo dpkg -i kubelet_1.32.2-1.1_amd64.deb && sudo apt --fix-broken install
sudo dpkg -i kubelet_1.32.2-1.1_amd64.deb

配置cgroup驱动-kubelet

手动生成kubeadm默认配置文件

sudo kubeadm config print init-defaults > kubeadm-init.yaml

编辑 kubeadm-init.yaml, 配置 kubelet 的 cgroup 驱动

kubeadm-init.yaml 中设置:

cat <<EOF | sudo tee -a kubeadm-init.yaml
---
kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
cgroupDriver: systemd
EOF注意:不要少漏了分界线“---”,否则回报错。 

预先拉取组件镜像

# 显示当前配置要求拉取的镜像列表‌
kubeadm config images list#查看阿里云容器仓库镜像版本
sudo kubeadm config images list \
--image-repository=registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.32.2  # 预先拉取 Kubernetes 集群初始化所需的组件镜像
sudo kubeadm config images pull \
--kubernetes-version=v1.32.2 \  
--image-repository=registry.aliyuncs.com/google_containers # 查看拉取的镜像
sudo crictl images# 可能需提前创建配置文件
cat <<EOF | sudo tee /etc/crictl.yaml
runtime-endpoint: "unix:///run/containerd/containerd.sock"
image-endpoint: "unix:///run/containerd/containerd.sock"
timeout: 10
debug: false
EOF

执行初始化

sudo kubeadm init \
--pod-network-cidr=10.244.0.0/16 \
--apiserver-advertise-address=192.168.10.20 \
--image-repository=registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.32.2 \
--upload-certs

#kubeadm-init.yaml配置参数
advertiseAddress: 192.168.10.20          # 控制平面节点对外通告的IP地址
imageRepository: registry.aliyuncs.com/google_containers     # 镜像拉取仓库地址
serviceSubnet: 10.244.0.0/16        # 服务虚拟IP地址范围sudo kubeadm init --v=5 --config=kubeadm-init.yaml --upload-certs

初始化成功

# 初始化成功后,记录令牌信息:
kubeadm join 192.168.10.20:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:25393deeda6473b58b70cb5f8d7ebb5cbe9633f370815af643641d844aaf4a69 # 令牌过期重生tocken
kubeadm token create --print-join-command# 获取证书哈希
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | \
openssl rsa -pubin -outform der 2>/dev/null | \
openssl dgst -sha256 -hex | sed 's/^.* //'

配置权限

#要使非 root 用户可以运行 kubectl,请运行以下命令:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config 

检验master节点的运行状态

# 检查控制平面组件状态
kubectl get componentstatus  # 验证 API Server 可用性‌
curl -k https://localhost:6443/healthz# 检查端口监听状态‌
ss -tulnp | grep -E '6443|2379|2380|12250'# 查看节点就绪状态‌
kubectl get nodes -o wide# 检查控制平面 Pod 状态‌
kubectl get pods -n kube-system -l tier=control-plane# 查看组件日志
kubectl logs -n kube-system # 排查初始化容器问题
kubectl logs <pod-name> -c <init-container-name>  # 集群配置完整性确认,检查节点 IP 与主机名映射是否正确
cat /etc/hosts# 检查证书与 kubeconfig 文件
ls /etc/kubernetes/pki    # 确认证书文件(如 apiserver.crt)存在且未过期
kubectl config view    # 验证 kubeconfig 中 API Server 地址与证书匹配

下载 calico.yaml

wget https://docs.projectcalico.org/manifests/calico.yaml

修改calico.yaml

# 替换镜像源为阿里云镜像
sed -i 's/docker.io/registry.cn-hangzhou.aliyuncs.com/g' calico.yaml
# 替换镜像源为华为云镜像
sed -i 's/docker.io/swr.cn-north-4.myhuaweicloud.com\/ddn-k8s\/docker.io/g' calico.yaml# 修改 IP 池配置(示例:10.244.0.0/16)
#修改Pod CIDR网络
- name: CALICO_IPV4POOL_CIDRvalue: "10.244.0.0/16"

部署 Calico

kubectl apply -f calico.yaml#查验安装是否成功,Calico 组件将正常启动,节点状态变为Ready
get pods -n kube-system -l k8s-app=calico-node

执行 kubeadm join

sudo kubeadm join 192.168.10.20:6443 --token 5ealr1.c4ozr01xcwtjji8h --discovery-token-ca-cert-hash sha256:25393deeda6473b58b70cb5f8d7ebb5cbe9633f370815af643641d844aaf4a69 

验证节点状态

kubectl get nodes#预期输出:
NAME       STATUS   ROLES           AGE   VERSION
master     Ready    control-plane   1h    v1.27.3
worker1    Ready    <none>          2m    v1.27.3 

常见问题排查

  • 问题:节点状态为 NotReady

    原因:CNI 插件未安装或配置错误。

  • 解决

    kubectl describe node <NODE-NAME>  # 查看详细错误信息
    journalctl -u kubelet -f          # 检查 kubelet 日志
    
  • 问题: Token 过期

    原因:默认 Token 有效期为 24 小时。

    解决

    kubeadm token create --print-join-command  # 生成新 Token
    

    问题: 网络连接失败

    原因:防火墙未开放端口或 Master IP 错误。

    解决

    telnet <Master-IP> 6443  # 测试端口连通性
    

总结

完成以下步骤即可成功加入节点:

  1. Master 节点:保存 kubeadm join 命令、安装 CNI 插件、开放端口。
  2. Worker 节点:安装运行时和工具、关闭 Swap、同步时间、执行 kubeadm join
  3. 验证:检查节点状态,排查常见问题。

通过上述流程,工作节点将成功加入集群并参与任务调度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/896777.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

task5.c

include<stdio.h> int main() { int s, year; s = 1000000000; year = s / 3600 / 24 / 365; if (year % 2 > 0) year += 1; printf("10亿秒约等于%d年\n", year); return 0; }

【牛客训练记录】2025年浙江中医药大学程序设计竞赛(同步赛)

训练情况赛后反思 C题犯蠢了,手玩几下就能猜出来的结论,结果自己想复杂了,以为是二分,D题又复现传智杯二分爆long long了,又没注意到,E题BFS搜索没记忆化MLE了 D题 传智杯二分爆long long重现,怒开__int128发现还是爆,只能边加边特判了,我们对于这题显然能观察到二分单…

unity模型无法播放动画的几种问题

1:代码中参数变量名称与动画控制器变量名称不一致导致 (左侧代码变量名称要与右侧动画控制器中的变量名称一致才能播放动画) 2:播放动画的对象子物体名称改动导致 例如:下方图中修改了玩家的子级对象object的名称,导致无法播放动画应该正确修改为使用对象得远子级object名称 时…

task3.c

include<stdio.h> int main() { char ans1, ans2; printf("每次课前认真预习、课后及时复习了没? (输入y或Y表示有,输入n或N表示没有) : "); ans1 = getchar(); getchar(); printf("\n动手敲代码实践了没? (输入y或Y表示敲了,输入n或N表示木有敲) : &…

Hadoop集群安装

一.环境准备我使用的是virtualBox虚拟机,没有可以去官网下载 虚拟机镜像是ubuntu server22.04,官网地址[注意]我的主机系统就是linux,如果是windows需要自己下载一些终端连接的工具 二.安装 1.虚拟机准备直接finish,开始配置网卡。简单点说,桥接网络我们用来上网的,其次是h…

task1_2.c

include<stdio.h> int main() { printf(" 0 \n"); printf("\n"); printf("I I\n"); printf(" 0 \n"); printf("\n"); printf("I I\n"); return 0; }

No.44 ES6---Babel转码器(安装有点问题,用到再说)

一、Babel转码器Babel是一个广泛使用的 ES6 转码器,可以将 ES6 代码转为 ES5 代码,从而在老版本的浏览器执行。 这意味着,你可以用 ES6 的方式编写程序,又不用担心现有环境是否支持。 1.浏览器支持性查看https://caniuse.com/2.Babel 官网https://babeljs.io/3.转码示例原始…

kubesphere中查看argocd登陆密码

获取argocd密码PASSWORDkubectl get secret argocd-initial-admin-secret -nargocd -o jsonpath="{.data.password}"|base64 -d 登陆: admin/PASSWORD

rockchip sdk使用make menuconfig无法删除选项文字(MobaXterm)

问题:在使用make menuconfig编辑内核配置时,按退格键删除不了相关选项,如下图所示:解决办法: 1. 在全局设置部分,把这里的退格键发送^H取消勾选:2. 在开启一个新会话时,进行同样的设置:

线控转向控制系统SbW

线控转向控制系统是一种将驾驶员对方向盘的操作信号转换为电信号,再传递给转向机,从而控制车轮完成相应的转向动作的技术。经纬恒润推出的线控转向控制系统SbW,分为路感模拟器与转向执行器,皆采用全冗余设计及主从控制方案,同时,按照ISO26262与DIN70065进行功能安全与降级…

uniapp使用scroll-view嵌套时不触发滚动事件

参考链接:微信文档:https://developers.weixin.qq.com/miniprogram/dev/component/scroll-view.html uniapp文档: https://uniapp.dcloud.net.cn/component/scroll-view.html布局代码:<scroll-view scroll-y class="scroll-box" bindscrolltolower="scro…

OpenCL 调用关系

学习 OpenCL,概念很多,理解不深,所以看示例代码时比较糊涂。 于是,把调用关系简单画了个图:希望能加深理解吧。