【Linux】Ubuntu部署K8S集群-图文并茂(超详细)

Ubuntu部署K8S集群

  • 1. 模版机系统环境准备
    • 1.1 安装Ubuntu
    • 1.2 设置静态IP地址
  • 2. 主机准备
    • 2.1 使用模板机创建主机
    • 2.2 主机配置
      • 2.2.1 修改静态IP
      • 2.2.2 修改主机名
      • 2.2.3 主机名-IP地址解析
      • 2.2.4 时间同步
      • 2.2.5 内核转发、网桥过滤配置
      • 2.2.6 安装ipset和ipvsadm
      • 2.2.7 关闭SWAP分区
  • 3. 容器运行时 Containerd 准备
    • 3.1 获取Containerd安装包
    • 3.2 安装 Containerd
    • 3.3 创建&修改配置文件
    • 3.4 启动Containerd&开机自启
  • 4. K8S集群部署
    • 4.1 软件源准备
    • 4.2 软件安装
    • 4.3 集群初始化
    • 4.4 准备kubectl配置文件
    • 4.5 添加工作节点到集群
  • 5. K8S集群网络插件 Calico
    • 5.1 operator
    • 5.2 自定义配置
    • 5.3 错误解答
  • 6. 部署Nginx测试验证K8S集群是否可用


创作不易,禁止转载抄袭!!!违者必究!!!

创作不易,禁止转载抄袭!!!违者必究!!!

创作不易,禁止转载抄袭!!!违者必究!!!


1. 模版机系统环境准备

1.1 安装Ubuntu

看这篇文章:
https://blog.csdn.net/weixin_52799373/article/details/139341024

根据上面的文章安装一个Ubuntu系统,确保系统:

  1. 安装后可以联网

安装完以后,登录系统,输入以下命令:

ping www.baidu.com

提示类似以下输出,则代表可联网:

在这里插入图片描述

注意:Ctrl+C退出 ping 命令。

  1. 可以使用SSH工具连接

在这里插入图片描述

  1. 已设置root密码

如果没有设置,请看上面文章的第5.1步骤

确保可以通过命令正常切换root用户:

su - root

在这里插入图片描述

1.2 设置静态IP地址

  1. 通过命令切换到root用户:
su - root

在这里插入图片描述

  1. 备份网络配置文件

执行以下命令,先备份一下配置文件:

cp /etc/netplan/00-installer-config.yaml /etc/netplan/00-installer-config.yaml.bak

在这里插入图片描述

  1. 修改配置文件
vim /etc/netplan/00-installer-config.yaml

将配置文件原有的内容删除,把下面的配置,复制到配置文件中:
(复制的时候一定要注意缩进!)

# 表示下面内容是关于网络配置的
network:# 表示所使用的网络配置格式版本是 2,表明这是使用 netplan 工具的配置格式版本version: 2# 指定了使用 networkd 作为网络管理后端。networkd 是 systemd 提供的网络管理服务renderer: networkd# 是一个键,表示该部分配置的是以太网接口ethernets:# 是具体的以太网接口的名称ens33:# 表示该接口不使用 DHCP 来获取 IPv4 地址,而是使用静态配置dhcp4: no# 列表中的项表示为该接口配置的静态 IP 地址addresses:# 是该接口的静态 IP 地址和子网掩码。/24 表示子网掩码是 255.255.255.0(这里/24是固定的,/24前面的静态IP改成自己的)- 192.168.57.141/24# 部分用于配置路由routes:# 默认路由,即没有更具体路由的流量- to: default# 网关(这个要去VMware看一下自己的网关是多少,改成自己的)via: 192.168.57.0# 配置 DNS 服务器nameservers:# 列表中的项表示要使用的 DNS 服务器地址,这里是三个DNS地址addresses: [119.29.29.29,114.114.114.114,8.8.8.8]

在这里插入图片描述

其中

  • addresses:要改成自己要设置的IP!!!,IP的前三段要跟网关一致。(可以改成目前系统的IP地址,也就是ssh连接所用的IP地址)
  • via :要改成自己的网关地址!!!下面的图片是告诉你怎么看的:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  1. 使配置生效

输入以下命令,使配置生效:

netplan apply

生效以后,再 ping 一下 www.baidu.com,看网络是否正常,如果正常则修改成功了:

在这里插入图片描述

2. 主机准备

2.1 使用模板机创建主机

这里我们直接通过上面的模板机克隆出三台机器即可

分别起名为:

  • k8s-master01
  • k8s-worker01
  • k8s-worker02

首先执行关机命令将模板机关机:

shutdown now

