当前位置: 首页 > news >正文

二、Kubernetes 环境搭建

这里写自定义目录标题

  • Kubernetes 环境搭建
    • 一、系统准备
    • 二、安装containerd
    • 三、安装Kubernetes组件
    • 四、初始化Kubernetes集群
    • 五、安装Calico网络插件
    • 六、验证安装
    • 七、其他问题

Kubernetes 环境搭建

因为尝试各种教程,失败了很多次才终于成功了,于是记录下问题和解决方式,希望能帮到像我一样想尝试k8s的自学小白,能快速定位到失败的原因。(本教程是借鉴其他大佬文章中的步骤方案,对步骤中遇见的问题做记录和解决方案补充。)

云服务器一台:CPU - 2核 内存 - 2GB 系统盘 - SSD云硬盘 40GB
系统环境:我用的是腾讯云的操作系统OpenCloudOS 9 ,建议centos环境8及以上
部署方式:kubeadm的方式
容器运行时:containerd
注意:一定要注意操作系统版本,我之前尝试部署失败多次的部分原因大概率是因为这个。因为是用的云服务器,更改内核是不生效的,rebot重启会自动还原。另一个作为新人容易遇见的头疼的问题,就是其他教程容拉取不了镜像,一些灵异问题导致加速器不生效,需要其他方法绕一遍很麻烦,但目前借鉴的教程是可以直接拉取的,简单了许多。

一、系统准备

(所有节点均要运行)

# 关闭Swap
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab# 设置主机名和hosts(按需修改)
sudo hostnamectl set-hostname k8s-master
echo "192.168.1.100 k8s-master" | sudo tee -a /etc/hosts# 加载内核模块
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
sudo sysctl --system

注意:192.168.1.100改成自己的内网ip,通过ifconfig查看eth0,找到inet字段。

二、安装containerd

(所有节点均要运行,这里我们使用的是阿里云镜像加速)

# 安装依赖
sudo dnf install -y yum-utils device-mapper-persistent-data lvm2# 添加Docker仓库(使用阿里云镜像)
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 安装containerd
sudo dnf install -y containerd.io# 生成默认配置
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml# 修改containerd配置使用国内镜像
sudo sed -i 's|registry.k8s.io/pause|registry.aliyuncs.com/google_containers/pause|g' /etc/containerd/config.toml
sudo sed -i 's|k8s.gcr.io|registry.aliyuncs.com/google_containers|g' /etc/containerd/config.toml
sudo sed -i 's|sandbox_image =.*|sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"|g' /etc/containerd/config.toml# 配置镜像加速器(阿里云)
sudo sed -i '/\[plugins."io.containerd.grpc.v1.cri".registry.mirrors\]/a\        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]\n          endpoint = ["https://<your-aliyun-mirror-id>.mirror.aliyuncs.com"]' /etc/containerd/config.toml# 重启containerd
sudo systemctl restart containerd
sudo systemctl enable containerd

三、安装Kubernetes组件

(所有节点均要运行,这里我们使用的是阿里云镜像加速)

# 添加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# 安装kubeadm、kubelet、kubectl
sudo dnf install -y kubelet kubeadm kubectl --disableexcludes=kubernetes# 启动kubelet
sudo systemctl enable --now kubelet

四、初始化Kubernetes集群

(只在Master节点执行)

# 使用阿里云镜像仓库初始化
sudo kubeadm init \--image-repository=registry.aliyuncs.com/google_containers \--pod-network-cidr=10.244.0.0/16 \--cri-socket=unix:///var/run/containerd/containerd.sock# 配置kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

五、安装Calico网络插件

(只在Master节点执行,替换镜像源)

# 下载Calico配置文件并替换镜像源
curl -L https://docs.projectcalico.org/manifests/calico.yaml -o calico.yamlsed -i 's|docker.io/calico/|registry.aliyuncs.com/calico/|g' calico.yaml# 部署Calicokubectl apply -f calico.yaml

注意:这个步骤要注意是可能会失败的,我猜跟云服务器有关,我在这就被卡住了。建议用以下步骤检查下calico服务状态是否成启动。

# 检查 Calico Pod 状态及事件
kubectl get pods -n kube-system -l k8s-app=calico-node
kubectl describe pod calico-node-xxx -n kube-system# 确认 Calico 配置文件正确(IP 池、镜像地址)
cat calico.yaml | grep -E 'image|IPV4_POOL_CIDR'

如果和我一样失败了,可以看到有如下日志内容,意思是无法拉取calico镜像。因为用的是阿里云镜像,正常应该是不会失败的,但尝试多次都是失败,后面换了华为云镜像也失败,再后面换成腾讯云镜像后突然就成功了。

err="failed to “StartContainer” for “upgrade-ipam” with ImagePullBackOff: "Back-off pulling image \"registry.aliyuncs.com/calico/cni

以下是华为云和腾讯云镜像,大家也可以用其他镜像地址替换去尝试。

