前言

基础描述

从 k8s 1.24开始,dockershim已经从kubelet中移除,但因为历史问题docker却不支持kubernetes主推的CRI(容器运行时接口)标准,所以docker不能再作为k8s的容器运行时了,即从k8s v1.24开始不再使用docker了
但是如果想继续使用docker的话,可以在kubelet和docker之间加上一个中间层cri-docker。cri-docker是一个支持CRI标准的shim(垫片)。一头通过CRI跟kubelet交互,另一头跟docker api交互,从而间接的实现了kubernetes以docker作为容器运行时。但是这种架构缺点也很明显,调用链更长,效率更低。
本文采用了cri-docker的使用,但是更推荐使用containerd作为k8s的容器运行时

温馨提示:

  • 请注意各节点所需执行命令

一、准备环境

k8s集群版本:kubernetes  v1.25.0

服务器系统 节点IP 节点类型 CUP/内存 Hostname
Centos 7.4.1708 192.168.1.89 主节点 2核/4G master
Centos 7.4.1708 192.168.1.90 工作节点1 2核/4G node1
Centos 7.4.1708 192.168.1.91 工作节点2 2核/4G node2

二、安装检查

注:在三台机器上执行------------------------开始----------------------------

2.1 修改hostname
hostnamectl set-hostname master
hostnamectl set-hostname node1
hostnamectl set-hostname node2

2.2 三台机器网络连通(修改所有节点)

[root@master ~]# cat /etc/hosts
192.168.1.89 master
192.168.1.90 node1
192.168.1.91 node2

2.3 关闭防火墙

systemctl stop firewalld && systemctl disable firewalld && systemctl status firewalld && firewall-cmd --state

2.4 关闭selinux

setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config && sestatus

2.5 关闭swap

swapoff -a
sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab

2.6 配置iptables的ACCEPT规则

iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT

2.7 设置系统参数

cat <<EOF > /etc/sysctl.d/k8s.conf
vm.swappiness = 0
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF sysctl --system

三、yum 更新

3.1 更新系统及安装依赖

yum install update
yum install -y lrzsz conntrack ipvsadm ipset jq sysstat curl iptables libseccomp

四、安装docker

4.1 设置repo

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

注:如果提示命令未找到,执行安装软件:yum -y install yum-utils

4.2 设置国内镜像并重启 daemon

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://tsvqojsz.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload

4.3 下载repo源

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

4.4 安装并启动

yum install -y docker-ce
systemctl start docker
systemctl enable docker

4.5 验证安装结果

docker info

五、安装 cri-dockerd

官方信息

5.1 上传安装包并解压
tar xf cri-dockerd-0.2.6.amd64.tgz
cp cri-dockerd/cri-dockerd /usr/bin/
chmod +x /usr/bin/cri-dockerd

5.2 配置启动⽂件,执行如下命令

