Loading...

文章背景图

kubernetes安装

2026-06-25
5
-
- 分钟
|

前提条件

硬件条件:2核4G,再小就无法安装

时间同步:ntp

dnf -y install chrony 
systemctl enable chronyd --now

开启ipv4转发并且开启网桥过滤:

modprobe br_netfilter
modprobe overlay
cat <<EOF | tee /etc/sysctl.d/k8s.conf > /dev/null
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF
echo "br_netfilter" | tee /etc/modules-load.d/k8s.conf
sysctl --system

关闭swap:

sudo swapoff -a #立刻关闭swap分区
sudo sed -i 's/.*swap.*/#&/g' /etc/fstab #在fstab文件中关闭防止重启后开启

添加yum源

# 安装 wget vim net-tools telnet epel-release
dnf install -y wget vim net-tools telnet epel-release tree

# 如果不是阿里源,再执行以下命令,从阿里云下载 Docker DNF 源配置文件到系统指定目录
# ce 表示 Community Edition,社区版
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 添加 k8s 源
cat << EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes-tencent]
name=Kubernetes Tencent Mirror
baseurl=https://mirrors.cloud.tencent.com/kubernetes_new/core:/stable:/v1.30/rpm/
enabled=1
gpgcheck=0

[kubernetes-aliyun]
name=Kubernetes Aliyun Mirror
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

开始安装

首先先在所有节点上安装containerd

sudo dnf install -y containerd.io

配置containerd

# 生成配置文件
containerd config default > /etc/containerd/config.toml

# 修改 SystemdCgroup 参数为 true,表示 containerd 使用 systemd 作为 cgroup 驱动程序。
sed -ri 's#SystemdCgroup = false#SystemdCgroup = true#' /etc/containerd/config.toml

# 修改sandbox沙箱镜像,registry.k8s.io 在某些网络环境下可能访问不稳定或受到限制。
# 而阿里云的镜像仓库 registry.aliyuncs.com 在国内网络环境下通常具有更好的访问速度和稳定性。
# 版本可以自己调整
sed -ri 's#registry.k8s.io\/pause:3.8#registry.aliyuncs.com\/google_containers\/pause:3.10.1#' /etc/containerd/config.toml

# 新增镜像源配置目录
sed -i 's/config_path = ""/config_path = "\/etc\/containerd\/certs.d\/"/g' /etc/containerd/config.toml

关联镜像目录

mkdir -p /etc/containerd/certs.d/docker.io
cat > /etc/containerd/certs.d/docker.io/hosts.toml << 'EOF'
server = "https://docker.io" # 源镜像地址#下面的地址失效可以找一找

[host."https://docker.m.daocloud.io"] # 道客-镜像加速地址
  capabilities = ["pull","resolve"]

[host."https://dockerproxy.com"] # 镜像加速地址
  capabilities = ["pull", "resolve"]

[host."https://docker.mirrors.sjtug.sjtu.edu.cn"] # 上海交大-镜像加速地址
  capabilities = ["pull","resolve"]

[host."https://docker.mirrors.ustc.edu.cn"] # 中科大-镜像加速地址
  capabilities = ["pull","resolve"]

[host."https://docker.nju.edu.cn"] # 南京大学-镜像加速地址
  capabilities = ["pull","resolve"]

[host."https://registry.docker-cn.com"] # 官方中国镜像-镜像加速地址
  capabilities = ["pull","resolve","push"]

[host."https://tc4nbd2x6gieid.xuanyuan.run"] # 轩辕镜像-镜像加速地址
  capabilities = ["pull","resolve","push"]
EOF

# 重启生效
systemctl enable containerd
systemctl restart containerd
# 验证测试
systemctl status containerd

在节点中安装相关组件

sudo dnf install -y kubelet kubeadm kubectl
sudo systemctl enable kubelet

初始化master节点

kubeadm init \
  --apiserver-advertise-address=192.168.88.101 \
  --image-repository registry.aliyuncs.com/google_containers \
  --pod-network-cidr=10.244.0.0/16 \
  --control-plane-endpoint=master
  
# 这里的地址,改成自己master节点的IP地址
# 这里就这么写,是对应上后面flannel网络插件的默认值
# 这里的主机名,就是master节点的主机名

如果说初始化失败可以使用

sudo kubeadm reset -f

来重置环境

如果还是超时可以先在命名空间k8s.io中下载下来镜像然后改tag,(其他节点可能出现这种情况,所以可以使用相同方法处理)

sudo ctr -n k8s.io images pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.10.1

sudo ctr -n k8s.io images tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.10.1 registry.k8s.io/pause:3.10.1

sudo crictl images | grep pause

最后在其他所有节点输入最后生成的token即可加入集群,如果master节点找不到可以添加hosts,或者直接换成IP

sudo kubeadm join master:6443 --token 0x0mnj.t5xbmpooayuex5kx \
        --discovery-token-ca-cert-hash sha256:0640f0b85320bca8eb60d6a06b0a9561e426658311a46ab9a0901c3585341220

master重置token

sudo kubeadm token create --print-join-command

在master上执行,防止端口被认为不安全导致kubectl命令不能执行

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

因为现在没有安装网络插件,所以如果直接kubelet get node 查看应该是有NotReady,安装网络插件flannel或者Calico后可以解决。

flannel插件安装

# 方法一:使用 apply 命令,会创建相应的 namespace 和 pod
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

# 方法二:如果 apply 一直提示拉取不下来,可以换成先拉取,再 apply
wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
kubectl apply -f kube-flannel.yml

查看flannel容器是否启动

kubectl get pod -A	# -A 表示 All

如果发现长时间无法运行可以尝试

grep -n "image:" kube-flannel.yml

查看这个需要什么镜像,将镜像下载下来然后就可以了。

最后检查flannel是否都正常启动

评论交流

文章目录