1. 前言介绍

关于Kuebernetes的部署

常用于部署K8s集群的工具和部署方式

  • minikube
  • kubeadm
  • 二进制包

本文使用kubeadm部署方式

K8s集群的部署有多种方式,而使用Kubeadm是部署K8s集群是其一,通过使用kubeadm方式部署,相教于使用二进制方式部署K8s多个组件的方法,Kubeadm使用一条命令即可完成整个k8s集群的搭建。
官网:https://github.com/kubernetes/kubeadm

关于Kubernetes1.24以上版本的情况说明

Kubernetes1.24+版本,默认取消了对Docker的支持,因此需要通过在每个K8s节点安装Cri-dockerd这个中间层插件,K8s Api通过Cri-dockerd去和Docker容器进行交互,因为Cri-dockerd需要go语言环境的支持,所以每个节点还需要部署Go语言环境。

2. 环境准备

K8s集群配置级安装软件

主机名 IP地址 部署软件
matser01 192.168.30.80 GO、Cri-dockerd、Kubectl、Kubeadm、Kubelet
node01 192.168.30.81 GO、Cri-dockerd、Kubectl、Kubeadm、Kubelet
node02 192.168.30.82 GO、Cri-dockerd、Kubectl、Kubeadm、Kubelet

先决条件

  1. CPU不能少于2核
  2. 内存不能小于2G,建议至少4G

3. 安装部署

3.1. 基础环境配置

在matser01、node01、node02上操作,保证网络正常的情况下可以直接写入脚本运行或使用xshell复制黏贴直接刷入主机(建议科学上网)

