安装docker

       具体详情请可以参考这篇文章 Docker与WSL 2 子系统安装与使用指南_docker wsl2-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/qq_46352005/article/details/131936074?spm=1001.2014.3001.5502

安装kubeadm、kubectl和kubelet

#更新apt源
sudo apt-get update
sudo apt-get upgrade

#下载 Google Cloud 公开签名秘钥(阿里云镜像):

curl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg
 


#添加 Kubernetes apt 仓库(阿里云镜像):

echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
 

#安装 kubelet、kubeadm 和 kubectl,并锁定其版本:

sudo apt update
sudo apt install -y --allow-downgrades kubelet=1.23.6-00 kubeadm=1.23.6-00 kubectl=1.23.6-00

sudo apt-mark hold kubelet kubeadm kubectl

问题
由于国内网络原因,kubeadm init会卡住不动,然后报出这种问题:
[ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-apiserver:v1.28.2: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
 

解决方法
使用阿里云镜像
运行kubeadm init时加上阿里云镜像的参数--image-repository=registry.aliyuncs.com/google_containers,如下:(版本改为自己需要的)

kubeadm init --image-repository=registry.aliyuncs.com/google_containers --pod-netw

首先使用下面的命令获取需要的docker镜像名称:

kubeadm config images list

结果如以下:(版本改为自己需要的)

registry.k8s.io/kube-apiserver:v1.23.6 
registry.k8s.io/kube-controller-manager:v1.23.6 
registry.k8s.io/kube-scheduler:v1.23.6 
registry.k8s.io/kube-proxy:v1.23.6 
registry.k8s.io/pause:3.6
registry.k8s.io/etcd:3.5.1-0 
registry.k8s.io/coredns/coredns:v1.8.6 

注意:新版本的coredns改名了,变成了coredns/coredns,需要特殊处理,不放在脚本中

特殊处理

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.8.6
docker  tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.8.6 k8s.gcr.io/coredns/coredns:v1.8.6
docker rmi -f registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.8.6

然后开始编写脚本:

vim pull_k8s_images.sh
set -o errexit
set -o nounset
set -o pipefail

##这里定义版本,按照上面得到的列表自己改一下版本号

KUBE_VERSION=v1.23.6
KUBE_PAUSE_VERSION=3.6
ETCD_VERSION=3.5.1-0
# DNS_VERSION=1.23.6 

##这是原始仓库名,最后需要改名成这个
GCR_URL=k8s.gcr.io

##这里就是写你要使用的仓库
DOCKERHUB_URL=gotok8s

##这里是镜像列表,新版本要把coredns需要特殊处理
images=(
kube-proxy:${KUBE_VERSION}
kube-scheduler:${KUBE_VERSION}
kube-controller-manager:${KUBE_VERSION}
kube-apiserver:${KUBE_VERSION}
pause:${KUBE_PAUSE_VERSION}
etcd:${ETCD_VERSION}
# coredns:${DNS_VERSION}
)

##这里是拉取和改名的循环语句
for imageName in ${images[@]} ; do
  docker pull $DOCKERHUB_URL/$imageName
  docker tag $DOCKERHUB_URL/$imageName $GCR_URL/$imageName
  docker rmi $DOCKERHUB_URL/$imageName
done

然后授予执行权限

chmod +x ./pull_k8s_images.sh

执行:

./pull_k8s_images.sh

在 Master 节点下执行

 

kubeadm init \
      --apiserver-advertise-address=8.134.159.177 \
      --kubernetes-version v1.23.6 \
      --service-cidr=10.96.0.0/12 \
      --pod-network-cidr=10.244.0.0/16

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