问题一:国外镜像被墙
解决方法:如果直接从k8s.gcr.io 拉取镜像的话,国内会被墙,所以可以从DockerHub的其它拥有所需版本的仓库拉取
1.编写脚本
vim pull_k8s_images.sh
set -o errexit
set -o nounset
set -o pipefail
##这里定义版本,按照上面得到的列表自己改一下版本号
KUBE_VERSION=v1.21.2
KUBE_PAUSE_VERSION=3.4.1
ETCD_VERSION=3.4.13-0
DNS_VERSION=v1.8.0
##这是原始仓库名,最后需要改名成这个
GCR_URL=k8s.gcr.io
##这里就是写你要使用的仓库
DOCKERHUB_URL=gotok8s
##这里是镜像列表,新版本要把coredns改成coredns/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/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
2.授予执行权限
chmod +x ./pull_k8s_images.sh
3.执行脚本
root@master:/home# ./pull_k8s_images.sh
4.查看镜像
发现没有k8s.gcr.io/coredns/coredns:v1.8.0,需要在dockerhub另外找一个有所需版本的仓库https://hub.docker.com/r/coredns/coredns/tags?page=1&ordering=last_updated
这里只缺一个k8s.gcr.io/coredns/coredns:v1.8.0,所以就不写脚本,自己手动操作了
#拉取 coredns/coredns:1.8.0
root@master:/home# docker pull coredns/coredns:1.8.0
#重命名
root@master:/home# docker tag coredns/coredns:1.8.0 k8s.gcr.io/coredns/coredns:v1.8.0
#删除原来拉取的镜像
root@master:/home# docker rmi coredns/coredns:1.8.0
现在再查看镜像
问题二:kubeadm init
**可以看到有三个类型的错误:[ERROR: Port XXX is in use] ,[ERROR: .yaml already exists], [ERROR : /var/lib/etcd is not empty]
解决方法:
- 对于第一类和第二类问题,使用 kubeadm reset 命令,一路yes通过就行。
- 第三个问题,先进入 /var/lib/etcd目录,再使用 rm -rf 命令,清空etcd库的文件。
- ps:还有一个问题忘记记录了
[WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd".
解决方法:
vim /etc/docker/daemon.json
#加入以下内容
{
"exec-opts":["native.cgroupdriver=systemd"]
}
#重启docker
systemctl restart docker
systemctl status docker
现在再来使用 kubeadm init