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

1. 前言介绍关于Kuebernetes的部署

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

minikubekubeadm二进制包

本文使用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地址部署软件

matser01192.168.30.80GO、Cri-dockerd、Kubectl、Kubeadm、Kubeletnode01192.168.30.81GO、Cri-dockerd、Kubectl、Kubeadm、Kubeletnode02192.168.30.82GO、Cri-dockerd、Kubectl、Kubeadm、Kubelet

先决条件

CPU不能少于2核内存不能小于2G,建议至少4G3. 安装部署3.1. 基础环境配置

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

#关闭防火墙systemctl stop firewalldsystemctl disable firewalld#关闭Selinuxsetenforce 0sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/’ /etc/selinux/config#关闭交换分区(必须关闭)swapoff -ased -ri ‘s/.*swap.*/#&/’ /etc/fstab#配置本地解析cat >> /etc/hosts <<EOF192.168.30.80 master01192.168.30.81 node01192.168.30.82 node02EOF#调整内核参数cat > /etc/sysctl.d/kubernetes.conf << EOF#开启网桥模式,可将网桥的流量传递给iptables链net.bridge.bridge-nf-call-ip6tables=1net.bridge.bridge-nf-call-iptables=1net.ipv4.ip_forward=1EOFsysctl –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#安装dockeryum -y install docker-ce#配置docker网络驱动和镜像加速cat > /etc/docker/daemon.json <<EOF{ "registry-mirrors": ["https://6ijb8ubo.mirror.aliyuncs.com"], "exec-opts": ["native.cgroupdriver=systemd"]}EOF#重启dockersystemctl daemon-reloadsystemctl restart dockersystemctl enable docker#安装Go语言(有时候压缩包下载失败是因为没有科学上网,没有网络环境可以通过手动下载压缩包方式进行安装)#切换到tmp目录if [ ! -d "/tmp" ];then mkdir /tmp;fi;cd /tmpwget https://go.dev/dl/go1.19.2.linux-amd64.tar.gzrm -rf /usr/local/go && tar -C /usr/local -xzf go1.19.2.linux-amd64.tar.gzcat >> /etc/profile <<EOFexport PATH=$PATH:/usr/local/go/binEOFsource /etc/profile#安装Cri-Dockerdgit clone https://github.com/Mirantis/cri-dockerd.gitcd cri-dockerdmkdir bingo build -o bin/cri-dockerdmkdir -p /usr/local/bininstall -o root -g root -m 0755 bin/cri-dockerd /usr/local/bin/cri-dockerdcp -a packaging/systemd/* /etc/systemd/systemsed -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-dockersystemctl daemon-reloadsystemctl enable cri-docker.servicesystemctl enable –now cri-docker.socketsystemctl start cri-docker#配置k8s yum源cat > /etc/yum.repos.d/kubernetes.repo << EOF[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64enabled=1gpgcheck=0repo_gpgcheck=0gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpghttps://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgEOFyum install -y kubelet-1.25.0 kubeadm-1.25.0 kubectl-1.25.0systemctl enable kubelet –now3.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/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo 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值,若忘记可以使用下面的命令查看

#列出tokenkubeadm 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主机名(在node01上操作)hostnamectl set-hostname node01#退出shell重新登录使主机名生效exit修改node02主机名(在node02上操作)hostnamectl set-hostname node02#退出shell重新登录使主机名生效exit#加入K8s集群(在node01和node02上操作)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=0systemctl restart kubelet

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


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

轻轻的风,吹开你紧锁的眉头,

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

相关文章:

你感兴趣的文章:

标签云: