Centos 7 部署Kubernetes集群 (基于cri-dockerd)
前言
基础描述
从 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 |
二、安装检查
注:在三台机器上执行------------------------开始----------------------------
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
官方信息
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)的更多相关文章
- CentOS上部署Kubernetes集群
1.开始前系统环境准备 # 1.设置基本环境 yum install -y net-tools conntrack-tools wget vim ntpdate libseccomp libtool- ...
- 基于TLS证书手动部署kubernetes集群(下)
一.master节点组件部署 承接上篇文章--基于TLS证书手动部署kubernetes集群(上),我们已经部署好了etcd集群.flannel网络以及每个节点的docker,接下来部署master节 ...
- (转)基于TLS证书手动部署kubernetes集群(下)
转:https://www.cnblogs.com/wdliu/p/9152347.html 一.master节点组件部署 承接上篇文章--基于TLS证书手动部署kubernetes集群(上),我们已 ...
- 和我一步步部署 kubernetes 集群
和我一步步部署 kubernetes 集群 本系列文档介绍使用二进制部署最新 kubernetes v1.6.1 集群的所有步骤,而不是使用 kubeadm 等自动化方式来部署集群: 在部署的过程中, ...
- 使用kubeadm部署Kubernetes集群
一.环境架构与部署准备 1.集群节点架构与各节点所需安装的服务如下图: 2.安装环境与软件版本: Master: 所需软件:docker-ce 17.03.kubelet1.11.1.kubeadm1 ...
- 二进制部署 Kubernetes 集群
二进制部署 Kubernetes 集群 提供的几种Kubernetes部署方式 minikube Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernet ...
- kubeadm部署Kubernetes集群
Preface 通过kubeadm管理工具部署Kubernetes集群,相对离线包的二进制部署集群方式而言,更为简单与便捷.以下为个人学习总结: 两者区别在于前者部署方式使得大部分集群组件(Kube- ...
- 在CentOS7上部署Kubernetes集群
在CentOS7上部署Kubernetes集群 文/FCBusquest 2015-12-22 18:36:00 简介 Kubernetes(k8s)是Google开源的大规模容器集群管理系统, 本文 ...
- Kubernetes探索学习001--Centos7.6使用kubeadm快速部署Kubernetes集群
Centos7.6使用kubeadm快速部署kubernetes集群 为什么要使用kubeadm来部署kubernetes?因为kubeadm是kubernetes原生的部署工具,简单快捷方便,便于新 ...
- 使用Kubespray部署Kubernetes集群
转载请标明出处: http://blog.csdn.net/forezp/article/details/82730382 本文出自方志朋的博客 Kubespray是Google开源的一个部署生产级别 ...
随机推荐
- 通过Sqoop来传输mysql/oracle/vertica数据至Hive
1.环境: CDH SQOOP2 2.操作步骤 1.准备表与主键 表名:test.test_log 主键:sys_log_id 建表语句 CREATE TABLE hbase_test_test_lo ...
- 多变量两两相互关系联合分布图的Python绘制
本文介绍基于Python中seaborn模块,实现联合分布图绘制的方法. 联合分布(Joint Distribution)图是一种查看两个或两个以上变量之间两两相互关系的可视化图,在数据分析操 ...
- Python绘制神经网络模型图
本文介绍基于Python语言,对神经网络模型的结构进行可视化绘图的方法. 最近需要进行神经网络结构模型的可视化绘图工作.查阅多种方法后,看到很多方法都比较麻烦,例如单纯利用graphviz模块 ...
- Hadoop 及Spark 分布式HA运行环境搭建
作者:京东物流 秦彪 工欲善其事必先利其器,在深入学习大数据相关技术之前,先手动从0到1搭建一个属于自己的本地Hadoop和Spark运行环境,对于继续研究大数据生态圈各类技术具有重要意义.本文旨在站 ...
- 【雅礼联考DAY02】Magic
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> us ...
- CF1367E Necklace Assembly
题目传送门 思路 提供一种比现有的两篇题解都简单的方法. 我们枚举答案,发现最终的答案数组一定是由多个完全相同的块组成的,并且块长必定是 \(k\) 的因数. 然后我们考虑枚举答案 \(i\),那么此 ...
- 题解 [SCOI2005]王室联邦
之前树分块也只是听说,今天亲手学了一下(?)( 首先你会发现这个 \(B\) 和 \(3B\) 的约束就很迷(我也不知道为什么搞这种奇怪的约束(悲)),学了才知道... 所以这题的分块方法好像叫&qu ...
- SpringBoot多数据源以及事务处理
背景 在高并发的项目中,单数据库已无法承载大数据量的访问,因此需要使用多个数据库进行对数据的读写分离,此外就是在微服化的今天,我们在项目中可能采用各种不同存储,因此也需要连接不同的数据库,居于这样的背 ...
- 快速删除 node_modules
node_modules 文件夹很大,不推荐右键通过回收站删除,通过 rimraf 来删除速度很快: # 安装 rimraf npm i -g rimraf # 删除 node_modules rim ...
- Django中获取用户IP方法
Django中通过request.META可以来获取用户的IP. request.META 是一个Python字典,包含了所有本次HTTP请求的Header信息,比如用户IP地址和用户Agent(通常 ...