然后到VMwar上,找到我们的模板机,右键 —— 管理 —— 克隆
(三台机器克隆过程一致,唯一的区别就是起名字那块)

下面看图操作:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

这里我直接把克隆时三台不一样的地方截图了。只有名字和位置需要改一下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.2 主机配置

2.2.1 修改静态IP

以下针对所有主机,每次执行操作都需要保证三台机器都执行了且没有错误。
(如果其中一台用模板机IP,只操作其余两台即可)

克隆完以后,我们要分别把刚刚克隆的三台机器开机,需要改一下静态IP地址
第一台 k8s-master01 可以不用改,我们直接用模板机的即可。
k8s-worker01k8s-worker02 需要改一下,不然三个主机IP一样会冲突。

温馨提示: su - root 切换root用户

vim /etc/netplan/00-installer-config.yaml

输入以上命令,编辑网络配置文件,修改截图部分,IP的第四段部分:(只要是别的虚机没用过的都可以,我这里主节点是131,两个node节点分别是132和133)

  • k8s-worker01
    在这里插入图片描述
  • k8s-worker02
    在这里插入图片描述

修改以后保存,然后输入以下命令使配置生效:

netplan apply

生效以后,再 ping 一下 www.baidu.com,看网络是否正常,如果正常则修改成功了:

  • k8s-worker01

    在这里插入图片描述

  • k8s-worker02

    在这里插入图片描述

改完以后我们就可以用远程工具连接这三台主机了:

在这里插入图片描述

2.2.2 修改主机名

以下针对所有主机,每次执行操作都需要保证三台机器都执行了且没有错误。

  • k8s-master01
hostnamectl set-hostname k8s-master01

在这里插入图片描述

  • k8s-worker01
hostnamectl set-hostname k8s-worker01

在这里插入图片描述

  • k8s-worker02
hostnamectl set-hostname k8s-worker02

在这里插入图片描述

最后我们重新切换一下 root 账户,让显示生效:

(这里我就不截图了,太简单了。)

先输入以下命令退出 root 账户:

exit

然后重新切换到 root 账户:

su - root

2.2.3 主机名-IP地址解析

以下针对所有主机,每次执行操作都需要保证三台机器都执行了且没有错误。

我们到 finalshell 中,在下方切换到 命令,然后最下面下拉框更改为 全部会话:(这样的话我们就可以直接将一条命令同步发送给三台主机了)

在这里插入图片描述

然后在 命令编辑器 输入以下命令后,点击 发送

cat >> /etc/hosts << EOF
192.168.57.131 k8s-mater01
192.168.57.132 k8s-worker01
192.168.57.133 k8s-worker02
EOF

在这里插入图片描述

执行完以后,我们可以验证一下是否添加成功:(三个主机都看一眼)

cat /etc/hosts

在这里插入图片描述

2.2.4 时间同步

以下针对所有主机,每次执行操作都需要保证三台机器都执行了且没有错误。

  1. 更换时区
timedatectl set-timezone Asia/Shanghai

在这里插入图片描述

  1. 安装ntpdate
apt-get install ntpdate

在这里插入图片描述

  1. 使用ntpdate命令同步时间
ntpdate time1.aliyun.com

在这里插入图片描述

  1. 通过计划任务实现同步时间
crontab -e

在这里插入图片描述

然后这里选择输入 2

在这里插入图片描述

然后在这个文件的最后一行加入下方的cron表达式:(每个主机都要加!!!)

0 */1 * * * ntpdate time1.aliyun.com
  • k8s-master01

    在这里插入图片描述

  • k8s-worker01

    在这里插入图片描述

  • k8s-worker02

    在这里插入图片描述

2.2.5 内核转发、网桥过滤配置

以下针对所有主机,每次执行操作都需要保证三台机器都执行了且没有错误。

配置依赖模块到 /etc/modules-load.d/k8s.conf ,后期可开机自动加载:

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

在这里插入图片描述

上面只是开机自动加载,但我们本次还需要用,所以使用下面两条命令进行启用:

modprobe overlay
modprobe br_netfilter

在这里插入图片描述

启用完以后,我们可以用下方命令查看是否成功:

lsmod | egrep "overlay"
lsmod | egrep "br_netfilter"

在这里插入图片描述

然后我们把网桥过滤和内核转发追加到 k8s.conf 文件中:

cat << EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

在这里插入图片描述

最后我们加载内核参数:

sysctl --system

在这里插入图片描述

加载完成后,我们可以用下方命令看下内核的路由转发有没有成功打开:

sysctl -a | grep ip_forward

变成 1 了,说明成功了:

在这里插入图片描述

2.2.6 安装ipset和ipvsadm