#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
#关闭Selinux
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
#关闭交换分区(必须关闭)
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab#配置本地解析
cat >> /etc/hosts <<EOF
192.168.30.80 master01
192.168.30.81 node01
192.168.30.82 node02
EOF#调整内核参数
cat > /etc/sysctl.d/kubernetes.conf << EOF
#开启网桥模式,可将网桥的流量传递给iptables链
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
net.ipv4.ip_forward=1
EOF
sysctl --system  #使内核配置生效#安装使用软件
yum install -y yum-utils device-mapper-persistent-data lvm2 git unzip wget#配置yum源(阿里仓库)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo   #安装docker
yum -y install docker-ce#配置docker网络驱动和镜像加速
cat > /etc/docker/daemon.json <<EOF
{"registry-mirrors": ["https://6ijb8ubo.mirror.aliyuncs.com"],"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF#重启docker
systemctl daemon-reload
systemctl restart docker
systemctl enable docker#安装Go语言(有时候压缩包下载失败是因为没有科学上网,没有网络环境可以通过手动下载压缩包方式进行安装)
#切换到tmp目录
if [ ! -d "/tmp" ];then mkdir /tmp;fi;cd /tmp
wget https://go.dev/dl/go1.19.2.linux-amd64.tar.gz
rm -rf /usr/local/go && tar -C /usr/local -xzf go1.19.2.linux-amd64.tar.gzcat >> /etc/profile <<EOF
export PATH=$PATH:/usr/local/go/bin
EOFsource /etc/profile#安装Cri-Dockerd
git clone https://github.com/Mirantis/cri-dockerd.git
cd cri-dockerd
mkdir bin
go build -o bin/cri-dockerd
mkdir -p /usr/local/bin
install -o root -g root -m 0755 bin/cri-dockerd /usr/local/bin/cri-dockerd
cp -a packaging/systemd/* /etc/systemd/system
sed -i -e 's,/usr/bin/cri-dockerd,/usr/local/bin/cri-dockerd,' /etc/systemd/system/cri-docker.service#修改/etc/systemd/system/cri-docker.service配置里的ExecStart为
#ExecStart=/usr/local/bin/cri-dockerd --container-runtime-endpoint fd:// --network-plugin=cni --pod-infra-container-image=kubebiz/pause:3.8#以下使用变量赋值使用sed命令直接修改配置#定义config变量,将要追加的内容作为值传给变量
config="--network-plugin=cni --pod-infra-container-image=kubebiz/pause:3.8"#使用sed命令修改/etc/systemd/system/cri-docker.service文件
sed -i -r 's,(^E[a-z]+S[a-z]+=/[a-z].+/),\1 '"$config"',' /etc/systemd/system/cri-docker.service#取消config变量
unset config#重新加载启动cri-docker
systemctl daemon-reload
systemctl enable cri-docker.service
systemctl enable --now cri-docker.socket
systemctl start cri-docker#配置k8s 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
EOFyum install -y kubelet-1.25.0 kubeadm-1.25.0 kubectl-1.25.0
systemctl enable kubelet --now

3.2. master节点配置

#修改主机名
hostnamectl set-hostname master01#重新登录shell使主机名生效
exit#使用kubeadm部署K8s集群master节点
kubeadm init \--apiserver-advertise-address=192.168.30.80 \--image-repository registry.aliyuncs.com/google_containers \--kubernetes-version v1.25.0 \--service-cidr=10.125.0.0/16 \--pod-network-cidr=10.244.0.0/16 \--cri-socket /var/run/cri-dockerd.sock \#--apiserver-advertise-address的值为master节点的IP地址
#--image-repository registry.aliyuncs.com/google_containers基础镜像使用阿里云的镜像库
#--kubernetes-version v1.25.0 k8s版本为1.25
#--cri-socket /var/run/cri-dockerd.sock k8s CRI选择Cri-dockerd,必须mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

成功创建K8s集群结果返回如下,圈红部分为其他节点加入集群的命令,因为使用cri-dockerd,其他系欸但加入时需加上–cri-socket /var/run/cri-dockerd.sock,否则会报错

3.3. 查看master节点状态(在master上操作)

kubectl get cs

kubectl cluster-info

kubeadm join加入集群时需要master节点的IP地址和token和集群CA公钥的的hash值,若忘记可以使用下面的命令查看

#列出token
kubeadm token list | awk -F" " '{print $1}' |tail -n 1#获取CA公钥的的hash值
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^ .* //'

3.4. node01、node02节点配置(在node01和node02上操作)

#加入K8s集群
kubeadm join 192.168.30.80:6443 --token q9ev7q.348bo0ng5xttjact \--discovery-token-ca-cert-hash sha256:7e06b2fe75dcda3d4eba5b19f92b03fc0b7c04cb5b8c69234e36009722458a22 \
--cri-socket /var/run/cri-dockerd.sock

以上放回结果表示加入k8s集群成功

3.5. master节点安装网络套件(此处使用flannel)

节点刚加入集群时,因为master节点还未部署网络套件,所以所有节点的状态为Notready

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

等待一会后node就会进入ready状态

3.6. 解决不健康的节点问题(非必要,出现时执行)

如果 kubectl get cs 发现集群不健康,更改以下两个文件

vim /etc/kubernetes/manifests/kube-scheduler.yaml
vim /etc/kubernetes/manifests/kube-controller-manager.yaml# 找到port=0,把这一行注释掉
#- --port=0    systemctl restart kubelet

至此,K8s集群已经部署完毕,请开始畅快的游玩容器的世界吧~~~


参考文章及资料:
https://github.com/kubernetes/kubeadm
https://github.com/Mirantis/cri-dockerd
https://www.orchome.com/16591
https://www.orchome.com/16593
https://blog.51cto.com/u_15533361/5520096

基于Cri-dockerd使用Kubeadm部署Kubernetes1.25集群相关推荐

  1. 基于Redis6.2.6版本部署Redis Cluster集群

    基于Redis6.2.6版本部署Redis Cluster集群 文章目录 基于Redis6.2.6版本部署Redis Cluster集群 1.Redis6.2.6简介以及环境规划 2.二进制安装Red ...

  2. Kubernetes系列(一)基于CentOS8部署Kubernetes1.19集群

    1.系统环境 系统版本:CentOS8.1.1911 Kubernetes版本:1.19.1 Docker版本:19.03.1 节点信息: 10.24.10.3 master 10.24.10.6 n ...

  3. Kubernetes — 使用 kubeadm 部署高可用集群

    目录 文章目录 目录 Kubernetes 在生产环境中架构 高可用集群部署拓扑 1.网络代理配置 2.Load Balancer 环境准备 3.Kubernetes Cluster 环境准备 安装 ...

  4. 使用kubeadm部署一个K8s集群

    1.前言 kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具. 这个工具能通过两条指令完成一个kubernetes集群的部署: 2. 安装要求 一台或多台机器,操作系统 Ce ...

  5. Kubernetes — 在 OpenStack 上使用 kubeadm 部署高可用集群

    目录 文章目录 目录 高可用集群部署拓扑 高可用集群网络拓扑 网络代理配置 Load Balancer 环境准备 Kubernetes Cluster 环境准备 安装 Container Runtim ...

  6. 【aliyun ECS】CentOS 7/8使用kubeadm部署kubernets(k8s)集群【附阿里云实验室】内有福利

    好消息好消息,阿里云全线降价,大量服务提供免费甚至永久的试用,赶紧来薅大厂羊毛吧,坐电梯即可直达! 送福利!阿里云热门产品免费领(含ECS),点击进入:https://click.aliyun.com ...

  7. s19.基于 Kubernetes v1.25 (kubeadm) 和 Docker 部署高可用集群(一)

    基于 Kubernetes v1.25 和 Docker 部署高可用集群 主要内容 Kubernetes 集群架构组成 容器运行时 CRI Kubernetes v1.25 新特性 Kubernete ...

  8. 基于Kubeadm部署Kubernetes1.13.3 HA 高可用集群

    Table of Contents 目录 基于Kubeadm部署Kubernetes1.13.3 HA 高可用集群 01. 部署目的 1.1 Kubernetes的特性 1.2 贴微服务,开发环境快速 ...

  9. 【云原生 | Kubernetes 实战】01、K8s-v1.25集群搭建和部署基于网页的 K8s 用户界面 Dashboard

    目录 一.K8s 概述 可以查看官方文档:概述 | Kubernetes 组件交互逻辑: 二.kubeadm 安装 K8s-v1.25高可用集群 k8s 环境规划: 1.初始化环境 2.安装 Dock ...

最新文章

  1. python学习笔记-Day17(jinja2)
  2. 字节跳动推荐平台技术公开,项亮:底层架构有时比上层算法更重要
  3. 前端小纠结--集成gitflow和standard-version使用
  4. binder-JAVA层机制
  5. 安装好的苹果系统部分截图
  6. 我服了!一些比较恶心的代码片段
  7. nyoj-222 整数中的1
  8. 程序员,为什么给你50万年薪,你还要搞死我公司?
  9. 等价关系和等价类_确定Java等价性的新时代?
  10. python_内置字符串
  11. 前端每日实战:47# 视频演示如何用纯 CSS 创作一个蝴蝶标本展示框
  12. [培训-无线通信基础-6]:信道编码(分组码、卷积吗、Polar码、LDPC码、Turbo码)
  13. JS API: Fullscreen 全屏 API
  14. 【VBA】Str与CStr辨析
  15. 数据库原理与应用~第三版课后习题答案(何玉洁 编著)
  16. 电脑自带office查看攻略
  17. 西妥昔单抗丨艾美捷西妥昔单抗Cetuximab方案
  18. b站黑马Vue2后台管理项目笔记——(3)用户列表
  19. js如何实现侧边广告_如何用稳定器轻松实现低成本的商业级广告片制作?
  20. Docker(五)进阶:Docker卷(volumes)

热门文章

  1. 读《NFCMF: Noise Filtering and CrossModal Fusion for Multimodal Sentiment Analysis》
  2. 标注图像 创建cnn网络_如何在网络上创建图
  3. 云服务器安装配置Nodejs(以阿里云为例)
  4. JMETER计数器用法
  5. 【STC89C52】学习51单片机的必备电子电路知识基础
  6. Android 连接蓝牙耳机后视频通话无声音问题
  7. 运用雅可比(Jacobi)和高斯-赛德尔(GS公式)求解方程组
  8. 计算机辅助教学系统状况,计算机辅助教学系统组成.pptx
  9. html中section与div,HTML5中div、section、article的区别
  10. Yocto系列讲解[实战篇]85 - 制作ubi镜像和自动挂载ubifs文件系统