首页 > 其他分享 >基于Cri-dockerd使用Kubeadm部署Kubernetes1.25集群

基于Cri-dockerd使用Kubeadm部署Kubernetes1.25集群

时间:2022-10-30 17:35:08浏览次数:88  
标签:-- etc 集群 dockerd Kubernetes1.25 Kubeadm K8s 节点

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.gz

cat >> /etc/profile <<EOF
export PATH=$PATH:/usr/local/go/bin
EOF

source /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
EOF

yum 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

image.png

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

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

kubectl get cs

image.png

kubectl cluster-info

image.png

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

image.png

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

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

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

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

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

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

标签:--,etc,集群,dockerd,Kubernetes1.25,Kubeadm,K8s,节点
From: https://blog.51cto.com/u_15538119/5807537

相关文章

  • Kubernetes容器编排技术---Kubernetes基于kubeadm安装与配置(新)
      环境准备1、关闭防火墙和selinux2、配置docker和kubernetes镜像源docker源#step1:安装必要的一些系统工具sudoyuminstall-yyum-utilsdevi......
  • k8s--使用 kubeadm 搭建 k8s 1.25.3 版本
    环境准备#节点ip172.25.131.227k8s-master-01#设置主机名~]#hostnamectlset-hostnamek8s-master-01#设置hosts解析echo"172.25.131.227k8s-master-......
  • dockerdile创建镜像
    在执行命令dockerbuild-t='jkd1.8'.报错,可以看到是在配置文件的RUNmkdir处遇到没有这个文件或目录因为这个配置文件没有自动创建我们跑的这个目录,在mkdir后面加上-p(-......
  • kubeadmin安装k8s
    2、主机准备2.1、主机配置要求操作系统centos7内存>=2GB、CPU>=2、硬盘>=100GB内核版本>4.4机器网络互通可以访问外网或者提前下载镜像禁用swap软件版本......
  • 通过kubeadm搭建k8s集群
    ======通过kubeadm搭建k8s集群======1、版本统一Docker18.09.0---kubeadm-1.14.0-0kubelet-1.14.0-0kubectl-1.14.0-0---k8s.gcr.io/kube-......
  • 05. Kubernetes - Kubeadm 节点 / Token 管理
    删除节点有些时候某些机器出现问题可能需要将其下掉,或者在初始化节点的时候信息初始化的有问题需要重新加入,这时候就涉及到删除节点的问题。具体删除办法如下,Master节点......
  • 【 云原生 | kubernetes 】- kubeadm部署k8s集群(超详细)
    Kubeadm是kubernetes社区为了方便普通用户学习k8s,发起的一个简单上手的部署工具。不用把大量时间花费在搭建集群上面。只需通过两条命令就可以部署一个k8s集群#创建一......
  • 04. Kubernetes - Kubeadm 证书问题
    证书有效期通过kubeadm安装的Kubernetes集群的证书有效期为1年,可以使用相关命令查看证书的有效期:kubeadmcertscheck-expiration如图所示:可以看到除了ca证......
  • 第18章: kubeadm方式部署K8S1.20单Master集群
      kubeadm方式部署K8S1.20单Master集群     作者刘畅时间2021-08-24   目录​​1 架构说明 1​​​​1.1生产环境可部署Kubernetes集群的两种方式 1​​​​1.......
  • 第二章 kubeadm安装单master多node篇
    一.节点规划HostnameOuter-IPInner-IPk8s-master-00110.0.0.100172.16.1.113K8s-node-00110.0.0.101172.16.1.114K8s-node-00210.0.0.102172.16.1.......