之前我写了一篇containerd+k8s搭建集群的文章,文章地址:
https://blog.csdn.net/m0_51510236/article/details/130842122
在上面这篇文章中有小伙伴给我反映镜像拉取不到的问题,现在我们就来解决这个问题
因为是对上一篇文章拉取不到镜像问题的解决,所以安装前的准备工作请参考上一篇文章
本片文章的视频教程地址为:https://www.bilibili.com/video/BV1dP411q7FD/?vd_source=98deeeab6739fa30792cfcffa994b50e
下载离线镜像
离线镜像我已经上传到百度网盘,可以使用根据下面的提取地址提取
链接:https://pan.baidu.com/s/1-ILbg0GG8jNHQhVaVhUKww?pwd=kfe2
提取码:kfe2
导入镜像
我已经上传这个文件到我的master节点:
接下来我们需要解压它,使用以下命令:
tar -zxvf k8s-image.tar.gz
解压之后我们可以看到两个文件,一个 k8s-master.tar.gz 另一个 k8s-node.tar.gz:
其中两个文件的作用:
- k8s-master.tar.gz: master上所有的镜像的离线文件
- k8s-node.tar.gz: node上所有镜像的离线文件
需要使用文件传输命令把 k8s-node.tar.gz 传输到所有的node上:
命令:
scp k8s-node.tar.gz root@{你node的地址}:/usr/local/src/
接下来就可以开始导入镜像了,因为镜像需要导入到containerd的 k8s.io 命名空间当中,所以我们需要创建这个命名空间,使用命令:
ctr ns create k8s.io
创建完成后可以查看命名空间列表:
接下来我们可以使用以下命令导入镜像
- k8s-master:
ctr -n k8s.io image import k8s-master.tar.gz
- k8s所有node:
ctr -n k8s.io image import k8s-node.tar.gz
出现这个代表导入成功:
可以通过以下命令查看镜像:
ctr -n k8s.io images list
查看的结果:
初始化集群
现在镜像已经全部下载下来了,就可以直接初始化镜像,可以执行命令(注意修改IP地址和版本号):
kubeadm init \ --apiserver-advertise-address=192.168.3.160 \ --image-repository=registry.aliyuncs.com/google_containers \ --kubernetes-version=v1.26.5 \ --service-cidr=10.96.0.0/12 \ --pod-network-cidr=10.244.0.0/16 \ --cri-socket=unix:///var/run/containerd/containerd.sock
因为我们这次搭建是提前导入了镜像,所以初始化步骤非常快:
因为之前的文章中讲过,所以这里将非常快的过一下,本地执行:
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
所有的node节点执行(注意更换为自己的token):
kubeadm join 192.168.3.160:6443 --token mjdae0.b71g5of1dsor97e0 \ --discovery-token-ca-cert-hash sha256:336be2f0acc7828cad61cd54b40ed50a9f8326d67e2144e3c0864b236e112fcb \ --cri-socket=unix:///var/run/containerd/containerd.sock
节点加入成功:
安装calico插件
执行以下命令进行安装:
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/tigera-operator.yaml
和上面一样,因为镜像已经提前拉取完成,所以创建过程特别快:
初始化客户端资源
cat <<EOF > custom-resources.yaml apiVersion: operator.tigera.io/v1 kind: Installation metadata: name: default spec: calicoNetwork: ipPools: - blockSize: 26 cidr: 10.244.0.0/16 encapsulation: VXLANCrossSubnet natOutgoing: Enabled nodeSelector: all() --- apiVersion: operator.tigera.io/v1 kind: APIServer metadata: name: default spec: {} EOF kubectl create -f custom-resources.yaml
这个操作也能非常快完成:
安装MetalLB
需要修改配置:
kubectl edit configmap -n kube-system kube-proxy
需要修改的地方:
开始安装:
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.9/config/manifests/metallb-native.yaml
安装完成:
分配IP地址池(注意修改为自己的网段里面没有用到的地址):
cat <<EOF > metallb-ippool-config.yaml apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: name: first-pool namespace: metallb-system spec: addresses: - 192.168.3.163-192.168.3.169 --- apiVersion: metallb.io/v1beta1 kind: L2Advertisement metadata: name: example namespace: metallb-system spec: ipAddressPools: - first-pool EOF kubectl apply -f metallb-ippool-config.yaml
部署一个nginx应用并暴露端口
部署应用:
kubectl create deployment nginx --image=registry.cn-hangzhou.aliyuncs.com/xiaohh-docker/nginx:latest
暴露端口:
kubectl expose deployment nginx --port=80 --type=LoadBalancer
可以看到成功暴露了一个IP地址:
且能够成功的访问:
好了下课