继上篇通过vagrant与virtualBox实现虚拟机的安装。笔者已经将原有的vmware版本的虚拟机卸载掉了。这个场景下,需要重新安装k8s 相关组件。由于之前写的一篇文章本身也没有截图。只有命令。所以趁着现在。写一篇,完整版带截图的步骤。现在行业这么卷。离职了让我能好好的写点东西。
描述:此篇文章只有具体的步骤,组件内部核心控件。以及具体使用方式。并不包含在这篇内容中。如果有需要。小伙伴儿们可以提出来。作为持续的内容更新也是不错的。好了不喜欢看唠叨的同学们。咱们直接开始。上述纯属无聊的废话。
版本:V1.28.9 版本
部署方式:Kubeadm 【单master 多node部署】
下方 master节点 和node节点 都要进行配置 。
(1) 升级linux内核,由于低版本linux内核有可能引发一些不确定因素 所以笔者在此升级了下linux内核
#查询当前linux内核
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
# 步骤依次执行即可
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
yum -y install https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm
yum --enablerepo="elrepo-kernel" -y install kernel-lt.x86_64
grub2-set-default 0
grub2-mkconfig -o /boot/grub2/grub.cfg
#重新启动
reboot
#启动后 重新查询linux内核是否变更
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
(2)关闭防火墙状态。
#停止当前防火墙
systemctl stop firewalld
# 重启后也关闭防火墙 避免自动重启
systemctl disable firewalld
#检查当前防火墙状态
systemctl status firewalld
(3)关闭掉swap分区
#关闭当前swap分区
sed -i 's/.*swap.*/#&/' /etc/fstab
swapoff -a
(4)关闭掉 selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
(5)添加host 请修改成自己的maste节点IP和workNode节点IP
echo "192.168.18.219 master \
192.168.18.220 node01
192.168.18.221 node02" >> /etc/hosts
(6)添加hostname 同时让hostname 生效
#替换成自己的主机名称 也可以按照上述内容 master node01 node02 配置
hostnamectl set-hostname 主机名称
# 查询当前hostname
hostname
#使hstname生效
systemctl restart NetworkManager
(7)安装时间同步插件 保证三台机器时钟都是同步的
yum install chrony -y
systemctl start chronyd && systemctl enable chronyd && chronyc sources
date
(8)添加路由转发
# 内核路由转发 以及网桥过滤
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward=1
vm.swappiness=0
EOF
(9)使路由转发生效
sysctl --system
(10) 安装ipset
# 安装ipset
yum -y install ipset ipvsadm
(11) 加载ipvs
# 加载
cat > /etc/sysconfig/modules/ipvs.modules << EOF
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF
(12) 给ipvs 赋予权限
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack
(13)安装docker 请直接按照步骤来
#如果 之前安装过docker 可以按照此步骤先进行卸载操作 如果首次安装 不需要第一步
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
#安装 yum-utils
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
#上述如果地址添加失败可以通过下述地址下载
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
#查看当前docker 版本
docker -v
#开机自启动 docker
systemctl enable docker.service
systemctl enable containerd.service
#启动 docker
systemctl start docker && systemctl status docker
(14) 添加docker 镜像地址
cat > /etc/docker/daemon.json << EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn",
"https://dockerhub.azk8s.cn",
"http://hub-mirror.c.163.com"
]
}
EOF
(15) 安装wget 为了安装 cri-docker cri-docker 因为k8s新版本是基于container.io实现的 所以需要
下载 cri-docker ,请注意 下述命令中的 $MAINPID 执行过程中有可能会丢失。 请手动 补充到位置
#安装wget 为了下载cri-docker 由于k8s 新版本是基于 container.io 所以可以通过cri-docker 适#配
yum install wget
#下载 cri-docker
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.8/cri-dockerd-0.3.8.amd64.tgz
#解压当前 tar包 默认下载当前目录
tar xf cri-dockerd-0.3.8.amd64.tgz
#将解压内容 移动到 /usr/bin
mv cri-dockerd/cri-dockerd /usr/bin/
#创建cri-docker.service 文件
cat > /usr/lib/systemd/system/cri-docker.service<<EOF
[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 --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9 --container-runtime-endpoint fd://
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
#上述中的 $MAINPID 有可能会丢失 如果丢失 请执行如下代码 添加上 $MAINPID
vim /usr/lib/systemd/system/cri-docker.service
(16) 添加cri-docker.socket
cat > /usr/lib/systemd/system/cri-docker.socket<<EOF
[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
(17) 修改了 systemd 的相关配置 所以需要让其生效
# 对cri-docker 的配置让其生效
systemctl daemon-reload
#开机自启动 启动cri-docker 同时查看状态
systemctl enable cri-docker && systemctl start cri-docker && systemctl status cri-docker
(18) 添加k8s镜像地址
# 添加k8s镜像源地址
cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/repodata/repomd.xml.key
EOF
(19) 前期准备工作已经做好 那么 安装 kubeadm kubelet kubectl 同时启动kubelet 设置开机自启动 同时查看状态 现在的kubelet还是启动失败的 请不要慌张
#安装 kuebadm kubelet kubectl
yum install -y kubelet kubeadm kubectl
#启动kubelet 并设置开机自启动
systemctl enable kubelet && systemctl start kubelet && systemctl status kubelet
(20) 配置cgroup 和docker 保持一致
# 配置 cgroup 驱动与docker一致
cp /etc/sysconfig/kubelet{,.bak}
cat > /etc/sysconfig/kubelet <<EOF
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
EOF
#安装自动补全 工具
yum install -y bash-completion
(21) 用户bash目录 添加kubectl 变量
source /usr/share/bash-completion/bash_completion
echo "source <(kubectl completion bash)" >> ~/.bashrc
source ~/.bashrc
(22) 查看 kubeadm 镜像
查看镜像仓库是否有相关镜像
kubeadm config images list --image-repository registry.aliyuncs.com/google_containers
(23)拉取相关镜像
kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers \
--cri-socket=unix:///var/run/cri-dockerd.sock
上述为 master节点 和node节点 都要进行配置 下述 将分开说明 master 和 node 的配置
下方配置请注意 一部分是master 需要配置的 一部分是node需要配置的
Master配置
# master节点运行 启动master节点相关组件及容器【master】
kubeadm init \
--apiserver-advertise-address 192.168.31.219 \
--kubernetes-version v1.28.11 \
--pod-network-cidr=10.244.0.0/16 \
--image-repository registry.aliyuncs.com/google_containers \
--cri-socket=unix:///var/run/cri-dockerd.sock \
--ignore-preflight-errors=all
#上述配置中的
api-server-address 代表的是主节点的ip地址
kubernetes-version 代表的是k8s组件版本
pod-network-cidr 代表内部的区分流量
image-repository 镜像仓库地址
cri-socket 指定cri-docker的 地址
(master)上述执行成功后 会提示执行相关命令
# 创建kubeconfig master启动完成后也会提示此命令【master】
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
(master) 创建自有证书 生成内容 在node节点是有用的 请一定要记住 下方已经标注出来了,一个是token 一个是生成的 有效的sha256的值
# 创建相关kubeadm token 【master】生成的值 在node节点中是需要的请记住
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
# 使用我们自己生成的证书 在子节点进行join时需要token 以及sha【masert】
kubeadm token create --ttl 0 --print-join-command
# 查看是否已经创建成功证书 在node节点join要用到 【master】
master 下载网络插件 还记着前边笔者说过的 kubelet还没起来的问题吗 ,当把cin插件下载完成后 kubelet就会恢复正常
修改相关配置 calico.yml文件中相关配置CALICO_IPV4POOL_CIDR 改成admin init中 --pod-network-cidr 参数相同,但是由于现在的dokerhub无法下载镜像,通过阿里云下载相关镜像还无法找到对应的版本的网络代理插件。那么笔者喜欢让大家白嫖。压缩包会同步出来。这样你们就不用科学上网去自己寻找了。如果按照笔者的配置就不需要修改上述的CALICO_IPV4POOL_CIDR。
请将所有tar 包 执行 docker load 添加到master 镜像中 然后 通过kubectl 执行
wget https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yam
# 如果下载失败 请把使用笔者给的安装包的内容
kubectl apply -f calico.yamll
Node节点
将node节点添加到 master中去
#在node节点执行 加入到主节点
kubeadm join 192.168.31.219:6443 --token juw32i.1cb4jrcr4fm8scvy --discovery-token-ca-cert-hash sha256:5be9defe9be83e5b50b51490009b8bb8a22a7bf9b9d71c6176cca81581d98fba --cri-socket=unix:///var/run/cri-dockerd.sock
#解释
token 是在主节点生成的 上述标黄的内容
sha256: 自己生成的值 也在上述标黄的内容中
最终 可以在master 查看 节点状态 如果显示ready 那么就是正常启动的