以下针对所有主机,每次执行操作都需要保证三台机器都执行了且没有错误。

首先安装 ipsetipvsadm

(我们后续使用一些负载均衡器的时候需要用到,这个配置是一定要做的)

apt-get install ipset ipvsadm

在这里插入图片描述

中间会让你输入一次 Y 确认,我们直接输入发送即可:

在这里插入图片描述

安装完成后,我们需要配置 ipvsadm 模块加载,添加需要加载的模块:(这样我们后续开机就可以自动加载了)

cat << EOF | tee /etc/modules-load.d/ipvs.conf
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
EOF

在这里插入图片描述

上面只是开机自动加载,但我们本次还需要用,所以我们本次要用的话可以将生效命令放到一个脚本文件中,然后执行他:

cat << EOF | tee ipvs.sh
#!/bin/sh
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF

在这里插入图片描述

执行我们刚刚创建的脚本文件:

sh ipvs.sh

在这里插入图片描述

我们可以用以下命令查看是否已经加载:

lsmod | grep ip_vs

如下图所示,可以看到都加载进来了:

在这里插入图片描述

2.2.7 关闭SWAP分区

以下针对所有主机,每次执行操作都需要保证三台机器都执行了且没有错误。

虽然教程版本的k8s集群,也就是 1.28,说是可以使用node上的 SWAP 分区,但在初始化的时候还是会出现报错,所以,我们还是需要关闭 SWAP 分区。

永久关闭 SWAP 分区:(重启系统才会生效)

vim 打开 /etc/fstab

vim /etc/fstab

打开后找到 /swap.img none swap sw 0 0 这一行,给注释掉:(三台主机都需要操作)

  • k8s-master01

    在这里插入图片描述

  • k8s-worker01

    在这里插入图片描述

  • k8s-worker02

    在这里插入图片描述

上面的操作,我们重启系统才会生效,我们本次要用,但不想重启系统,所以可以先临时关闭 SWAP 分区:

swapoff -a

然后我们可以用以下命令,查看是否关闭成功:

free -m

这样就是关闭成功了:

在这里插入图片描述

3. 容器运行时 Containerd 准备

3.1 获取Containerd安装包

以下针对所有主机,每次执行操作都需要保证三台机器都执行了且没有错误。

执行以下命令下载安装包:(如果提示连接被拒绝之类的提示,这是由于GitHub在外网,请使用魔法上网,或者多试几次)

wget https://github.com/containerd/containerd/releases/download/v1.7.5/cri-containerd-1.7.5-linux-amd64.tar.gz

在这里插入图片描述

这里等待时间可能较长,请耐心等待下载完成,一定要确保三台主机都下载完了,再进行后续操作!!!

  • k8s-master01 下载完成

    在这里插入图片描述

  • k8s-worker01 下载完成

    在这里插入图片描述

  • k8s-worker02 下载完成

    在这里插入图片描述

3.2 安装 Containerd

以下针对所有主机,每次执行操作都需要保证三台机器都执行了且没有错误。

解压安装包到根目录(解压到根目录他就会自动归位了,不需要我们再去移动了):

tar xf cri-containerd-1.7.5-linux-amd64.tar.gz  -C /

在这里插入图片描述

其实解压完以后就相当于安装完了,我们可以随便输一个命令来验证一下:

containerd --version

在这里插入图片描述

3.3 创建&修改配置文件

以下针对所有主机,每次执行操作都需要保证三台机器都执行了且没有错误。

首先创建配置文件所在目录:

mkdir /etc/containerd

生成默认配置文件:(Containerd的配置文件使用TOML格式)

containerd config default > /etc/containerd/config.toml

在这里插入图片描述

然后使用以下命令查看有没有生成成功:

ls /etc/containerd

在这里插入图片描述

生成以后,我们需要对配置文件进行修改:

vim /etc/containerd/config.toml

要修改的地方有第65行、137行 (三台主机都需要改!)

首先是65行的 sanbox_image = "registry.k8s.io/pause:3.8" 改成 sanbox_image = "registry.k8s.io/pause:3.9"

然后是137行的 SystemdCgroup = false 改成 SystemdCgroup = true

  • k8s-master01

    在这里插入图片描述
    在这里插入图片描述

  • k8s-worker01

    在这里插入图片描述
    在这里插入图片描述

  • k8s-worker02

    在这里插入图片描述
    在这里插入图片描述

3.4 启动Containerd&开机自启

以下针对所有主机,每次执行操作都需要保证三台机器都执行了且没有错误。

执行以下命令,设置开机自启,并设置现在就启动:

--now 的意思就是现在启动

systemctl enable --now containerd

在这里插入图片描述

