kubernetes v1.29.0 支持docker的安装配置

Kubernetes 安装和配置指南

Kubernetes 本身并不直接支持 Docker 作为容器运行时,而是通过 Container Runtime Interface (CRI) 来与不同的容器运行时进行交互。CRI 是 Kubernetes 定义的一种标准接口,允许 Kubernetes 与多种容器运行时(如 containerd、CRI-O 等)进行通信。

Docker 公司开发了一个适配器 cri-dockerd,使得 Kubernetes 可以通过 CRI 接口与 Docker 进行通信。然而,这种方法并不是官方推荐的方式,并且存在一些潜在的问题和限制:

  1. 维护和支持cri-dockerd 并不是由 Kubernetes 社区官方维护的项目,因此在遇到问题时可能得不到及时的支持。
  2. 性能和稳定性:由于额外的适配层,使用 cri-dockerd 可能会导致一定的性能开销,并且可能存在稳定性问题。
  3. 功能兼容性:某些高级功能和优化可能无法完全通过 cri-dockerd 实现,导致无法充分利用 Kubernetes 的全部潜力。
  4. 社区趋势:大多数 Kubernetes 用户和社区都在转向使用 containerd 或 CRI-O,这些是 Kubernetes 官方推荐的容器运行时。

因此,虽然可以通过 cri-dockerd 在 Kubernetes 中使用 Docker,但为了更好的性能、稳定性和社区支持,建议使用官方推荐的容器运行时,如 containerd 或 CRI-O。

如果你仍然希望继续使用 Docker,可以参考以下步骤安装和配置 cri-dockerd

安装 containerd

containerd 是一个轻量级的容器运行时,也是 Kubernetes 官方推荐的默认容器运行时之一。

# 配置 containerd 的 yum 源
cat <<EOF | sudo tee /etc/yum.repos.d/containerd.repo
[containerd]
name=containerd NEAR Repo
baseurl=https://download.opensuse.org/repositories/home:/kubic:/project:/containers:/stable:/cri-o-1.29/CentOS_8/
enabled=1
gpgcheck=1
gpgkey=https://download.opensuse.org/repositories/home:/kubic:/project:/containers:/stable:/cri-o-1.29/CentOS_8/repodata/repomd.xml.key
EOF

# 安装 containerd
sudo yum install -y containerd

# 配置 containerd
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml

# 启动并启用 containerd 服务
sudo systemctl restart containerd
sudo systemctl enable containerd

配置 Kubernetes 使用 containerd

编辑 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf 文件,确保 --container-runtime 设置为 remote,并且 --container-runtime-endpoint 设置为 unix:///run/containerd/containerd.sock

# 编辑 kubelet 配置文件
sudo sed -i 's/--container-runtime=docker/--container-runtime=remote/' /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
sudo sed -i 's/--container-runtime-endpoint=unix:\/\/\/var\/run\/docker.sock/--container-runtime-endpoint=unix:\/\/\/run\/containerd\/containerd.sock/' /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

# 重启 kubelet 服务
sudo systemctl daemon-reload
sudo systemctl restart kubelet

通过以上步骤,你可以将 Kubernetes 配置为使用 containerd 作为容器运行时,从而获得更好的性能和稳定性。

1. 修改主机名

hostnamectl set-hostname <your-hostname>

2. 安装 IPVS

yum install -y ipvsadm

3. 开启路由转发

echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
yum install -y epel-release
yum install -y bridge-utils
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
sysctl -p

4. 安装 Docker

sudo dnf config-manager --add-repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
cd /etc/yum.repos.d
sed -i 's|download.docker.com|mirrors.ustc.edu.cn/docker-ce|g' docker-ce.repo
yum -y install docker-ce

cat > /etc/docker/daemon.json <<EOF
{
  "data-root": "/data/docker",
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "100"
  },
  "insecure-registries": ["harbor.xinxainghf.com"],
  "registry-mirrors": ["https://kfp63jaj.mirror.aliyuncs.com"]
}
EOF

mkdir -p /etc/systemd/system/docker.service.d
systemctl daemon-reload && systemctl restart docker && systemctl enable docker

5. 安装 cri-dockerd -> CRI 翻译器

wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.9/cri-dockerd-0.3.9.amd64.tgz
tar -xf cri-dockerd-0.3.9.amd64.tgz
cp cri-dockerd/cri-dockerd /usr/bin/
chmod +x /usr/bin/cri-dockerd

6. 配置套接字和编写启动配置

cat > /usr/lib/systemd/system/cri-docker.service <<EOF
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target
Requires=cri-docker.socket

[Service]
Type=notify
ExecStart=/usr/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.8
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process

[Install]
WantedBy=multi-user.target
EOF

cat > /usr/lib/systemd/system/cri-docker.socket <<EOF
[Unit]
Description=CRI Docker socket for the API
PartOf=cri-docker.service

[Socket]
ListenStream=%t/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker

[Install]
WantedBy=sockets.target
EOF

7. 检查服务

systemctl daemon-reload
systemctl enable cri-docker
systemctl start cri-docker
systemctl is-active cri-docker

8. 安装 Kubernetes

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/repodata/repomd.xml.key
EOF

yum install -y kubelet-1.29.0 kubectl-1.29.0 kubeadm-1.29.0
systemctl enable kubelet.service

9. 初始化 Master 节点

在 Master 节点上执行以下命令:

kubeadm init --apiserver-advertise-address=192.168.234.11 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version 1.29.1 --service-cidr=10.10.0.0/12 --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=all --cri-socket unix:///var/run/cri-dockerd.sock

10. 加入 Worker 节点

在 Worker 节点上执行以下命令:

kubeadm join 192.168.234.11:6443 --token vglwnn.qy5s0raiun1yufdi --discovery-token-ca-cert-hash sha256:951d73488711366cbc3028d93c4cdc52c240d78ff49b32fbef942e1eee9c7454 --cri-socket unix:///var/run/cri-dockerd.sock

11. 安装网络插件 Calico

编辑 Calico 安装 YAML 文件并应用:

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

根据需要修改以下配置:

- name: CALICO_IPV4POOL_CIDR
  value: "10.244.0.0/16"

- name: CALICO_IPV4POOL_VXLAN
  value: "Always"

12. 安装 Kubernetes 命令增强补全

yum install bash-completion -y
echo "source /usr/share/bash-completion/bash_completion" >> ~/.bashrc
echo "source <(kubectl completion bash)" >> ~/.bashrc
source ~/.bashrc