k8S之Centos离线安装

2023-05-16

文章目录

  • 前言
  • 一、主要策略
  • 二、建立自主可控的仓库
    • 1. 软件仓库
    • 2. 镜像仓库
  • 三、k8s安装步骤
    • 1. 基础环境准备
    • 2. 安装docker
    • 3. 安装K8S组件
    • 4. 初始化k8s主节点
    • 5. 检查集群状态
    • 6. 安装flannel网络插件
    • 7. 添加worker节点
  • 总结


前言

如果机器能联网,特别是能直接访问公网上的软件、镜像仓库,那么k8s安装起来将会非常顺利。直接使用yum、apt-get等命令安装基础组件,拉取公共docker镜像仓库中的镜像即可。但是如果网络环境受限,跟公网隔绝,那装起来就会比较麻烦。

首先,软件包的安装就非常头疼。如果没有提前准备好所有的依赖,那就得一个一个的尝试。遇到缺少的依赖,就要从外网下载好、拷贝到内网机器、尝试安装。而且依赖还可能有传递依赖,这样一遍一遍的试下来,非常耗费时间。

其次,镜像的安装也比较麻烦。如果公司内部没有镜像仓库,或者即使有,但你没有权限部、上传镜像,那就得你自己到每个节点上从文件加载镜像。虽然可以通过一些脚本、工具(如ansible)批量解决,但从后期的使用来讲,也非常的不方便。

本文提供一种方法,可以免除上述的麻烦,方便我们离线安装,体验虽然比不上直连公网安装,但是也比一个一个的手工操作要好多了。


一、主要策略

既然离线安装的痛点是软件包和镜像,那么我们就从解决这两个痛点入手。

  1. 建立自主可控的软件仓库
    先在一台内网机器上构建一个yum仓库,并在所有节点上配置yum访问该yum仓库。
    然后在能连接公网的机器上,将安装k8s所需的软件包及其所有依赖下载下来,并复制到内网上述yum仓库中。

  2. 建立自主可控的镜像仓库
    也是先在一台内网机器上构建一个镜像仓库,并在所有节点上配置docker访问该镜像仓库。
    然后在能连接公网的机器上 ,将所需的各镜像复制到内网,并部署到上述镜像仓库。

二、建立自主可控的仓库

# 假设我们有三台主机
192.168.10.1 	# 软件仓库、镜像仓库、k8s master
192.168.10.2	# worker
192.168.10.3 	# worker

1. 软件仓库

  • 使用createrepo建立软件仓库
  • 用nginx允许软件仓库远程访问
# 安装createrepo
yum install -y createrepo

# 创建软件仓库
createrepo /opt/softwares/www/html/k8s

# 安装nginx
yum install -y nginx

# 配置nginx,编辑/etc/nginx/conf.d/repo.conf
server {
   listen 80;
   server_name k8smaster;
   location / {
      root /opt/softwares/www/html;  # 注意和createrepo保持路径一致
      autoindex on;
      autoindex_exact_size off;
      autoindex_localtime on;
   }
}

# 编辑yum repo文件, 
cat > /etc/yum.repos.d/k8s.repo << EOF
>[k8s-1.21]
>name=k8s-1.21
>baseurl=http://192.168.10.1/k8s
>gpgcheck=0
>enabled=1
>priority=1
>EOF

# 复制k8s.repo到各台机器的/etc/yum.repos.d/目录下
scp /etc/yum.repos.d/k8s.repo  192.168.10.2:/etc/yum.repos.d/
scp /etc/yum.repos.d/k8s.repo  192.168.10.3:/etc/yum.repos.d/

# 在能够连接公网的机器上,下载安装k8s所需的软件包
yum install --downloadonly --downloaddir=/path/to/k8s/packages docker-ce kubeadm

# 复制上述下载的软件包到 192.168.10.1:/opt/softwares/www/html/k8s

