天行健,君子以自强不息;地势坤,君子以厚德载物。
每个人都有惰性,但不断学习是好好生活的根本,共勉!
文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。
K8S搭建(ubuntu)系列:
k8s搭建(详细演示完整一篇)
k8s搭建(二、k8s组件安装)
K8S搭建(centos)系列:
K8S搭建(centos)完整版
K8S搭建(centos)一、环境准备
K8S搭建(centos)二、服务器设置
K8S搭建(centos)三、安装Docker
K8S搭建(centos)四、安装K8S
K8S搭建(centos)五、初始化(master节点)
K8S搭建(centos)六、搭建集群
K8S搭建(centos)七、节点加入集群
K8S搭建(centos)八、从节点中使用kubectl命令
K8S搭建(centos)九、集群节点的删除
K8S搭建(centos)十、Dashboard配置(主节点)
以下操作每个节点都要来一遍
以下为运行时的小短文,可选读
为什么要安装docker:
k8s需要再每个pod中运行容器,所以需要容器运行时,k8s默认使用容器运行时接口(Container Runtime Interface,CRI)与所安装的容器运行时进行交互
在不指定运行时的情况下,kubeadm自动扫描一组Unix域套接字来判定系统已安装的运行时
容器运行时与其对应的套接字路径如下:
容器运行时 | 域套接字 |
---|---|
Docker | /var/run/dockershim.sock |
containerd | /run/containerd/containerd.sock |
CRI-O | /var/run/crio/crio.sock |
如果同时安装了docker和containerd,优先选择docker,原因是docker附带了containerd。除此之外,只要安装docker,就会检测到docker和containerd,当安装了两个或者多个运行时的时候,kubeadm会报错并退出。kubelet通过内置dockershim CRI实现与docker集成。
当安装docker后,则域套接字只会保留一个containerd的,所以默认k8s也会使用containerd作为运行时
containerd是一个工业级标准的容器运行时,它强调简单性、健壮性和可移植性。containerd可以在宿主机中管理完整的容器生命周期,包括容器镜像的传输和存储、容器的执行和管理、存储和网络等。
docker和containerd的对比:
containerd是从Docker中分离出来的一个项目,可以作为一个底层容器运行时,现在它成了Kubernete容器运行时更好的选择。
k8s移除dockershim集成,推荐使用containerd,其原因大致如下:
当使用docker作为容器运行时,kubelet需要先要通过 dockershim 去调用Docker,再通过Docker去调用containerd。
当使用containerd作为容器运行时,由于containerd内置了 CRI (Container Runtime Interface:容器运行时接口)插件,kubelet可以直接调用containerd。
docker为k8s提供运行时容器引擎,用来运行k8s相关容器
k8s的1.24版本之前,都集成了docker的运行时环境组件,故,只需安装docker,即可使用运行时环境运行k8s的容器组件
在k8s的1.24版本开始kubelet移除了自带的容器运行时的支持,1.24开始就需要自己安装额外的容器运行时支持
本篇k8s以1.23.0版本为例,只需安装docker即可
如非root用户下,需在命令前加sudo前缀获取权限,后续都是如此
本篇docker版本选取为当前最新版本24.0.7-1.el8
参考:docker(yum)安装
安装后,
查看docker状态
systemctl status docker
启动docker,
systemctl start docker
本篇仅配置cgroup驱动,其余不做配置
如需配置镜像加速,参考:配置阿里云镜像加速器
创建docker文件夹,-p参数表示如果存在则不创建
mkdir -p /etc/docker
修改cgroup驱动为systemd,这是k8s官方推荐,且不使用这个后续可能会出现一些问题
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
然后查看
cat /etc/docker/daemon.json
也可用vim进行修改添加
重启docker,一定要重启docker,不重启这个配置无法生效会导致后续kubeadm初始化报错
systemctl restart docker
最后设置docker开机自启动,立即生效
systemctl enable --now docker
查看状态
systemctl status docker
拓展(可跳过,本篇跳过):
除了修改驱动外,还可以添加其它参数来配置docker
如限制容器日志大小、修改存储类型、docker配置目录可修改等
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
],
"registry-mirrors": ["https://vj4iipoo.mirror.aliyuncs.com"],
"data-root": "/data/docker"
}
EOF
其中最重要的就是cgroup驱动的修改,官方推荐使用systemd,具体原因可参考官网
查看docker版本信息
docker -v
或
docker --version
查看docker详细信息
docker info
如果使用的是非root用户,则可以执行以下操作将用户添加到docker组,后续使用docker相关命令无需加sudo前缀
当然也可以不配置,看你心情
添加用户到 docker 组
usermod -aG docker <USERNAME>
立即更新 docker 组,使之生效
newgrp docker
确保网络模块开机自动加载
执行命令
lsmod | grep overlay
lsmod | grep br_netfilter
输出如下
若无输出或文件不存在则需创建文件如下
cat > /etc/modules-load.d/docker.conf <<EOF
overlay
br_netfilter
EOF
modprobe overlay
modprobe br_netfilter
所有节点添加网络桥接过滤和地址转发功能
cat > /etc/sysctl.d/kubernetes.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
执行命令,立即生效
sysctl --system
验证是否生效,执行以下命令,返回1则表示生效
sysctl -n net.bridge.bridge-nf-call-iptables
sysctl -n net.bridge.bridge-nf-call-ip6tables
sysctl -n net.ipv4.ip_forward
感谢阅读,祝君暴富!