由于回答这个问题花了我很多时间,我想分享是什么让我摆脱了这个问题。可能有一些不必要的代码,但如果我或其他人必须重做所有步骤,我也希望它在一个地方。
首先,这一切都是从 Docker 开始的……
我发现这大概都是从我安装Docker的方式开始的。sudo apt-get install docker.io
按照我用来安装Docker并使用它的链接在线说明cgroups
做sudo usermod -aG docker $USER
.
好吧,看看Kubernetes的官方说明,这是一个错误:systemd
是推荐的方法!
因此,我按照 Mayur Bhandare 的这些重要指示,彻底清除了我对docker 所做的一切:
sudo apt-get purge -y docker-engine docker docker.io docker-ce
sudo apt-get autoremove -y --purge docker-engine docker docker.io docker-ce
sudo rm -rf /var/lib/docker /etc/docker
sudo rm /etc/apparmor.d/docker
sudo groupdel docker
sudo rm -rf /var/run/docker.sock
# Reboot to be sure
之后我以官方方式重新安装(请记住,这可能会在未来发生变化):
# Install Docker CE
## Set up the repository:
### Install packages to allow apt to use a repository over HTTPS
apt-get update && apt-get install -y \
apt-transport-https ca-certificates curl software-properties-common gnupg2
### Add Docker’s official GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
### Add Docker apt repository.
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
## Install Docker CE.
apt-get update && apt-get install -y \
containerd.io=1.2.10-3 \
docker-ce=5:19.03.4~3-0~ubuntu-$(lsb_release -cs) \
docker-ce-cli=5:19.03.4~3-0~ubuntu-$(lsb_release -cs)
# Setup daemon.
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
mkdir -p /etc/systemd/system/docker.service.d
# Restart docker.
systemctl daemon-reload
systemctl restart docker
请注意,这明确使用systemd
!
......然后它继续与法兰绒......
上面我写我的sudo kubeadm init
已经完成了,--pod-network-cidr=10.10.10.10/24
因为后者是我主人的IP。好吧,正如这里 指出的那样,不使用官方推荐 --pod-network-cidr=10.244.0.0/16
的结果会导致错误,例如使用kubectl proxy
提供的kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml
. 这是10.244.0.0/16
因为.yaml
在.yaml
.
为了摆脱错误的配置,我进行了完全重置。这可以通过使用sudo kubeadm reset
和删除配置来实现sudo rm -r ~/.kube/config
。无论如何,由于我把它搞砸了,我通过卸载并重新安装kubeadm
并确保它确实使用iptables
了这个时间(我之前也忘记这样做了......)。
这是一个很好的链接,如何完全卸载所有 kubeadm-parts。
kubeadm reset
sudo apt-get purge kubeadm kubectl kubelet kubernetes-cni kube*
sudo apt-get autoremove
sudo rm -rf ~/.kube
为了完整起见,这里也是重新安装:
# ensure legacy binaries are installed
sudo apt-get install -y iptables arptables ebtables
# switch to legacy versions
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
sudo update-alternatives --set arptables /usr/sbin/arptables-legacy
sudo update-alternatives --set ebtables /usr/sbin/ebtables-legacy
# Install Kubernetes with kubeadm
sudo apt-get update && sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
#reboot
...终于成功了!
干净重新安装后,我执行了以下操作:
# Initialize with correct cidr
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml
然后对结果感到震惊:
kubectl get pods --all-namespaces
在站点注释上:这也解决了/run/flannel/subnet.env: no such file or directory
我在描述未创建的 coredns 时在这些步骤之前遇到的错误。