《Kubernetes部署篇:Ubuntu20.04基于二进制安装安装kubeadm、kubelet和kubectl》

一、背景

由于客户网络处于专网环境下, 使用kubeadm工具安装K8S集群,由于无法连通互联网,所有无法使用apt工具安装kubeadm、kubelet、kubectl,当然你也可以使用apt-get工具在一台能够连通互联网环境的服务器上下载kubeadm、kubelet、kubectl软件包,然后拷贝到专网主机上,通过dpkg工具安装kubeadm、kubelet、kubectl,这里并没有采用这种方式,在当前客户主机网络环境下,我们使用二进制方式来安装kubeadm、kubelet、kubectl。

kubeadm:用来初始化集群的指令。
kubelet:在集群中的每个节点上用来启动 Pod 和容器等。
kubectl:用来与集群通信的命令行工具。

环境信息如下所示:

操作系统 内核版本 kubeadm版本 kubelet版本 kubectl版本
Ubuntu 20.04.5 LTS 5.15.0-69-generic 1.24.17 1.24.17 1.24.17

注意:使用apt安装kubeadm、kubelet、kubectl会安装一些依赖软件,如cri-tools、ebtables、socat、kubernetes-cni等,如果使用二进制安装kubeadm、kubelet、kubectl,则需要单独安装这些软件。

版本信息如下所示:

软件名称 软件版本
cri-tools 1.26.0
ebtables 2.0.11
socat 1.7.3.3
kubernetes-cni 1.2.0

注意:当前环境的containerd版本为1.7.2,这里面提供的cni二进制文件,已经集成在cri-containerd-cni-1.7.2-linux-amd64.tar.gz二进制包里面了,所以无需单独下载安装。详情可参考《Kubernetes部署篇:Ubuntu20.04基于二进制安装安装cri-containerd-cni》

这些工具在Kubernetes中有不同的用途:

1、cri-tools(容器运行时工具):这是一个 用于与Kubernetes容器运行时接口(CRI)进行交互的命令行工具集。它提供了一些有用的功能,如创建、销毁和管理容器等。

2、ebtables(以太网桥规则管理工具):这是一个用于在Linux系统中管理以太网桥规则的工具。在Kubernetes中,ebtables 用于在网络分区中实现容器之间的隔离和通信

3、socat(网络工具):这是一个用于在Linux系统中建立各种类型网络连接的工具。在Kubernetes网络中,socat可以 用于创建端口转发、代理和转发等网络连接

4、kubernetes-cni(容器网络接口插件):这是Kubernetes的一个插件, 用于管理容器的网络连接。它负责为容器分配IP地址、配置网络路由和实现网络隔离等功能


二、操作步骤

2.1、安装 CNI 插件

说明:在安装cri-containerd-cni中已经完成了cni网络插件的安装,默认在/opt/cni/bin目录下,如下图所示:

如果你的containerd、runc、cri-tools、cni是分别下载对应的二进制包独立安装的,可以参考如下操作安装cni网络插件

bash 复制代码
# 1、下载二进制包
wget https://github.com/containernetworking/plugins/releases/download/v1.2.0/cni-plugins-linux-amd64-v1.2.0.tgz

# 2、解压文件
mkdir -p /opt/cni/bin
tar axf cni-plugins-linux-amd64-v1.2.0.tgz -C /opt/cni/bin

2.2、安装 crictl

说明:ctr是containerd自带的CLI命令行工具,crictl是k8s中CRI(容器运行时接口)的客户端,k8s使用该客户端和containerd进行交互。如果你的containerd、runc、cri-tools、cni是分别下载对应的二进制包独立安装的,可以参考如下操作安装crictl

bash 复制代码
# 1、下载二进制包
wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.26.0/crictl-v1.26.0-linux-amd64.tar.gz
tar axf crictl-v1.26.0-linux-amd64.tar.gz -C /usr/local/bin

# 2、配置/etc/crictl.yaml
cat <<EOF | sudo tee /etc/crictl.yaml
runtime-endpoint: unix:///run/containerd/containerd.sock
EOF

2.3、安装ebtables和socat

bash 复制代码
apt install ebtables socat -y

如下图所示:


2.3、安装kubeadm、kubelet、kubectl

1、下载kubeadm、kubelet、kubectl二进制文件

方法一:

bash 复制代码
wget -P /usr/bin/ https://dl.k8s.io/v1.24.17/bin/linux/amd64/kubeadm
wget -P /usr/bin/ https://dl.k8s.io/v1.24.17/bin/linux/amd64/kubelet
wget -P /usr/bin/ https://dl.k8s.io/v1.24.17/bin/linux/amd64/kubectl

方法二:

bash 复制代码
wget https://dl.k8s.io/v1.24.17/kubernetes-server-linux-amd64.tar.gz
tar axf kubernetes-server-linux-amd64.tar.gz
cp kubernetes/server/bin/kubeadm  /usr/bin
cp kubernetes/server/bin/kubelet  /usr/bin
cp kubernetes/server/bin/kubectl  /usr/bin

2、安装kubeadm、kubelet、kubectl

bash 复制代码
mkdir /etc/systemd/system/kubelet.service.d
wget https://raw.githubusercontent.com/kubernetes/release/v0.4.0/cmd/kubepkg/templates/latest/deb/kubelet/lib/systemd/system/kubelet.service
cp kubelet.service /etc/systemd/system/kubelet.service
wget https://raw.githubusercontent.com/kubernetes/release/v0.4.0/cmd/kubepkg/templates/latest/deb/kubeadm/10-kubeadm.conf
cp kubeadm.conf /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
systemctl daemon-reload

说明:kubelet.service和10-kubeadm.conf文件,你可以找一台能访问互联网的服务器,使用apt工具安装kubeadm、kubectl、kubelet可以在对应目录下找到,将这两个文件拷贝到需要二进制部署kubeadm、kubectl、kubelet的主机上。

3、设置kubectl开机自启

bash 复制代码
systemctl enable kubelet

总结:整理不易,如果对你有帮助,可否点赞关注一下?

更多详细内容请参考:企业级K8s集群运维实战

相关推荐
大熊程序猿1 小时前
K8s证书过期
云原生·容器·kubernetes
魏 无羡11 小时前
linux CentOS系统上卸载docker
linux·kubernetes·centos
Karoku06611 小时前
【k8s集群应用】kubeadm1.20高可用部署(3master)
运维·docker·云原生·容器·kubernetes
凌虚13 小时前
Kubernetes APF(API 优先级和公平调度)简介
后端·程序员·kubernetes
探索云原生16 小时前
在 K8S 中创建 Pod 是如何使用到 GPU 的: nvidia device plugin 源码分析
ai·云原生·kubernetes·go·gpu
启明真纳16 小时前
elasticache备份
运维·elasticsearch·云原生·kubernetes
jwolf218 小时前
基于K8S的微服务:一、服务发现,负载均衡测试(附calico网络问题解决)
微服务·kubernetes·服务发现
nangonghen18 小时前
在华为云通过operator部署Doris v2.1集群
kubernetes·华为云·doris·operator
会飞的土拨鼠呀20 小时前
chart文件结构
运维·云原生·kubernetes
自在的LEE1 天前
当 Go 遇上 Windows:15.625ms 的时间更新困局
后端·kubernetes·go