k8s离线部署

K8s离线部署

以下内容仅作学习交流,如有侵权,联系删除,

lhw199911@outlook.com

参考文档在绑定资源里面

环境

目标

K8s离线部署

步骤

准备虚拟机、finalshell连接虚拟机

部署docker

详情见《后端项目离线打包部署_centOS8_docker》

安装cri_dockerd

1、安装cri_dockerd

rpm -ivh cri-dockerd-0.3.9-3.el8.x86_64.rpm

  1. 重载系统守护进程→设置cri-dockerd自启动→启动cri-dockerd

# 重载系统守护进程

sudo systemctl daemon-reload

# 设置cri-dockerd自启动

sudo systemctl enable cri-docker.socket cri-docker

# 启动cri-dockerd

sudo systemctl start cri-docker.socket cri-docker

sudo systemctl status cri-docker.socket

sudo systemctl status cri-docker

问题:启动cri-docker失败

措施:

方法一:systemctl restart docker # 重启docker

方法二:卸载docker重新安装,重新执行以上步骤

*安装Kubernetes

安装kubectl

1、安装kubectl

sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

2、检测是否安装完成

kubectl version --client

安装kubeadm

  1. 开放端口或关闭防火墙(用于确保安装过程顺利)

开放端口(云服务器)

# 开启6443端口

sudo firewall-cmd --zone=public --add-port=6443/tcp --permanent

# 重新加载防火墙

sudo firewall-cmd --reload

# 查看所有开放的端口

sudo firewall-cmd --zone=public --list-ports

或关闭防火墙(虚拟机)

# 关闭防火墙

sudo systemctl stop firewalld

# 关闭防火墙自启动

sudo systemctl disable firewalld

  1. 禁用SELinux(确保容器能够访问系统资源)

sudo setenforce 0

sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

5、安装 kubeadm、kubelet 和 kubectl

相关离线安装包一下载rpm各式,存在于3_yum_package下,使用命令安装目录下所有rpm安装包

cd 3_yum_package && rpm -ivh *.rpm

6、设置kubelet自启动

sudo systemctl enable --now kubelet

*部署k8s集群

以上步骤完成后,具备以下环境

·两台ip不相同的服务器或虚拟机,能够互相通信,保持局域网状态,ip设为192.168.**.34和192.168.**.35

·两台server上都安装了容器运行时(Docker+cri_dockerd),已经安装kubernetes组件kubectl、kubeadm和kubelet。

环境准备

7、关闭swap分区,这里分为临时关闭和永久关闭,虚拟机环境推荐永久关闭,因为会经常开关机,反之云环境推荐临时关闭。

# 临时关闭swap分区

swapoff -a

# 永久关闭swap分区,注释掉fstab中包含swap的这一行即可

vi /etc/fstab

# /dev/mapper/centos-swap swap swap defaults 0 0

#重启使其生效,重启可能导致cri-dockerd状态发生变化,实际部署中我没有选择重启,原因猜测是由于版本或配置没配好,可以通过重装dockercri-dockerd再启动cri-dockerd使cri-dockerd状态正常

reboot

  1. 安装runc作为k8s运行环境

# 安装runc

sudo install -m 755 runc.amd64 /usr/local/bin/runc

# 检查是否安装成功

runc -v

