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
相关推荐
Bypass--2 小时前
《云原生安全攻防》-- K8s容器安全:权限最小化与SecurityContext
安全·云原生·容器·kubernetes
谢平康2 小时前
docker 镜像下载的另一种方式
运维·docker·容器
开心码农1号6 小时前
K8S基础知识:DaemonSet、Deployment、StatefulSet的用法区别
云原生·容器·kubernetes
Yang三少喜欢撸铁6 小时前
【部署k8s集群时,彻底删除calico、flannel网络插件】
网络·容器·kubernetes
空气力学先驱6 小时前
自顶向下学习K8S--部署Agones
docker·云原生·容器·kubernetes·go
coding随想7 小时前
macOS (M1 Pro) 上 Docker Desktop 安装失败问题及其解决方案
macos·docker·容器
THMAIL7 小时前
k8s scheduler几种扩展方式的关系及区别
云原生·容器·kubernetes
云上艺旅8 小时前
K8S学习之基础五十一:k8s部署jenkins
学习·云原生·容器·kubernetes·jenkins
Yang三少喜欢撸铁8 小时前
【10分钟掌握Docker、k8s的基础命令】
运维·docker·容器·kubernetes·k8s
云上艺旅9 小时前
K8S学习之基础五十七:部署代码扫描工具sonarqube
学习·云原生·容器·kubernetes·jenkins