【注意1】 yum install --downloadonly --downloaddir=... 命令可以将目标软件包及其倚赖下载到指定目录,方便构建我们自己的软件仓库。
【注意2】使用自己的软件仓库,也可以先安装yum-utils,再通过yum-config-manager --add-repo=http://192.168.10.1/k8s命令添加仓库

2. 镜像仓库

使用docker官方提供的registry镜像建立镜像仓库

# 在连接公网的机器上下载registry,这是docker官方提供的创建镜像仓库的镜像
docker pull registry
docker save -o registry.tar registry

# 复制registry.tar到192.168.10.1,加载后运行容器
docker load -i registry.tar
docker run -d -p 5000:5000 --restart=always --name registry registry

# 在各个节点配置访问镜像私仓
cat > /etc/docker/daemon.json <<EOF
{"insecure-registries":["192.168.10.1:5000"]}

# 在连接公网的机器上下载所需镜像
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.21.0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.21.0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.21.0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.21.0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.3-0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.6.5
docker pull flannelcni/flannel-cni-plugin:v1.1.0
docker pull flannelcni/flannel:v0.18.1

# 对上述每个镜像导出,并上传到192.168.10.1 
docker save -o image_name.tar image
# 在192.168.10.1重新加载镜像
docker load -i image_name.tar

# 重新打tag,并push到镜像私仓
docker tag image_hash_id 192.168.10.1:5000/image_name:tag 
docker push 192.168.10.1:5000/image_name:tag 

【注意1】以后凡是用到image的地方,都要使用192.168.10.1:5000/image_name:tag标识的image,否则拉不到。
【注意2】如果不清楚具体需要哪些image及其版本,可以通过kubeadm config images list命令获取

三、k8s安装步骤

1. 基础环境准备

#  关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

# 关闭selinux
sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config
setenforce 0
# 检查selinux状态,应该为0,表示已经关闭selinux
getenforce

# 禁止交换分区
echo "vm.swappiness = 0">> /etc/sysctl.conf     
swapoff -a && swapon -a
sysctl -p 
# 可以通过free -h命令检查交换分区状态

# 设置网桥包经过iptables
# 在/etc/sysctl.conf中设置如下
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

# 启用上述配置
sysctl -p

2. 安装docker

所有节点

yum install -y docker-ce
systemctl start docker
systemctl enable docker

# 更改cgroup driver为systemd
# 修改或创建/etc/docker/daemon.json,并向其中添加
{
    "exec-opts": ["native.cgroupdriver=systemd"]
}

# 修改后重启docker
systemctl restart docker

【注意1】docker默认的cgroup driver是cgroupfs,但k8s推荐的driver是systemd.

3. 安装K8S组件

所有节点

yum install -y kubeadm
systemctl start kubelet
systemctl enable kubelet

【注意1】由于kubeadm倚赖kubectl、kubelet,所以安装kubeadm时也会附带安装了这两个组件。

4. 初始化k8s主节点

在主节点执行,本例是192.168.10.1

kubeadm init \
    --apiserver-advertise-address=192.168.10.1 \
    --image-repository 192.168.10.1:5000 \
    --kubernetes-version v1.21.0 \
    --pod-network-cidr=10.244.0.0/16
# 按照提示,保存主节点安全配置信息
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

【注意1】apiserver-advertise-address指明master所用ip地址。如果master所在节点有多个ip地址,且未指明该参数的话,则k8s会使用有默认网关ip地址
【注意2】image-repository指向自己的私有镜像仓库。如未指明,则用的是谷歌的k8s.gcr.io
【注意3】kubernets-version指明k8s版本。如未指明,则会从https://dl.k8s.io/release/stable-1.txt获取最新的版本,并下载。这里指明版本的话,就可以使用本地的已有的k8s镜像。
【注意4】pod-network-cidr指明pod的ip范围。这里给出的值是flannel网络的默认ip范围。
【注意5】/etc/kubernetes/admin.conf 文件中保存的是init成功后生成的安全配置。kubectl访问集群时需用到这些配置。而$HOME/.kube/config是这些安全配置的默认目录。也可以用KUBECONFIG环境变量指明上述安全配置的目录。