9Dockercri-dockerd设置国内镜像加速(*由于本次文件夹中以下要用到的软件包名称带有镜像地址,即使是局域网也建议配置相应镜像加速,防止安装完成后kubectl要求联网拉取软件包而忽略本地镜像*

sudo tee /etc/docker/daemon.json <<-'EOF'

{

  "registry-mirrors": ["https://tsvqojsz.mirror.aliyuncs.com"]

}

EOF

# 找到第10行

vi /usr/lib/systemd/system/cri-docker.service

# 修改为ExecStart=/usr/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9

# 重启Docker组件

systemctl daemon-reload && systemctl restart docker cri-docker.socket cri-docker

# 检查Docker组件状态

systemctl status docker cir-docker.socket cri-docker

10、检查hostname以及hosts

# 主节点

# hostname为k8s-master

vi /etc/hostname

# 添加域名映射

echo "192.168.**.35 k8s-slave01">> /etc/hosts

# 其他node

# hostname为k8s-slave01

vi /etc/hostname

# 添加域名映射

echo "192.168.**.34 k8s-master" >> /etc/hosts

11、转发IPv4并让iptables看到桥接流

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf

overlay

br_netfilter

EOF

sudo modprobe overlay

sudo modprobe br_netfilter

# 设置所需的 sysctl 参数,参数在重新启动后保持不变

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-iptables  = 1

net.bridge.bridge-nf-call-ip6tables = 1

net.ipv4.ip_forward                   = 1

EOF

# 应用 sysctl 参数而不重新启动

sudo sysctl --system

lsmod | grep br_netfilter

lsmod | grep overlay

sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward

# 如果init时仍提示iptables错误请执行

echo "1">/proc/sys/net/bridge/bridge-nf-call-iptables

echo "1">/proc/sys/net/ipv4/ip_forward

初始化控制平面节点/master

  1. 初始化主节点(仅在master上执行)

在初始化之前需要通过kubeadm config images获得初始化需要的docker镜像:

安装镜像docker load -i **.tar

相关镜像文件存在5_kubeadm-images中。

执行初始化:

kubeadm init --node-name=k8s-master --image-repository=registry.aliyuncs.com/google_containers --cri-socket=unix:///var/run/cri-dockerd.sock --apiserver-advertise-address=1.92.107.249 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12

--image-repository=registry.aliyuncs.com/google_containers # 将下载容器镜像源替换为阿里云,否则因为网络原因会导致镜像拉不下来,一定会执行不成功。

--cri-socket=unix:///var/run/cri-dockerd.sock # 这是指定容器运行时,因为containerd也是Docker的组件之一,下载Docker会一并将containerd下载下来,在执行初始化时当Kubernetes检测到有多个容器运行时环境,就必须要手动选择一个。这里也可以看出containerd实际上比Docker更轻量得多。

--apiserver-advertise-address=192.168.56.50 # API server设置广播地址,这里选择本机的ipv4地址,这里不希望API SERVER设置在其他node上的话就不要改为其他地址。

--pod-network-cidr=10.244.0.0/16 # 指明 pod 网络可以使用的 IP 地址段,暂时不清楚的可以先不管就用这个值。

--service-cidr=10.96.0.0/12 # 为服务的虚拟 IP 地址另外指定 IP 地址段,暂时不清楚的可以先不管就用这个值。

问题:cordns:v1.10.1检查不存在,实际上cordns:v1.10.1已存在,但是是cordns:1.10.1

措施:修改cordnstag

docker tag registry.aliyuncs.com/google_containers/coredns:1.10.1 registry.aliyuncs.com/google_containers/coredns:v1.10.1

重新执行初始化命令

记录kubeadm join下面的信息,node join时需要,以上示例的相关信息是:

kubeadm join 192.168.51.34:6443 --token 1qtv3k.p8tfvdcds6x5ichf \

        --discovery-token-ca-cert-hash sha256:90afb5751086aabf7ac90d9e77a946eb768d47ffaaead62243264641954a5e26

如果忘记了可以使用kubeadm token list查询,该token存在24h,重新创建kubeadm token create --print-join-command,删除使用kubeadm token delete tokenid

# 非root用户请执行

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

# root用户直接执行

# 临时生效,重启后失效,不推荐。

export KUBECONFIG=/etc/kubernetes/admin.conf

# 永久生效,执行kubeadm reset后再次init也无需再次执行这条命令

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >>  ~/.bash_profile

# 执行永久生效命令之后需要source一下使其生效

source ~/.bash_profile

# 检测配置是否生效

echo $KUBECONFIG

/etc/kubernetes/admin.conf

13、安装配置网络插件

这里使用flannel,将kube-flannel.yml文件下载并上传到server上。

将相关镜像上传到server上安装。kube-flannel.yml和镜像文件存在于6_kube-flannel中。

查询网卡

ifconfig

kube-flannel.yml默认会找enp1s0网卡,本次示例中34的网卡为enp1s0,无需修改,35的网卡为enp4s0。

如果需要修改:修改35的kube-flannel.yml,添加--iface=enp0s3进行指定。参数位置如下:

container:

   ......

   command

   -  /opt/bin/flanneld

   arg:

   - --ip-masq

   - --kube-subnet-mgr

   - --iface=enp4s0

参考文件夹中找到“Kubernetes最新版2023.07v1.27.4安装和集群搭建保姆级教程 - 知乎.mhtml”。

# 为Kubernetes配置flannel网络插件

kubectl apply -f /data/k8s/6_kube-flannel/kube-flannel.yml

cat /run/flannel/subnet.env

# 没有这个文件或文件夹的话则需要手动创建内容同下

FLANNEL_NETWORK=10.244.0.0/16

FLANNEL_SUBNET=10.244.0.1/24

FLANNEL_MTU=1450

FLANNEL_IPMASQ=true

Node节点加入Master

14、Node节点加入Master

14.1、将主节点机器中的/etc/kubernetes/admin.conf拷贝到从节点机器中

scp /etc/kubernetes/admin.conf 192.168.56.51:/etc/kubernetes/

# 不要忘记将admin.conf加入环境变量,这里直接使用永久生效。

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile

source ~/.bash_profile

14.2、执行join指令

例如:

kubeadm join 192.168.51.34:6443 --token by7t4x.da3f98dzrvjylykz --discovery-token-ca-cert-hash sha256:90afb5751086aabf7ac90d9e77a946eb768d47ffaaead62243264641954a5e26 --cri-socket unix:///var/run/cri-dockerd.sock

14.3、执行kubectl get nodes

k8s集群部署成功!!!

问题

问题一

kubectl get nodes

措施:检查swap是否关闭;检查防火墙是否开启6443端口

关闭swap

临时关闭防火墙

成功

问题二

kubectl get nodes

向集群添加k8s节点后查看该节点状态为NotReady

措施:

systemctl restart kubelet.service

systemctl restart docker.service

重启kubeletdocker

问题三

kubeadm join 192.168.51.34:6443 --token l2qlvh.and3fnjmzecueu9h --discovery-token-ca-cert-hash sha256:90afb5751086aabf7ac90d9e77a946eb768d47ffaaead62243264641954a5e26 --cri-socket unix:///var/run/cri-dockerd.sock

将子节点加入k8s集群中时出现初始化超时的情况

措施:

kubeadm reset -f  --cri-socket unix:///var/run/cri-dockerd.sock

成功

  • 23
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值