1. 加载源和bridge
yum install -y epel-release
yum install -y bridge-utils
bridge-utils包中的brctl命令用于在Linux系统中管理以太网桥,包括创建、维护和检查网桥配置。网桥是一种在数据链路层工作的设备,能够将多个局域网(LAN)连接起来,并根据MAC地址转发帧,起到隔离碰撞和隔离网络段的作用
2. modprobe br_netfilter 经过网桥的流量,必须被防火墙处理
执行如下命令:
modprobe br_netfilter
echo 'br_netfilter' >> /etc/modules-load.d/bridge.conf
echo 'net.bridge.bridge-nf-call-iptables=1' >> /etc/sysctl.conf
echo 'net.bridge.bridge-nf-call-ip6tables=1' >> /etc/sysctl.conf
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
sysctl -p
3. docker-ce yum 源
sudo dnf config-manager --add-repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
cd /etc/yum.repos.d
cat docker-ce.repo 看到地址是官方的,切换为国内
sed -e 's|download.docker.com|mirrors.ustc.edu.cn/docker-ce|g' docker-ce.repo -i.bak
4. 安装docker-ce
yum install docker-ce -y
5. 配置deamo
cat > /etc/docker/daemon.json <<EOF
{
"default-ipc-mode": "shareable", #指定ipc模式共享,默认是关闭的
"data-root": "/data/docker", #当前docker的根目录,默认是/var/lib/docker
"exec-opts": ["native.cgroupdriver=systemd"], #指定启动的额外参数,官方建议
"log-drivers": "json-file", #当前日志驱动为json-file
"log-opts": {"max-size": "100m","max-file":"100"}, #单文件大小,以及文件数
"insecure-registries": ["harbor.xinxainghf.com"] #当前信任的仓库地址
"registry-mirrors": ["https://kfp63jaj.mirror.aliyuncs.com"] #官方镜像地址
}
EOF
6. 创建目录
mkdir -p /etc/systemd/system/docker.service.d
7. 重新启动服务
systemctl daemon-reload && systemctl restart docker && systemctl enable docker
8. 检查json文件是否错误
jq '.' your-docker-file.json 将 your-docker-file.json 替换为你的 Docker JSON 文件名。如果文件语法正确,你会看到文件内容的输出。如果文件有语法错误,jq 会报告错误。
if jq '.' your-docker-file.json >/dev/null 2>&1; then echo "JSON syntax is correct." else echo "JSON syntax is incorrect." fi
执行如下,查看详细报错:
9. 如果是key-value 错误,执行等于右边的命令执行
ExecStart=/usr/bin/dockerd
10. 基于Docker模拟
说明:pause共享网络,pid,ipc,
11.拉取镜像
如果你的k8s使用的事docker客户端
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2
如果使用containerd自带客户端
crictl pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2
ctr -n k8s.io i tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2
如果要删除所有未使用的镜像(即没有容器引用的镜像),可以使用:
docker image prune -a
这里是删除特定Docker镜像的命令示例:
docker rmi my-image
启动命令,注意版本号
docker run --name pause -p 8080:80 -d k8s.gcr.io/pause:3.2
说明:
在 Linux 中,IPC(Inter-Process Communication)命名空间用于隔离进程间通信的资源,包括共享内存、信号量和消息队列。IPC 命名空间是 Linux 命名空间的一种类型,它允许在同一主机上创建多个隔离的 IPC 实例,每个实例都有自己的 IPC 资源。
Pause容器中的PID(Process ID)是指容器进程的标识符。
在Kubernetes中,每个Pod都会运行一个Pause容器,其他业务容器则从Pause容器中fork出来。Pause容器作为Pod的初始化容器,负责初始化命名空间并管理PID,确保容器间共享资源。Pause容器是Pod的PID 1进程,负责回收僵尸进程,特别是在PID命名空间共享下
12. 执行如下命令前,需要当前目录有nginx文件
cat <<EOF>>nginx.conf error_log stderr; events { worker_connections 1024;} http { access_log /dev/stdout cobined; server { listen 80 default_server; server_name example.com www.example.com; location / { proxy_pass http://127.0.0.1:2368; } } }
执行命令
docker run --name nginx -v
pwd/nginx.conf:/etc/nginx/nginx.conf --net=container:pause --ipc=container:pause --pid=container:pause -d nginx
拉取失败,可以更换daemon.json
{ "registry-mirrors": ["https://registry.docker-cn.com","https://pee6w651.mirror.aliyuncs.com"] }
执行命令
docker run -d --name ghost --net=container:pause --ipc=container:pause --pid=container:pause ghost
查看镜像
13. 访问页面 192.168.66.11:8080
14. 为什么使用pause
14-1. pause更稳定
14-2. pause可以回收僵死进程
Pod 是一种概念,是一个逻辑,符合这种pause特性,都叫做Pod