5. 检查集群状态

kubectl get cs 
kubectl get nodes
kubectl describe <node host name>
kubectl get pod -n kube-system -o wide

【注意1】kubectl describe命令比较常用,可以显示节点的状态。也是解决系统故障时的主要参考信息。
【注意2】kube-system是k8s系统级别命名空间。不是docker的命名空间。
【注意3】此时由于还未安装网络插件,所以core-dns相关的pod应该都还处于pending状态。

6. 安装flannel网络插件

# 下载flannel.yaml
wget https://github.com/flannel-io/flannel/blob/master/Documentation/kube-flannel.yml

cat kube-flannel.yml | grep image
# 修改kube-flannel.yml中的镜像,修改为192.168.10.1:5000仓库中的flannel和flannel-cni-plugin镜像

# 安装flannel网络
kubectl apply -f kube-flannel.yml

# 重新查看节点状态,此时主节点应该处于READY状态
kubectl get pod -n kube-system -o wide

7. 添加worker节点

kubeadm init成功后会显示一段添加worker节点的指令,类似:kubeadm join 192.168.10.1:5000 --token sometoken --discovery-token-ca-cert-hash some-ca-info 。可以在每个woker节点上执行以加入集群。如果没有记住,也可以如下执行:

# 在master上生成加入集群的指令
kubeadm token create --print-join-command

# 在各个worker节点上执行上述生成的指令

至此,集群搭建完毕。可以尝试添加pod


总结

  1. 搭建自主可控的软件仓库和镜像仓库是前提
  2. 关闭swap、防火墙、selinux是基础
  3. kubeadm init、安装网络插件时、以及所有用到镜像的地方都要注意修改为自己的镜像私仓
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

k8S之Centos离线安装 的相关文章