//华为云镜像
swr.cn-south-1.myhuaweicloud.com
//腾讯云镜像
mirror.ccs.tencentyun.com
//尝试方法,用以下拉取指令,如果成功说明镜像可用,失败则将 mirror.ccs.tencentyun.com部分替换其他镜像尝试
ctr image pull mirror.ccs.tencentyun.com/calico/cni:v3.25.0

找到能成功的镜像后再用它来替换calico文件中的镜像,再重新部署

# 或使用其他国内镜像源(如华为云)
sed -i 's|registry.aliyuncs.com/calico/|swr.cn-south-1.myhuaweicloud.com/calico/|g' calico.yaml
# 重新部署
kubectl apply -f calico.yaml
# 检查 Calico Pod 是否正常运行
kubectl get pods -n kube-system -l k8s-app=calico-node --watch
kubectl get pods -n kube-system -l k8s-app=calico-kube-controllers
# 预期:Calico Node Pod 状态变为 Running,Ready 为 1/1

注意:当已成功达到预期状态running后,还要查看是否calico在重复的重启,像这样的就是在不停重启

NAME READY STATUS RESTARTS AGE
calico-node-98tsm 0/1 Completed 0 14s
calico-node-98tsm 0/1 Completed 0 15s
calico-node-98tsm 0/1 Running 1 (7s ago) 16s
calico-node-98tsm 1/1 Running 1 (11s ago) 20s
calico-node-98tsm 0/1 Completed 1 (12s ago) 21s
calico-node-98tsm 0/1 Completed 1 22s
calico-node-98tsm 0/1 Completed 1 23s
calico-node-98tsm 0/1 Completed 1 25s
calico-node-98tsm 0/1 Completed 1 26s
calico-node-98tsm 0/1 CrashLoopBackOff 1 (10s ago) 30s
calico-node-98tsm 0/1 Running 2 (22s ago) 42s
calico-node-98tsm 1/1 Running 2 (30s ago) 50s
// 如果存在不停重启,检查 kube-proxy 配置
kubectl get cm -n kube-system kube-proxy -o yaml | grep modede
// 预期:mode: “iptables” 或 “ipvs”(Calico 推荐 iptables)

如果存在不停重启,验证kube-proxy 配置中 mode 字段为空,如果为空,解决方案如下

# 编辑 kube-proxy 配置
kubectl edit cm -n kube-system kube-proxy# 将 mode 字段修改为 iptables
mode: "iptables"# 重启 kube-proxy Pod
kubectl delete pods -n kube-system -l k8s-app=kube-proxy

六、验证安装

# 检查网络插件是否就绪
# 查看节点的状态,所有节点都是ready状态则为成功
kubectl get nodes

七、其他问题

如果在步骤四之后,出现了问题,使用kubectl指令时出现了如下报错,则需要重新初始化Kubernetes集群,重置kubeadm后,重复四五六步骤

The connection to the server 10.0.4.15:6443 was refused - did you specify the right host or port?

方案如下:

# 重置kubeadm 
kubeadm reset# 重新执行步骤四,成功后再重新尝试五六步骤
sudo kubeadm init \--image-repository=registry.aliyuncs.com/google_containers \--pod-network-cidr=10.244.0.0/16 \--cri-socket=unix:///var/run/containerd/containerd.sockmkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

文章参考
1、Kubernetes 环境搭建—containerd/calico

http://www.xdnf.cn/news/764263.html

相关文章:

  • vue中父子参数传递双向的方式不同
  • Git GitHub Gitee
  • Windows环境下Scoop包管理工具的全面指南
  • [yolov11改进系列]基于yolov11引入特征融合注意网络FFA-Net的python源码+训练源码
  • 自定义序列生成器之单体架构实现
  • I2C Host Adapter (1)
  • 移除3D对象的某些部分点云
  • 使用TDEngine REST API + Python来计算电力指标的ETL真实案例
  • 前端框架Vue
  • CTF:网络安全的实战演练场
  • 系统级 EOS 测试方法 - System Level EOS Testing Method
  • Ⅱ.计算机二级选择题(运算符与表达式)
  • C++之动态数组vector
  • 【软件测试】测试框架(unittest/pytest)
  • 【Elasticsearch】ILM(Index Lifecycle Management)策略详解
  • 【Java Web】速通Tomcat
  • Origin将杂乱的分组散点图升级为美观的带颜色映射的气泡图
  • Java垃圾回收机制详解:从原理到实践
  • 数字规则:进制转换与原码、反码、补码
  • 第九天:java注解
  • Cesium快速入门到精通系列教程三:添加物体与3D建筑物
  • Flickr30k Entities短语定位评测指南
  • 进阶日记(一)大模型的本地部署与运行
  • MATLAB实战:人脸检测与识别实现方案
  • 并发执行问题 (上)
  • 【计网】第六章(网络层)习题测试
  • Linux正则三剑客篇
  • 【火山引擎 大模型批量推理数据教程---详细讲解一篇过!】
  • 哈希:闭散列的开放定址法
  • #14 【Kaggle】 Drawing with LLMs 金牌方案赏析