官方博客给出的原因:我们在这里谈论的是两种不同的环境,这造成了混乱。在您的Kubernetes集群内部,有一个称为容器运行时的东西,它负责拉出和运行容器映像。Docker是该运行时的流行选择(其他常见选项包括容器和CRI-O),但是Docker并非旨在嵌入Kubernetes中,这会引起问题。
您会看到,我们所谓的“ Docker”实际上不是一件事,它是整个技术堆栈,其中一部分是所谓的“ containerd”,它本身就是一个高级容器运行时。Docker很酷且有用,因为它具有许多UX增强功能,使我们在进行开发工作时真的很容易与人进行交互,但是对于kubernetes而言,这些UX增强不是必需的,因为它不是人。
官方博客建议:不建议使用TL; DR Docker作为基础运行时,而应使用使用 为Kubernetes创建的Container Runtime Interface(CRI)的运行时。Docker生成的映像将一如既往地在所有运行时中继续在您的集群中运行。
如果您是Kubernetes的最终用户,则不会为您带来很多改变。这并不意味着Docker的消亡,也不意味着您不能或不应该再将Docker用作开发工具。Docker仍然是用于构建容器的有用工具,并且运行产生的映像docker build
仍可以在您的Kubernetes集群中运行。
如果您使用的是托管的Kubernetes服务,例如GKE,EKS或AKS(默认为containerd),则需要确保您的工作节点正在使用受支持的容器运行时,然后才能在将来的Kubernetes版本中删除Docker支持。如果您具有节点自定义项,则可能需要根据您的环境和运行时要求对其进行更新。请与您的服务提供商合作,以确保正确的升级测试和计划。
如果要滚动自己的集群,则还需要进行更改以避免集群中断。在v1.20,您将收到Docker的弃用警告。在将来的Kubernetes版本(目前计划在2021年下半年为1.22版本)中删除Docker运行时支持时,它将不再受支持,并且您将需要切换到其他兼容的容器运行时之一,例如containerd或CRI-O 。只要确保您选择的运行时支持您当前使用的docker守护程序配置即可(例如,日志记录)。
Dockershim弃用
Dockershim,用于Docker的容器运行时接口(CRI)垫片正在被弃用。对Docker的支持已被否决,并将在未来的版本中删除。
官方博客给出:在v1.23发行版中从Kubelet中删除了Dockershim,从而删除了对Docker作为容器运行时的支持。
参考官方博客:https://kubernetes.io/blog/2020/12/02/dont-panic-kubernetes-and-docker/
主机名 | IP地址 | 角色 |
---|---|---|
kube-master | 虚拟机/电脑IP | master |
kube-node1 | 虚拟机/电脑IP | node1 |
kube-node2 | 虚拟机/电脑IP | node2 |
本文master和node1 为一台机器
角色 | 组件 |
master | docker、kubelet、kubeadm、kubectl |
node1 | docker、kubelet、kubeadm、kubectl |
node2 | docker、kubelet、kubeadm、kubectl |
hostnamectl set-hostname master
hostnamectl set-hostname node1
vim /etc/hosts
192.168.10.108 master
192.168.10.108 node1
在每台机器上关闭防火墙,关闭服务,并设为开机不自启
sudo systemctl stop firewalld && sudo systemctl disable firewalld
sudo iptables -F && sudo iptables -X && sudo iptables -F -t nat && sudo iptables -X -t nat
sudo iptables -P FORWARD ACCEPT
1、如果开启了 swap 分区,kubelet 会启动失败(可以通过将参数 --fail-swap-on 设置为false 来忽略 swap on),故需要在每台机器上关闭 swap 分区:
sudo swapoff -a
2、为了防止开机自动挂载 swap 分区,可以注释 /etc/fstab 中相应的条目:
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
1、关闭 SELinux,否则后续 K8S 挂载目录时可能报错 Permission denied :
sudo setenforce 0
2、修改配置文件,永久生效;
grep SELINUX /etc/selinux/config
SELINUX=disabled
这一步也可以vi /etc/selinux/config(修改SELINUX=disabled)
yum install ntpdate -y && ntpdate time.windows.com
cat > /etc/sysctl.d/k8s.conf <
官方文档https://docs.docker.com/engine/install/centos/
移除电脑上原有的dockers
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
注:如果报没有文件,说明原来没有dockers,直接进行下面的即可
安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新并安装Docker-CE
sudo yum makecache fast
开始docker安装
sudo yum -y install docker-ce
启动Docker
sudo systemctl start docker && sudo systemctl enable docker
查看dockers状态
$ sudo systemctl status docker
说明docker在正常运行,如果出现问题,输入journalctl -xe或者查看系统日志(vim /var/log/message)查看原因
可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://s2q9fn53.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload && sudo systemctl restart docker
这里的仓库地址可自行在阿里云上申请(可参考阿里云用户镜像加速地址在哪里)
添加kubernetes阿里yum源
cat < /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
开始安装
yum install kubectl kubelet kubeadm && systemctl enable kubelet && systemctl start kubelet
kubeadm init --kubernetes-version=1.20.0 \
--apiserver-advertise-address=192.168.10.108 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.10.0.0/16 --pod-network-cidr=10.122.0.0/16
这里的192.168.10.108改为自己的IP地址
中间需要等待1-2min,根据网络速度等待即可
出现successfully表示初始化完成
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
按照提示执行上述命令
如果是root用户可直接执行
export KUBECONFIG=/etc/kubernetes/admin.conf
根据提示可将node节点加入master(可直接从控制台输出信息里面复制)
kubeadm join 192.168.10.108:6443 --token ...
查看node节点显示当前node状态均为noReady是正常的,配置网络后,就转为ready了
kubectl get node
部署CNI网络插件
安装flannel网络插件
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
将master节点的admin.conf发送到到所有node节点
scp /etc/kubernetes/admin.conf root@node1:/etc/kubernetes/admin.conf
scp /etc/kubernetes/admin.conf root@node2:/etc/kubernetes/admin.conf
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
source /etc/profile
执行完成以后可以在任意node节点上管理集群,查看节点是否正常
kubectl get nodes
mater和node显示为ready
恭喜你完成了kubernetes1.20搭建任务
根据教程,在环境不出问题的情况下可以在20分钟以内完成搭建任务
kubectl get nodes出现Unable to connect to the server: x509可查看搭建kubernetes1.20报错解决:Unable to connect to the server: x509解决!
出现其它相关问题可参考(centos7.6使用kubeadm安装kubernetes的master worker节点笔记及遇到的坑)
本文参考:kubernetes1.20搭建 快速 简单