随机推荐

  • Mac地址、IP、子网掩码、网关、DNS

    MAC xff08 Media Access Control 介质访问控制 xff09 MAC地址是烧录在Network Interface Card 网卡 NIC 里的 MAC地址 也叫物理地址或硬件地址 是由48比特长 xff0c 16
  • CSRF修复——看完的你多了一把刷子

    近期项目对漏洞修复这一块比较看重 xff0c 例举下CSRF的修复之路吧 提到我就心累 1 CSRF是什么 CSRF xff08 Cross Site Request Forgery 跨站域请求伪造 xff09 是一种网络的攻击方式 xff
  • 数据结构课设

    项目1 xff1a 中国计算机设计大赛赛事统计 设计目标 xff1a 1 xff0c 能统计各学校的总分 2 xff0c 能按照学校编号或者名称 xff0c 将学校的总分或者各项目的总分排序输出 3 xff0c 能够按照编号查询学校某个项目
  • idea往项目中添加jar包

    1 xff0c 项目中没有lib包则自行创建 xff0c 名字设为lib xff08 项目中已经有lib包则直接进入2 xff09 xff1b 2 xff0c 将下载好的jar包拖入刚刚创建好的lib文件包中 xff1b 3 xff0c 右
  • Windows10如何向GitHub上传文件夹?

    1 首先创建GitHub的账号 xff0c 建立好你的仓库 2 找到你的仓库 xff0c 点击 code 后点击 HTTPS 并对内容进行复制 xff0c 如下图所示 xff1a 3 下载安装git xff0c 官网下载后一直next傻瓜安
  • centos7安装tomcat9

    一 首先需要安装好jdk 1 通过yum search java grep jdk查看支持的jdk软件包 2 yum install y java 1 8 0 openjdk 安装你想要的jdk软件包 3 查看是否安装成功java vers
  • Linux的优点和缺点

    Linux的优点 xff1a 1 稳定的系统 xff1a Linux是基于Unix发展出来的操作系统 xff0c 继承了Unix的稳定并有效率的特点 经常听到安装Linux的主机连续运作一年以上而不当机 不必关机是稀松平常的事 2 免费 x
  • Effective C++条款(第三版-侯杰译)

    条款一 xff1a 视C 43 43 为一个语言联邦 C 43 43 高效编程守则视情况而变化 xff0c 取决于你使用的C 43 43 哪一部分 条款二 xff1a 尽量以const xff0c enum xff0c inline替换 d
  • obj * volatile *my_free_list ;

    今天看STL源码分析看到的一句话 xff1a obj volatile my free list 首先我们要明白一件事 xff1a volatile是一个特征修饰符 xff08 type specifier xff09 volatile的作
  • Linux下搭建路由器

    客户端1 xff1a CentOS6 9 客户端2 xff1a CentOS7 3 路由器 xff1a router1 xff08 CentOS7 3 xff09 router2 xff08 CentOS7 3 xff09 r router
  • linux 搭建FTP服务器

    FTP用于计算机之间通过网络进行文件传输 你可以通过FTP在计算机账户间进行文件传输 xff0c 也可以在账户和桌面计算机之间传输文件 xff0c 或者访问在线软件归档 服务器条件 xff1a 基于VM的Ubuntu虚拟机20 04 1 保
  • FileHandler文件处理

    FileHandler文件处理 xff0c 实行文件从临时目录保存到正式目录 生成图片对象的缩略图 获取文件信息等功能 实例 xff1a 实现用户头像图片的保存 xff0c 并生成对象的缩略图 1 创建filehandler xml文件 在
  • Error: 0x8007019e

    安装和启动 旧版本的 win10 需要在 控制面板 gt 程序 gt 启用或关闭Windows功能 勾选 适用于Linux的Windows子系统 Beta 由于现在这个功能已经不再是 beta 功能了 xff0c 只要保证你的 window
  • docker下gitlab安装配置使用

    docker 安装gitlab以及使用 一 安装及配置 1 gitlab镜像拉取 gitlab ce为稳定版本 xff0c 后面不填写版本则默认pull最新latest版本 docker pull gitlab gitlab ce 拉取镜像
  • 解决VMware上字特别小的问题

    在安装了vmware tools后 xff0c 屏幕虽然变大了 xff0c 但是字还是特别小 解决方法如下 xff1a 1 找到虚拟机上设置按钮 2 选择设备按钮 3 调整分辨率 xff08 我的电脑一开始默认的分辨率特别高 xff0c 我
  • 每天修Linux系统---关于libjpeg.so.8 && 简单的安装opencv的方法

    问题如图 xff1a 为了修这个东西我真的是费尽心力 xff0c 天天念叨 xff0c 就差卸载opencv重装 重装之前试了一下结果世界都亮了哥 xff01 xff01 xff01 解决方案如图 xff1a cv2没有报错了 xff01
  • Ubuntu22.04应用程序启动时闪退

    Ubuntu22 04启动应用程序时闪退 xff0c 添加程序启动时参数解决 今天尝试在ubuntu安装QQ音乐 xff0c 安装后启动时弹出一下就闪退了 命令行启动程序 xff0c 报错 xff1a FATAL gpu data mana
  • CNN 不变性

    CNN的平移不变性 xff1a 由于全局共享权值和pool操作 xff08 明显的特征被保存下来 xff0c 与位置没有关系 xff1f xff09 CNN的尺度不变性 xff1a 没有或者说具有一定的不变性 xff08 尺度变化不大 xf
  • Docker(四):网络管理

    Docker网络管理 一 xff1a Docker网络介绍1 1 none 网络1 2 host 网络1 3 Container1 4 Bridge 二 xff1a 端口映射 一 xff1a Docker网络介绍 Docker使用了Linu
  • k8S之Centos离线安装

    文章目录 前言一 主要策略二 建立自主可控的仓库1 软件仓库2 镜像仓库 三 k8s安装步骤1 基础环境准备2 安装docker3 安装K8S组件4 初始化k8s主节点5 检查集群状态6 安装flannel网络插件7 添加worker节点