cat <<"EOF" > /usr/lib/systemd/system/cri-docker.service
[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.7
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

5.3 ⽣成 socket ⽂件,执行如下命令

cat <<"EOF" > /usr/lib/systemd/system/cri-docker.socket
[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

5.4 启动 cri-docker 并设置开机⾃动启动

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

六 、安装k8s

部署 kubeadm kubelet kubectl

6.1 添加阿⾥云 yum源

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

6.2 安装三大件

yum install -y kubelet-1.25.0 kubeadm-1.25.0 kubectl-1.25.0
kubeadm version
systemctl enable kubelet

6.3  修改初始化系统管理器

说明:

ubuntu 系统,debian 系统,centos7 系统,都是使用 systemd 初始化系统。systemd 这边已经有一套 cgroup 管理器了,如果容器运行时和 kubelet 使用 cgroupfs,此时就会存在 cgroups 和 systemd 两种 cgroup 管理器。也就意味着操作系统里面存在两种资源分配的视图,当操作系统上存在 CPU,内存等等资源不足的时候,操作系统上的进程会变得不稳定。

cat <<EOF > /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
EOF

注:在三台机器上执行------------------------结束----------------------------

6.4 初始化master节点

  • 此命令只在master节点执行,192.168.1.89 替换为你的master节点IP
  • 【若要重新初始化集群状态:kubeadm reset,然后再进行以下初始化操作】
kubeadm init \
--apiserver-advertise-address=192.168.1.89 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.25.0 \
--service-cidr=10.10.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--cri-socket /var/run/cri-dockerd.sock \
--ignore-preflight-errors=all

迁移配置

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

6.5 将work节点加入集群

kubeadm join 192.168.1.89:6443 --token dy9bff.3lksz1ppp208zapx \
--discovery-token-ca-cert-hash sha256:534b3bd0ad6e0faa20da83979987aaa852550fbc4a1db7d331d50bb29d04ac84 \
--cri-socket /var/run/cri-dockerd.sock

七、安装网络插件flannel

7.1 安装flannel

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

7.2 查看pod状态

  • 查看所有pod信息:kubectl get pods -A -o wide
[root@master ~]# kubectl get pod --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-flannel kube-flannel-ds-kt72s 1/1 Running 0 3h43m
kube-flannel kube-flannel-ds-ppl2v 1/1 Running 0 3h43m
kube-flannel kube-flannel-ds-tqj52 1/1 Running 0 3h43m
kube-system coredns-c676cc86f-hg4bx 1/1 Running 0 2d23h
kube-system coredns-c676cc86f-pp6gs 1/1 Running 0 2d23h
kube-system etcd-master 1/1 Running 3 (6h13m ago) 2d23h
kube-system kube-apiserver-master 1/1 Running 3 (6h13m ago) 2d23h
kube-system kube-controller-manager-master 1/1 Running 2 (6h13m ago) 2d23h
kube-system kube-flannel-ds-g4j29 1/1 Running 0 3h49m
kube-system kube-flannel-ds-sngvm 1/1 Running 0 3h49m
kube-system kube-flannel-ds-w8g45 1/1 Running 0 3h49m
kube-system kube-proxy-6pbqd 1/1 Running 1 (6h12m ago) 2d23h
kube-system kube-proxy-jzc4n 1/1 Running 3 (6h13m ago) 2d23h
kube-system kube-proxy-mvtwg 1/1 Running 1 (6h12m ago) 2d23h
kube-system kube-scheduler-master 1/1 Running 2 (6h13m ago) 2d23h

7.3 查看集群状态

[root@master ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
master Ready control-plane 2d23h v1.25.0
node1 Ready <none> 2d23h v1.25.0
node2 Ready <none> 2d23h v1.25.0

 

 

Centos 7 部署Kubernetes集群 (基于cri-dockerd)的更多相关文章

  1. CentOS上部署Kubernetes集群

    1.开始前系统环境准备 # 1.设置基本环境 yum install -y net-tools conntrack-tools wget vim ntpdate libseccomp libtool- ...

  2. 基于TLS证书手动部署kubernetes集群(下)

    一.master节点组件部署 承接上篇文章--基于TLS证书手动部署kubernetes集群(上),我们已经部署好了etcd集群.flannel网络以及每个节点的docker,接下来部署master节 ...

  3. (转)基于TLS证书手动部署kubernetes集群(下)

    转:https://www.cnblogs.com/wdliu/p/9152347.html 一.master节点组件部署 承接上篇文章--基于TLS证书手动部署kubernetes集群(上),我们已 ...

  4. 和我一步步部署 kubernetes 集群

    和我一步步部署 kubernetes 集群 本系列文档介绍使用二进制部署最新 kubernetes v1.6.1 集群的所有步骤,而不是使用 kubeadm 等自动化方式来部署集群: 在部署的过程中, ...

  5. 使用kubeadm部署Kubernetes集群

    一.环境架构与部署准备 1.集群节点架构与各节点所需安装的服务如下图: 2.安装环境与软件版本: Master: 所需软件:docker-ce 17.03.kubelet1.11.1.kubeadm1 ...

  6. 二进制部署 Kubernetes 集群

    二进制部署 Kubernetes 集群   提供的几种Kubernetes部署方式 minikube Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernet ...

  7. kubeadm部署Kubernetes集群

    Preface 通过kubeadm管理工具部署Kubernetes集群,相对离线包的二进制部署集群方式而言,更为简单与便捷.以下为个人学习总结: 两者区别在于前者部署方式使得大部分集群组件(Kube- ...

  8. 在CentOS7上部署Kubernetes集群

    在CentOS7上部署Kubernetes集群 文/FCBusquest 2015-12-22 18:36:00 简介 Kubernetes(k8s)是Google开源的大规模容器集群管理系统, 本文 ...

  9. Kubernetes探索学习001--Centos7.6使用kubeadm快速部署Kubernetes集群

    Centos7.6使用kubeadm快速部署kubernetes集群 为什么要使用kubeadm来部署kubernetes?因为kubeadm是kubernetes原生的部署工具,简单快捷方便,便于新 ...

  10. 使用Kubespray部署Kubernetes集群

    转载请标明出处: http://blog.csdn.net/forezp/article/details/82730382 本文出自方志朋的博客 Kubespray是Google开源的一个部署生产级别 ...

随机推荐

  1. Windows Server上部署IoTdb 集群

    本文是参考官方的 IoTDB 集群版(1.0.0)的安装及启动教程:https://iotdb.apache.org/zh/UserGuide/V1.0.x/Cluster/Cluster-Setup ...

  2. angular引入http服务创建服务注入

  3. 半个前端新手入门Electron的过程

    前言 先说几句废话,本人是一名 web 后端开发,主语言是 java,在学 Electron 之前,只会一点点 HTML和 JavaScript.本文讲的也是我学习 Electron 的过程,而非教程 ...

  4. 记一次CVE实战挖掘记录

    CVE实战挖掘记录 前一段时间在学习代码审计,然后为了学习就开始在github上面找开源的项目进行练手学习代码审计,这样就可以获取CVE编号. 0x01 cve编号获取流程 首先登录CVE官方网站,选 ...

  5. ASP.NET Core中间件之理解

    在ASP.NET Core中什么是中间件 中间件是ASP.NET Core的核心组件 中间件组成一个管道,整个ASP.NET Core的执行过程就是HTTP请求和响应按照中间件组装的顺序在中间件之间流 ...

  6. 使用Ajax跨域实现百度搜索功能

    上图 实现过程 1. 在百度上随便搜索一个内容 2. 在Network中找到一个地址右击 copy 然后 Copy link address 3. 将地址保存起来,取出中间有用的部分作为url属性的值 ...

  7. 面向对象程序设计(三):new&deleet什么是动态内存

    <C++ primer>中提到:在C++中,动态内存的管理是通过一对运算符来完成的: new 在内存池中为对象分配一块空间,并指向这个对象的指针,我们可以在这里对对象进行初始化: dele ...

  8. 学习Java Day15

    今天学习了自定义类

  9. 学习Java Day27

    今天在B站学习了什么是清单文件以及可执行的JAR文件,和不同版本下的JAR文件的差异

  10. 5.安装&卸载子应用 投票

    另起一个新的Django项目 djangoProject_poll_test ........ 把.tar.gz包下载到某个路径 D:\此电脑下分类\桌面\django-polls\dist\djan ...