然后执行以下命令验证一下是否三台主机都已启动:

systemctl status containerd
  • k8s-master01 已启动

    在这里插入图片描述

  • k8s-worker01 已启动
    在这里插入图片描述

  • k8s-worker02 已启动
    在这里插入图片描述

温馨提示:Ctrl+Z 可退出查看状态。

4. K8S集群部署

4.1 软件源准备

以下针对所有主机,每次执行操作都需要保证三台机器都执行了且没有错误。

使用阿里云提供的软件源:

echo "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

在这里插入图片描述

然后我们验证一下是否添加成功了:

ls /etc/apt/sources.list.d

在这里插入图片描述

确定三台主机都成功了以后,我们更新软件源:

apt-get update

执行完以后会提示如下图所示的错误,这个主要是因为没有公钥,缺少 GPG 的key导致的:

在这里插入图片描述

所以,我们需要将公钥添加至服务器:

B53DC80D13EDEF05 部分以你显示的为准)

apt-key adv --recv-keys --keyserver keyserver.ubuntu.com B53DC80D13EDEF05

在这里插入图片描述

导入完成以后,我们再重新执行以下命令就可以了:

apt-get update

在这里插入图片描述

4.2 软件安装

以下针对所有主机,每次执行操作都需要保证三台机器都执行了且没有错误。

我们要使用 kubeadm 对我们的集群进行初始化,所以要先安装必要的软件:

apt-get install kubeadm=1.28.1-00  kubelet=1.28.1-00 kubectl=1.28.1-00

我这里以1.28.1版本为例,上面的命令就是指定版本安装。如果你们要安装最新版,将版本号去掉即可,那下面的命令可以查看支持的版本:

apt-cache madison kubeadm
apt-cache madison kubelet
apt-cache madison kubectl

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

确定好自己要安装的版本后,执行安装命令:

在这里插入图片描述

然后安装过程中会提示你输入 Y

(下载过程可能会比较慢,耐心等待三台主机都下载完!一定要确保三台都下载完,再进行后续操作)

在这里插入图片描述

安装完成以后,我们分别执行以下命令,验证一下是不是安装成功了:

(要确保三台主机都成功了)

kubeadm version
kubelet --version
kubectl version
  • k8s-master01 已成功安装
    在这里插入图片描述
  • k8s-worker01 已成功安装
    在这里插入图片描述
  • k8s-worker02 已成功安装
    在这里插入图片描述

确定三台主机都已安装完以后,我们需要锁定版本,防止软件更新对 k8s 集群造成一定影响:

apt-mark hold kubeadm kubelet kubectl

在这里插入图片描述

4.3 集群初始化

以下仅针对 master节点 的主机,也就是只需要在 master节点 的主机上操作。如需在其他主机操作,我会特别说明。

首先我们需要创建 kubeadm 配置文件:

这条命令的意思就是将配置打印到 kubeadm-config.yaml 文件中

kubeadm config print init-defaults > kubeadm-config.yaml

然后使用 ls 命令查看是否生成成功:

在这里插入图片描述

确认生成成功以后,我们开始编辑这个配置文件:

vim kubeadm-config.yaml
  • 修改IP地址

    在这里插入图片描述

  • 修改名称

    在这里插入图片描述

  • criSocket 我们用的就是 Containerd 可以不用动,你们可以按需修改。

  • imageRepository 可以修改为 registry.aliyuncs.com/google_containers 阿里云镜像仓库,也可以默认,都可以。

    在这里插入图片描述
    如果更改了镜像地址,那么还需要同步修改 /etc/containerd/config.toml 文件:

    vim /etc/containerd/config.toml
    

    (三台主机都需要修改这个文件,我这里只截图了一个)

    在这里插入图片描述

    修改完以后,要分别执行以下命令重新启动 containerdkubelet

    systemctl restart containerd
    systemctl restart kubelet
    

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

  • kubernetesVersion 修改为我们当前的版本 1.28.1

    在这里插入图片描述

  • networking 中的 dnsDomain,可以默认,也可以改成你们公司的域名,但不要跟其他人出现重叠。(学习的话无所谓了)

  • networking 中的 serviceSubnet 后面加上 podSubnet: 10.244.0.0/16

    在这里插入图片描述

  • 在配置文件最后加入以下配置:

    ---
    kind: KubeletConfiguration
    apiVersion: kubelet.config.k8s.io/v1beta1
    cgroupDriver: systemd
    

    在这里插入图片描述

最后保存即可

修改保存完以后,我们需要对我们 k8s 中所使用的一些镜像进行提前下载:

(这一步取决于你的网速,网速快下载的也就快,网速慢要等待的时间就越长)

  • --image-repository 的意思是从阿里云的镜像仓库下载(我发现走官方镜像太慢了,所以指定阿里云的仓库了)
  • --kubernetes-version 的意思是指定版本(如果你需要最新版可以把这个去掉执行)
kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers --kubernetes-version v1.28.1

(只对master节点操作)

在这里插入图片描述

做完上面的操作以后,我们就可以对 k8s 集群初始化了:

这个过程需要费点时间,耐心等待即可。

kubeadm init --config kubeadm-config.yaml

(只对master节点操作)

最后出现 initialized successfully 就代表初始化成功了:

在这里插入图片描述

4.4 准备kubectl配置文件

以下仅针对 master节点 的主机,也就是只需要在 master节点 的主机上操作。如需在其他主机操作,我会特别说明。

在这里插入图片描述

其实很简单,我们只需要把上面输出内容里提供的命令执行一下即可:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

然后我们可以使用以下命令查看节点信息了:

kubectl get nodes

在这里插入图片描述

4.5 添加工作节点到集群

我们只需要将之前的输出内容中的命令复制到两个工作节点运行即可:
在这里插入图片描述

(你不要复制我的,自己往上面的输出内容中找!!)

kubeadm join 192.168.57.131:6443 --token abcdef.0123456789abcdef \--discovery-token-ca-cert-hash sha256:258af31f0ec6869ff04aede2ce13a852d4a113ba60aa5efb3e32256eedc211cd 
  • k8s-worker01
    在这里插入图片描述

  • k8s-worker02

    在这里插入图片描述

然后我们可以通过以下命令进行验证是否添加成功:

kubectl get nodes

可以看到已经添加成功了:

在这里插入图片描述

到这里呢,虽然工作节点也加入成功了,但其实也只是初始化成功了,但还不能用,状态还是 NotReady 状态,我们继续往下看。

5. K8S集群网络插件 Calico

我们这里使用的是 Calico ,下面是几个插件的区别:

  • Flannel 是个小规模集群
  • Calico 既适合小规模也适合大规模,部署也比较容易
  • Cilium 对内核的版本要求较高,内核版本必须要达到6.3以上

5.1 operator

执行以下命令进行安装:

