Containerd+Kubernetes搭建k8s集群

虚拟机环境设置,如果不是虚拟机可以忽略不看

1、安装配置containerd

1.1 添加 Kubernetes 官方仓库

安装cri-tools的时候需要用到

bash 复制代码
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
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/kubemetes/yum/doc/rpm-package-key.gpg
EOF

1.2 安装cri-tools、containerd

bash 复制代码
yum -y install containerd.io-1.6.33 cri-tools 

如果报:

就更换yum源

bash 复制代码
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

如果报:

就更换docker源

bash 复制代码
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

1.3 设置containerd镜像加速

bash 复制代码
#生成containerd的配置文件
containerd config default > /etc/containerd/config.toml
#编辑配置文件config.toml
vi /etc/containerd/config.toml

[plugins."io.containerd.grpc.v1.cri".registry.mirrors] 行下添加内容

bash 复制代码
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
         endpoint=["https://dockerproxy.com", "https://mirror.baidubce.com","https://ccr.ccs.tencentyun.com","https://docker.m.daocloud.io","https://docker.nju.edu.cn","https://docker.mirrors.ustc.edu.cn","https://registry-1.docker.io", "https://hbv0b596.mirror.aliyuncs.com"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.k8s.io"]
        endpoint=["https://dockerproxy.com", "https://mirror.baidubce.com","https://ccr.ccs.tencentyun.com","https://docker.m.daocloud.io","https://docker.nju.edu.cn","https://docker.mirrors.ustc.edu.cn","https://hbv0b596.mirror.aliyuncs.com", "https://k8s.m.daocloud.io", "https://docker.mirrors.ustc.edu.cn","https://hub-mirror.c.163.com"]

1.4 启动并设置开机自启

bash 复制代码
systemctl start containerd
systemctl enable containerd

2、安装容器工具

2.1 下载cni-plugins

下载完之后丢到Linux中

2.2 解压并安装

bash 复制代码
mkdir -p /opt/cni/bin/  
tar -zxvf cni-plugins-linux-amd64-v1.2.0.tgz -C /opt/cni/bin/

3、搭建kubernetes集群

3.1 安装配置kubelet、kubeadm、kubectl

bash 复制代码
yum install -y kubelet-1.27.6 kubeadm-1.27.6 kubectl-1.27.6

3.2 kubelet启动并设置开机自启

bash 复制代码
systemctl start kubelet
systemctl enable kubelet

3.3 初始集群master节点

bash 复制代码
kubeadm init \
--apiserver-advertise-address=10.0.2.5 \
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
--kubernetes-version v1.27.6 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=10.244.0.0/16

3.3.1 可能遇见错误 1:/proc/sys/net/bridge/bridge-nf-call-iptables 不存在

  • 原因:

    Kubernetes 要求启用 bridge-nf-call-iptables 以实现容器网络桥接流量通过 iptables 规则(CNI 插件如 Flannel/Calico 依赖此功能)。

  • 解决方法:

    1、加载内核模块并设置参数:

    bash 复制代码
    # 加载 br_netfilter 内核模块 
    sudo modprobe br_netfilter  
    # 临时生效 
    echo 1 | sudo tee /proc/sys/net/bridge/bridge-nf-call-iptables  

    2、持久化配置(防止重启失效):

    bash 复制代码
    sudo tee /etc/modules-load.d/br_netfilter.conf  <<EOF 
    br_netfilter 
    EOF 
    sudo tee /etc/sysctl.d/k8s.conf  <<EOF 
    net.bridge.bridge-nf-call-iptables  = 1 
    EOF 
    # 重新加载配置
    sudo sysctl --system  

3.3.2 可能遇见错误 2:/proc/sys/net/ipv4/ip_forward 未设置为 1

  • 原因:

    Kubernetes 要求启用 IP 转发(ip_forward=1)以支持 Pod 跨节点通信。

  • 解决方法:

    1、临时启用(立即生效):

    bash 复制代码
    echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward 

    2、持久化配置:

    bash 复制代码
    sudo tee -a /etc/sysctl.d/k8s.conf  <<EOF 
    net.ipv4.ip_forward  = 1 
    EOF 
    sudo sysctl --system 

3.4 根据返回的结果执行对应的命令

3.4.1 本地执行代码

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

3.4.2 安装Calico网络

3.4.2.1、安装 Tigera 操作符和自定义资源定义
bash 复制代码
#由于 CRD 包很大,kubectl apply可能会超出请求限制。请改用kubectl create或kubectl replace。
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.3/manifests/tigera-operator.yaml
3.4.2.2、通过创建必要的自定义资源来安装 Calico

1、下载custom-resources.yaml

2、修改pod网段改为我们初始化集群时候设置的10.244.0.0/16

3、安装 Calico

bash 复制代码
kubectl create -f custom-resources.yaml

4、确定所有的pod都有运行

3.4.3 其他的node节点加入集群

bash 复制代码
kubeadm join 10.0.2.5:6443 --token p9rnu4.7zjncoc2q7abf3st --discovery-token-ca-cert-hash sha256:2c2aba213ad44e2e8f951add165d72629d4807f2d59b7de2bb9c102c660f0f17

由于创建需要时间比较长可以运行watch kubectl get pod -n kube-system -o wide监控创建结果

3.4.4 查看是否加入成功

bash 复制代码
kubectl get nodes
相关推荐
suamt1 天前
记录windows下如何运行docker程序
运维·docker·容器
一条咸鱼_SaltyFish1 天前
[Day13] 微服务架构下的共享基础库设计:contract-common 模块实践
开发语言·人工智能·微服务·云原生·架构·ai编程
oMcLin1 天前
如何在RHEL 9上配置并优化Kubernetes 1.23高可用集群,提升大规模容器化应用的自动化部署与管理?
kubernetes·自动化·php
特立独行的猫a1 天前
低成本搭建鸿蒙PC运行环境:基于 Docker 的 x86_64 服务器
docker·容器·harmonyos·鸿蒙pc
ghostwritten1 天前
Kubernetes 网络模式深入解析?
网络·容器·kubernetes
鋆雨无欢丶1 天前
docker证书认证问题
运维·docker·容器
阿杰 AJie1 天前
Docker 容器启动的全方位方法汇总
运维·docker·容器
原神启动11 天前
K8S(七)—— Kubernetes Pod 基础概念与实战配置
云原生·容器·kubernetes
我的golang之路果然有问题1 天前
Docker 之常用操作(实习中的)
java·运维·笔记·docker·容器·eureka
牛奔1 天前
Docker 容器无法停止的排障与解决全过程
运维·docker·云原生·容器·eureka