(如果需要安装其他版本请访问:https://projectcalico.docs.tigera.io/about/about-calico)

在这里插入图片描述

kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/tigera-operator.yaml

在这里插入图片描述

创建完成以后我们可以执行以下命令看下 tigera-operator 是不是已经存在了:

kubectl get ns

在这里插入图片描述

然后看一下我们的pod是不是 Runing 状态了,如果不是后续操作就无法进行了:

kubectl get pods -n tigera-operator

在这里插入图片描述

5.2 自定义配置

这里包括要分配的网段、所使用的模式等等,但这里因为我们的集群规模比较小,只要改一下网段即可。

先执行以下命令下载:

(如果需要安装其他版本请访问:https://projectcalico.docs.tigera.io/about/about-calico)

wget https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/custom-resources.yaml

在这里插入图片描述

下载以后,首先我们进行网段修改,也就是文件的第13行:

这里就是改成咱们集群初始化的时候指定的网段

vim custom-resources.yaml

在这里插入图片描述

修改完以后,我们要先去手动拉取以下镜像。(三台主机都要拉!!)

这个没办法,我们有堵无形的墙。手动拉一下镜像吧。。(三台主机都要拉!!)

使用 ctr 命令来拉取所用到的镜像,后面的版本好记得改成你自己安装的 calico 版号。(三台主机都要拉!!)

其中 docker.anyhub.us.kg 是一些国内大佬搞得映射(加速),下载速度非常快,如果这个地址不能用了,请访问下方链接查看最新地址:

https://github.com/DaoCloud/public-image-mirror/issues/2328

在这里插入图片描述

(三台主机都要拉!!)

ctr image pull docker.anyhub.us.kg/calico/cni:v3.26.1
ctr image pull docker.anyhub.us.kg/calico/pod2daemon-flexvol:v3.26.1
ctr image pull docker.anyhub.us.kg/calico/node:v3.26.1
ctr image pull docker.anyhub.us.kg/calico/kube-controllers:v3.26.1
ctr image pull docker.anyhub.us.kg/calico/typha:v3.26.1
ctr image pull docker.anyhub.us.kg/calico/node-driver-registrar:v3.26.1
ctr image pull docker.anyhub.us.kg/calico/csi:v3.26.1

(三台主机都要拉!!我这里只截图了master的主机,全截太多了!!)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

下载完成以后,我们可以通过 ctr image list命令查看镜像列表:

在这里插入图片描述

(一定要确定三台主机都拉下来了!!) 确定上面 7个镜像 都已经下载了,我们给 custom-resources.yaml 应用一下:

kubectl create -f custom-resources.yaml

在这里插入图片描述

执行完以后,我们再执行以下命令,就能看到 calico-system 命名空间了:

kubectl get ns

在这里插入图片描述

然后我们等待大约2-3分钟的时间,再通过以下命令来查看一下pod的状态:

kubectl get pods -n calico-system

然后就可以看到 ,所有的 pod 都是 Runing 状态了:

在这里插入图片描述

然后我们再运行查看节点信息的命令,就会发现状态已经变成 Ready 状态了:

kubectl get nodes

在这里插入图片描述

5.3 错误解答

如果出现 Init:ErrImagePull 或者 Init:ImagePullBackOf,那就是上面我提到的7个镜像没拉下来!

在这里插入图片描述

解决方法:把缺失的镜像重新拉一下!

(三台主机都要拉!!)

ctr image pull docker.anyhub.us.kg/calico/cni:v3.26.1
ctr image pull docker.anyhub.us.kg/calico/pod2daemon-flexvol:v3.26.1
ctr image pull docker.anyhub.us.kg/calico/node:v3.26.1
ctr image pull docker.anyhub.us.kg/calico/kube-controllers:v3.26.1
ctr image pull docker.anyhub.us.kg/calico/typha:v3.26.1
ctr image pull docker.anyhub.us.kg/calico/node-driver-registrar:v3.26.1
ctr image pull docker.anyhub.us.kg/calico/csi:v3.26.1

(三台主机都要拉!!我这里只截图了master的主机,全截太多了!!)

下载完成以后,我们可以通过 ctr image list命令查看镜像列表:

在这里插入图片描述

确定上面7个镜像都有了以后,我们需要删除所有有问题的 pod,也就是上面状态为 Init:ErrImagePull Init:ImagePullBackOfpod,以上图为例,我举几个栗子:

kubectl delete pod calico-node-6sd4p -n calico-system
kubectl delete pod calico-node-pxbrf -n calico-system
kubectl delete pod calico-node-tmcdm -n calico-system

确定所有有问题的pod都删除以后,我们等待个2-3分钟再执行以下命令

kubectl get pods -n calico-system

然后就可以看到 ,所有的 pod 都是 Runing 状态了

在这里插入图片描述

6. 部署Nginx测试验证K8S集群是否可用

上面我们已经部署完了K8S集群,那到底能不能用呢?下面我们就来部署一个简单的 Nginx 来测试一下。

首先我们来创建一个 NginxDeployment

vim nginx-deployment.yaml

复制下面的配置到 nginx-deployment.yaml (注意缩进!!!),保存退出即可:

---
apiVersion: apps/v1
kind: Deployment
metadata:name: nginxweb # 部署的名称
spec:replicas: 2  # 设置副本数量为2selector:matchLabels:app: nginxweb1 # 用于选择匹配的Pod标签template:metadata:labels:app: nginxweb1 # Pod的标签spec:containers:- name: nginxwebc # 容器名称image: nginx:latest # 镜像拉取地址,使用最新的nginx镜像imagePullPolicy: IfNotPresent # 镜像拉取策略,如果本地没有就拉取ports:- containerPort: 80 # 容器内部监听的端口
---
apiVersion: v1
kind: Service
metadata:name: nginxweb-service # 服务的名称
spec:externalTrafficPolicy: Cluster # 外部流量策略设置为集群selector:app: nginxweb1 # 用于选择匹配的Pod标签ports:- protocol: TCP # 使用TCP协议port: 80 # 服务暴露的端口targetPort: 80 # Pod中容器的端口nodePort: 30080 # 在每个Node上分配的端口,用于外部访问type: NodePort # 服务类型,使用NodePort

在这里插入图片描述

然后咱们再使用以下命令应用一下:

kubectl apply -f nginx-deployment.yaml

在这里插入图片描述

应用以后,我们等待个几分钟然后通过以下命令来查看以下是否已经生成了 pod,并且是否已经处于 Runing 状态了 :

kubectl get pods

在这里插入图片描述

同时也会为生成的 pod 创建对应的 service,我们可以通过以下命令查看:

service 就是我们通过 service的ip地址或者service名称对我们pod进行访问的方法,防止我们pod出现故障以后,我们没办法再找到这个pod

kubectl get service

在这里插入图片描述

除了在k8s集群内通过service访问外,我们还可以在k8s集群外通过我们k8s集群的任意一个节点的IP地址加上他的30080端口(nginx-deployment.yaml文件中定义的)访问。

下面我们就直接对pod进行访问测试,首先要获取对应的IP地址:

kubectl get pods -o wide

在这里插入图片描述

获取到IP地址以后,我们就可以直接通过 curl 命令进行访问:

curl http://10.244.69.203
curl http://10.244.79.71

我们可以看到已经出现了我们熟悉的 Welcome to nginx!

在这里插入图片描述

然后我们再对service进行访问测试,一样是要先获取对应的IP地址:

kubectl get service

在这里插入图片描述

获取到IP地址以后,我们同样通过 curl 命令进行访问:

curl http://10.99.247.80

也是出现了我们熟悉的 Welcome to nginx!,没有问题:

在这里插入图片描述

但通过service访问,具体访问的是哪个节点呢?这就取决于我们service在调度的过程中的访问策略了,他具有负载均衡的能力。

最后,我们再验证一下从k8s集群外进行访问,首先打开我们物理机(也就是本机电脑)的浏览器,然后输入我们各个节点的ip加上30080端口,进行测试访问:

在这里插入图片描述

到此,结束。

帮到你的话,请点赞、收藏、关注!谢谢啦!

B站搜索:七维大脑
抖音搜索:七维大脑
公众号搜索:肥猫PLUS

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3246141.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Android调用FFmpeg解码MP3文件并使用AudioTrack播放操作详解

文章目录 总体流程Android读取MP3文件调用FFmpeg进行MP3文件解码AudioTrack播放PCM原理工作原理1. 缓冲区和流模式2. 缓冲区管理3. 音频渲染流程4. 缓冲区大小和延迟5. 线程和同步 使用示例 使用JNI调用AudioTrack播放PCM1.通过JNI创建AudioTrack对象2.调用AudioTrack的write方…

QT实现滑动页面组件,多页面动态切换

这篇文章主要介绍了Qt实现界面滑动切换效果&#xff0c;对大家的学习或工作具有一定的参考借鉴价值&#xff0c;需要的朋友可以参考下。 一、简述 一个基于Qt的动态滑动页面组件。 二、 设计思路 1、自定义StackWidget类&#xff0c;继承自QWidget&#xff0c;实现一个堆叠…

乐尚代驾项目概述

前言 2024年7月17日&#xff0c;最近终于在低效率的情况下把java及其生态的知识点背的差不多了&#xff0c;投了两个礼拜的简历&#xff0c;就一个面试&#xff0c;总结了几点原因。 市场环境不好 要知道&#xff0c;前两年找工作&#xff0c;都不需要投简历&#xff0c;把简历…

《绝区零》公测“翻车”

“《绝区零》重塑米哈游荣光”到“《绝区零》翻车米哈游没招了”,这样极与极的舆论反转,只用了不到一天的时间。 7月,米哈游自研游戏《绝区零》上线公测。虽然品类略显小众,主打动作手游,但系出名门的优势还是让《绝区零》在公测前预下载阶段大放异彩——直接登上了百余国…

Ubuntu/Kali简洁高效安装最新版的docker-compose

基于docker已安装的情况下&#xff0c;通过执行一下代码完成docker-compose的安装 sudo curl -L "https://github.com/docker/compose/releases/download/$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep \"tag_name\": | sed …

区块链资料

Quantstamp - Public Security Assessments smart-contract-sanctuary-bsc/contracts/mainnet at master tintinweb/smart-contract-sanctuary-bsc GitHub https://github.com/slowmist/Cryptocurrency-Security-Audit-Guide/blob/main/README_CN.md sFuzz: 高效自适应的智…

有赞群团团开团大团长跑路,用户资金保护并没有保障到位!

近日群团团的开团大团长“肥肥购物”已经跑路了&#xff0c;留下了一堆烂账。有的团长5月21号买的购物卡到现在还没有进行成功交付&#xff0c;据帮卖团长反馈该笔订单一直没有确认收货且处于未完结的状态&#xff0c;但是这笔订单货款钱却迟迟无法进行成功退款。 下方是帮卖团…

Windows搭建RTMP视频流服务器

参考了一篇文章&#xff0c;见文末。 博客中nginx下载地址失效&#xff0c;附上一个有效的地址&#xff1a; Index of /download/ 另外&#xff0c;在搭建过程中&#xff0c;遇到的问题总结如下&#xff1a; 1 两个压缩包下载解压并重命名后&#xff0c;需要 将nginx-rtmp…

若依微服务集成手机短信验证码登陆

为了响应公司项目的特定需求&#xff0c;增强用户体验与安全性&#xff0c;集成手机短信验证码登录功能至基于若依微服务框架开发的应用中&#xff0c;故创作此篇为未来类似项目提供了可借鉴的实施范例。 文章目录 1.设计思路2.发送手机验证码接口3.发送手机验证码接口4.post请…

云动态摘要 2024-07-16

给您带来云厂商的最新动态&#xff0c;最新产品资讯和最新优惠更新。 最新优惠与活动 数据库上云优选 阿里云 2024-07-04 RDS、PolarDB、Redis、MongoDB 全系产品新用户低至首年6折起&#xff01; [免费体验]智能助手ChatBI上线 腾讯云 2024-07-02 基于混元大模型打造&…

开放式耳机性价比推荐!免费总结功课给你参考!

在选择适合自己的耳机时&#xff0c;确实需要考虑多方面的因素&#xff0c;包括音质、舒适度、佩戴方式、续航能力、防水性能等。开放式耳机因其独特的设计&#xff0c;不仅能够提供良好的音质体验&#xff0c;还能让你在享受音乐的同时&#xff0c;保持对周围环境的感知&#…

AI数字人直播源码解析:灰豚私有化部署背后的技术分析

随着AI数字人技术的应用潜力不断显现&#xff0c;与AI数字人相关的多个项目逐渐成为创业者们的重点关注对象&#xff0c;作为当前AI数字人典型应用场景之一的数字人直播意向人数更是屡创新高&#xff0c;AI数字人直播源码部署的热度也因此不断飙升&#xff0c;与各大数字人源码…

python-区间内的真素数(赛氪OJ)

[题目描述] 找出正整数 M 和 N 之间&#xff08;N 不小于 M&#xff09;的所有真素数。真素数的定义&#xff1a;如果一个正整数 P 为素数&#xff0c;且其反序也为素数&#xff0c;那么 P 就为真素数。 例如&#xff0c;11&#xff0c;13 均为真素数&#xff0c;因为 11 的反序…

Python入门------pycharm加载虚拟环境

pycharm虚拟环境配置&#xff1a; 在按照前面的办法&#xff0c;配置好虚拟环境后,如果我们需要到虚拟环境开发&#xff0c;就需要给编译器配置虚拟环境 1.打开编译器&#xff0c;点击右下角的interpreter选项 2. 点击ADD Interpreter,添加虚拟环境 3. 因为我们使用的是原始…

Hadoop安装报错

报错&#xff1a;ERROR 2023-03-09 21:33:00,178 NetUtil.py:97 - SSLError: Failed to connect. Please check openssl library versions. 解决方案: 在安装失败得客户端执行 编辑 /etc/python/cert-verification.cfg 配置文件&#xff0c;将 [https] 节的 verify 项 设为禁用…

linux上Mysql的安装

1.先检查有没有安装mariadb&#xff0c;有的话将其卸载&#xff0c;不然会和mysql冲突 [rootweb1 ~]# yum list | grep mariadb 2.卸载mariadb,按Y确认 [rootweb1 ~]# yum remove mariadb-libs.x86_64 3.下载mysql [rootweb1 ~]# wget https://downloads.mysql.com/archi…

大模型训练数据白皮书

大模型训练数据白皮书 关键要点一、合成数据解决方案探讨二、ChatGPT的案例分析三、大模型训练所需数据及特点四、多模态、知识性和安全性五、中文大模型发展受限于中式价值观类语料短缺六、高质量数据的重要性及其对模型的影响七、三重不确定性和有效搭配八、从质量、规模、多…

Self-Attention 自注意力机制(二)——实例过程说明

一、自注意力机制核心过程 自注意力机制&#xff08;Self-Attention Mechanism&#xff09;&#xff0c;也称为内部注意力机制&#xff0c;是一种在序列模型中用于捕捉序列内部不同位置之间依赖关系的技术。这种机制允许模型在处理序列时&#xff0c;对序列中的每个元素分配不…

pytorch-pytorch之LSTM

目录 1. nn.LSTM2. nn.LSTMCell 1. nn.LSTM 初始化函数输入参数与RNN相同&#xff0c;分别是input_size&#xff0c;hidden_size和num_layer foward函数也与RNN类似&#xff0c;只不过返回值除了out外&#xff0c;ht变为(ht,ct) 代码见下图&#xff1a; 2. nn.LSTMCell 初…

SAP ABAP性能优化

1.前言 ABAP作为SAP的专用的开发语言&#xff0c;衡量其性能的指标主要有以下两个方面&#xff1a; 响应时间&#xff1a;对于某项特定的业务请求&#xff0c;系统在收到请求后需要多久返回结果 吞吐量&#xff1a;在给定的时间能&#xff0c;系统能够处理的数据量 2. ABAP语…