从零开始离线安装k8s集群

2023-05-16

本文主要用于在内网(离线)环境安装k8s集群;linux环境 centos7.6

主要步骤有:

  1. 安装docker
  2. 创建dokcer 私有镜像库 registry
  3. 安装kubernetes
  4. 安装flannel

1.离线安装docker

下载离线安装包https://download.docker.com/linux/centos/7/x86_64/stable/Packages/

docker-ce-cli-18.09.7-3.el7.x86_64.rpm

docker-ce-18.09.7-3.el7.x86_64.rpm

container-selinux-2.107-1.el7_6.noarch.rpm

containerd.io-1.2.2-3.el7.x86_64.rpm

  1. 上传到指定服务器,安装命令  rpm -ivh *.rpm
  2. docker info 查看docker信息
  3. 修改cgoupdriver为systemd与k8b保持一致,vim /etc/docker/daemon.json

{

  "registry-mirrors": ["https://registry.docker-cn.com"],

  "exec-opts": ["native.cgroupdriver=systemd"]

}

  1. systemctl  daemon-reload
  2. systemctl  restart docker
  3. 设置开机启动  systemctl enabel docker

 

2.创建dokcer 私有镜像库 registry

1.在有外网环境的docker中下载镜像,并启动;

docker pull registry:2

2.从image导出镜像

docker save -o registry.tar registry:2

3.上传registry.tar到离线服务器,导入

docker load -I registry

4.启动

docker run -d -v /registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:2

5.修改k8s集群节点的dokcer daemon.json  支持https

{

  "registry-mirrors": ["https://registry.docker-cn.com"],

  "exec-opts": ["native.cgroupdriver=systemd"],

  "insecure-registries": ["10.209.68.12:5000"]

}

systemctl  daemon-reload

systemctl  restart docker

3.安装k8s

环境准备

  1. 关闭 防火墙、SeLinux、swap

# 在 master 节点和 worker 节点都要执行

systemctl stop firewalld

systemctl disable firewalld

setenforce 0

sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

# 关闭 swap

swapoff -a

yes | cp /etc/fstab /etc/fstab_bak

cat /etc/fstab_bak |grep -v swap > /etc/fstab

  1. hostnamectl set-hostname master

需要设置其他主机名称时,可将 master 替换为正确的主机名node1、node2即可。

  1. 配置内核参数,将桥接的IPv4流量传递到iptables的链

cat > /etc/sysctl.d/k8s.conf <<EOF

 

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

 

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

 

EOF

 

sysctl –system

2,安装kubeadm/kubectl/kubelet

在有网络的服务器上下载需要的rpm安装包

  1. 配置kubeadm源

# cat <<EOF > /etc/yum.repos.d/kubernetes.repo

[kubernetes]

name=Kubernetes

baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64

enabled=1

gpgcheck=0

repo_gpgcheck=0

gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg

http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

EOF

  1. yum install --downloadonly --downloaddir=/home/centos/k8s kubeadm kubectl kubelet
  2. 上传rpm包到离线服务器 安装

rpm -ivh *.rpm

设置开机启动 systemctl enable kubelet.service

 

  1. 获取镜像列表

# kubeadm config images list

k8s.gcr.io/kube-apiserver:v1.18.0

k8s.gcr.io/kube-controller-manager:v1.18.0

k8s.gcr.io/kube-scheduler:v1.18.0

k8s.gcr.io/kube-proxy:v1.18.0

k8s.gcr.io/pause:3.2

k8s.gcr.io/etcd:3.4.3-0

k8s.gcr.io/coredns:1.6.7

  1. 离线镜像

编写脚本,从阿里云下载镜像

# cat pull-images.sh

#!/bin/bash

images=(

    kube-apiserver:v1.18.0

    kube-controller-manager:v1.18.0

    kube-scheduler:v1.18.0

    kube-proxy:v1.18.0

    pause:3.2

    etcd:3.4.3-0

    coredns:1.6.7

)

for imageName in ${images[@]};

do

    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/${imageName}

    docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/${imageName} k8s.gcr.io/${imageName}

    docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/${imageName}

done

  1. 执行脚本,然后查看镜像

# docker images

REPOSITORY                           TAG                 IMAGE ID            CREATED             SIZE

k8s.gcr.io/kube-proxy                v1.18.0             43940c34f24f        7 days ago          117MB

k8s.gcr.io/kube-apiserver            v1.18.0             74060cea7f70        7 days ago          173MB

k8s.gcr.io/kube-controller-manager   v1.18.0             d3e55153f52f        7 days ago          162MB

k8s.gcr.io/kube-scheduler            v1.18.0             a31f78c7c8ce        7 days ago          95.3MB

k8s.gcr.io/pause                     3.2                 80d28bedfe5d        6 weeks ago         683kB

k8s.gcr.io/coredns                   1.6.7               67da37a9a360        2 months ago        43.8MB

k8s.gcr.io/etcd                      3.4.3-0             303ce5db0e90        5 months ago 

  1. 打包镜像

编写脚本打包镜像

# cat save-images.sh

#!/bin/bash

images=(

    kube-apiserver:v1.18.0

    kube-controller-manager:v1.18.0

    kube-scheduler:v1.18.0

    kube-proxy:v1.18.0

    pause:3.2

    etcd:3.4.3-0

    coredns:1.6.7

)

for imageName in ${images[@]};

do

    docker save -o `echo ${imageName}|awk -F ':' '{print $1}'`.tar k8s.gcr.io/${imageName}

done

压缩下载,上传到离线服务器;

tar czvf kubeadm-images-1.18.0.tar.gz *.tar

  1. 导入镜像

在安装节点分别导入离线镜像或者放入私有仓库使用

# cat load-image.sh

#!/bin/bash

ls /root/kubeadm-images-1.18.0 > /root/images-list.txt

cd /root/kubeadm-images-1.18.0

for i in $(cat /root/images-list.txt)

do

     docker load -i $i

done

导入镜像

# ./load-image.sh

3,初始化master节点

kubeadm init --apiserver-advertise-address 10.209.69.12 --apiserver-bind-port 6443 --kubernetes-version 1.18.0 --pod-network-cidr 10.244.0.0/16 --service-cidr 10.1.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

4,加入子节点

Then you can join any number of worker nodes by running the following on each as root:

 

kubeadm join 10.209.69.12:6443 --token voj8z6.ytej05mfnul5gci7 \

    --discovery-token-ca-cert-hash sha256:d12c6150f5752238e8eabe81403ff4defaf2aeb1a1c159ed7310e027b367b57b

安装flannel

下载https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml文件

把里面依赖的image都在有网络环境中下载下来;

 

导入私有镜像库;

docker tag xxx:vxxx 10.209.69.12:5000/xxx:vxxx

docker push 10.209.69.12:5000/xxx:vxxx

修改yml中镜像为私有镜像库中的包

部署

kubectl apply -f flannel.yml

查看节点  是否为ready

kubectl get nodes

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从零开始离线安装k8s集群 的相关文章

  • k8s之ReplicaSet

    我们在定义pod资源时 可以直接创建一个kind Pod类型的自主式pod 但是这存在一个问题 假如pod被删除了 那这个pod就不能自我恢复 就会彻底被删除 线上这种情况非常危险 所以今天就给大家讲解下pod的控制器 所谓控制器就是能够管
  • centos 安装k8s

    第一步 每台机子都做 关闭防火墙 systemctl stop firewalld systemctl disable firewalld 第二步 每台机子都做 永久关闭selinux sed i s enforcing disabled
  • Kubernetes Pod 故障归类与排查方法

    1 Pod 概念 Pod是kubernetes集群中最小的部署和管理的基本单元 协同寻址 协同调度 Pod是一个或多个容器的集合 是一个或一组服务 进程 的抽象集合 Pod中可以共享网络和存储 可以简单理解为一个逻辑上的虚拟机 但并不是虚拟
  • KVM-7、KVM 虚拟机创建的几种方式

    通过对 qemu kvm libvirt 的学习 总结三种创建虚拟机的方式 1 通过 qemu kvm 创建 2 通过 virt install 创建 3 通过 virt manager 创建 在使用这三种创建虚拟机前提是 宿主机必须支持
  • kubeadm常用

    kubeadm常用 配置kubeadm自动补全 初始化一个master节点 导出kubeadm默认配置文件 将node节点加入集群 生成node配置 升级k8s版本 kubeadm升级node 维护或下线node节点 管理kubeadm j
  • 局域网使用kubeadm安装高可用k8s集群

    主机列表 ip 主机名 节点 cpu 内存 192 168 23 100 k8smaster01 master 2核 2G 192 168 23 101 k8smaster02 node 2核 2G 192 168 23 102 k8sma
  • Liveness、Readiness 和 Startup Probes

    liveness apiVersion v1 kind Pod metadata labels test liveness name liveness exec spec containers name liveness image k8s
  • K8s-yaml的使用及命令

    YAML配置文件管理对象 对象管理 创建deployment资源 kubectl create f nginx deployment yaml 查看deployment kubectl get deploy 查看ReplicaSet kub
  • 十八. Kubernetes Ingress

    目录 一 Ingress 基础解释 二 ingressController 安装 六 ingress 使用示例 pathType 详细 annotations 基于k8s注解为 nginx 添加功能示例 路径重写 Session Affin
  • k8s删除Terminating 的命名空间等资源

    背景 在k8s中执行删除命名空间后 命名空间没有被删除而是处于Terminating状态 此时再执行删除仍然删除不掉 解决 将要删除的命名空间信息导出为json数据 下面traefik v2 替换成你需要删除的命名空间名称 kubectl
  • k8s中Endpoint是什么

    在Kubernetes K8s 中 Endpoint是一种资源对象 用于表示一个Service所依赖的真实后端节点的Pod信息 它存储了一组IP地址和端口号的列表 这些IP地址和端口号对应着提供相同服务的Pod实例 主要作用 Endpoin
  • k8s--基础--23.1--认证-授权-准入控制--介绍

    k8s 基础 23 1 认证 授权 准入控制 介绍 1 介绍 k8s对我们整个系统的认证 授权 访问控制做了精密的设置 对于k8s集群来说 apiserver是整个就集群访问控制的唯一入口 我们在k8s集群之上部署应用程序的时候 可以通过宿
  • kubernetes最佳实践(三) - kubedns部署

    1 服务发现 kubernetes 提供了 service 的概念可以通过 VIP 访问 pod 提供的服务 但是在使用的时候还有一个问题 怎么知道某个应用的 VIP 比如我们有两个应用 一个 app 一个 是 db 每个应用使用 rc 进
  • 如何解决K8S节点显示NotReady

    文章目录 kubernetes节点断电重启 kubernetes节点断电重启 背景 运行的好好的k8s集群 某天断电 发现一个节点炸了 显示NotReady kubectl get nodes 那么如何查找问题呢 我们用它 journalc
  • kubeadm构建(Calico+Dashboard+Containerd)

    文章目录 前言 一 环境 二 部署容器网络 CNI master操作 1 下载yamll 2 修改yaml 3 部署 三 部署 Dashboard 1 下载yaml 2 修改yaml 3 部署 4 创建管理员 四 切换容器引擎为Contai
  • kubeadm配置虚拟机k8s集群

    环境 centos7 vm pro windows terminal termius 虚拟机 硬件配置 2核2G 实验用 具体可根据电脑调整 配置3台 master01 node01 node02 通过克隆虚拟机直接复制 配置通一项以后建议
  • k8备份与恢复-Velero

    简介 Velero 是一款可以安全的备份 恢复和迁移 Kubernetes 集群资源和持久卷等资源的备份恢复软件 Velero 实现的 kubernetes 资源备份能力 可以轻松实现 Kubernetes 集群的数据备份和恢复 复制 ku
  • kubernetes报错Error from server (AlreadyExists): error when creating "kubernetes-dashboard.yaml": serv

    在执行 kubectl apply f kubernetes dashboard yaml 报错 Error from server AlreadyExists error when creating kubernetes dashboar
  • k8s学习(五)ReplicaSet的使用

    ReplicaSet ReplicaSet 的目的是维护一组在任何时候都处于运行状态的 Pod 副本的稳定集合 可确保指定数量的pod在任何设定的时间运行 因此 它通常用来保证给定数量的 完全相同的 Pod 的可用性 示例 1 nginx
  • 从Docker到Kubernetes——Kubernetes设计解读之ReplicationController、Service

    文章目录 Kubernetes的设计解读 replication controller 设计解读 replication controller 使用示例 service的设计解读 service的使用示例 Kubernetes的设计解读 r

随机推荐

  • PyInstaller 将DLL文件打包进exe

    PyInstaller 将DLL文件打包进exe 方法1 xff1a 通过 add data命令方法2 xff1a 通过修改 spec扩展 xff1a 博主热门文章推荐 xff1a 方法1 xff1a 通过 add data命令 注意 xf
  • PyInstaller 使用UPX压缩减少exe大小

    PyInstaller 使用UPX压缩减少exe大小 1 背景2 下载UPX3 使用UPX博主热门文章推荐 xff1a 1 背景 Python打包成exe文件一大痛点就是文件size过大 xff0c 而使用UPX压缩可以改善一些 xff08
  • Exe合并压缩:将dll等文件依赖压缩到一个exe中

    Exe合并压缩 xff1a 将dll等文件依赖压缩到一个exe中 1 背景2 压缩方法3 配置自解压 xff08 SFX xff09 选项4 执行新的exe博主热门文章推荐 xff1a 1 背景 如果exe对某些dll有依赖 xff0c 并
  • RP2040配置VSCODE开发环境——一劳永逸版

    前言 前面的环境搭建基本上介绍了所有的开发环境配置 xff0c 也对比了各个环境的优劣 个人认为 xff0c 非商业开发的话 xff0c 可能Segger Embedded Studio是最好的 xff0c 但是我不太习惯他的使用方式 这个
  • 如何编辑页面 mediawiki

    Help 如何编辑页面 维基百科 xff0c 自由的百科全书 编辑一个Wiki页面十分容易 只要点击页面上方的 编辑本页 或右侧的 编辑 链接即可修改该页 xff0c 或点击 讨论本页 然后再点击 编辑页面 来讨论该页面 點擊後您就会看到一
  • PyQt6: 多网卡适配器的选择与显示(GPT4帮写)

    PyQt6 多网卡适配器的选择与显示 1 背景2 Python获取本机网卡适配器信息3 PyQT6 UI显示网卡信息4 PyQT6 后台处理 xff1a ButtonComboBox 附 xff1a GPT Output xff1a 博主热
  • Pyqt5的安装(Visual Studio Code)

    Pyqt5的安装 xff08 Visual Studio Code xff09 我的第一个博客就拿我现在正在准备的比赛来写吧 xff01 首先 xff0c 我们得安装一个 xff0c Visual Studio Code 安装的网址如下 x
  • [ WARN:0] global C:\projects\opencv-python\opencv\modules\videoio\src\cap_msmf.cpp (674) SourceReade

    capture 61 cv2 VideoCapture 0 出现警告 xff1a WARN 0 global C projects opencv python opencv modules videoio src cap msmf cpp
  • 租用游艇问题(动态规划)

    问题描述 xff1a 长江游艇俱乐部在长江上设置了n个游艇出租战1 xff0c 2 xff0c xff0c n 游客可以在这些游艇出租站租用游艇 xff0c 并在下游的任何一个游艇出租站归还游艇 游艇出租站 i 到游艇出租站 j 之间的租金
  • 对照JAVA学习Rust(07)--类和结构体

    1 Java类和Rust结构体 对象体结构 xff0c Java的类定义可包括属性和函数 xff0c 或常量 而Rust 结构体里只有属性字段 xff0c 函数需要在关联到架构体使用impl 结构体名如以下例子 JavaRust publi
  • HDU 3700 Cat

    Cat Time Limit 2000 1000 MS Java Others Memory Limit 32768 32768 K Java Others Total Submission s 451 Accepted Submissio
  • 解决supervisorctl引起的java进程oom一启动就被killed

    使用 supervisor 管理进程 当发现 某一个java进程 已启动就被killed 一直以为是程序哪里或者docker的内存有问题 原来是supervisor的一个命令 我的启动 java jar 放在了 某个 bash脚本中 sup
  • 以太网的帧间隙、前导码、帧开始定界符

    每个以太帧之间都要有帧间隙 xff08 Interframe Gap xff09 xff0c 即每发完一个帧后要等待一段时间才能再发 另外一个帧 xff0c 以便让帧接收者对接收的帧作必要的处理 xff08 如调整缓存的指针 更新计数 通知
  • Error: L6218E: Undefined symbol LED_Init (referred from main.o).

    在使用Keil软件的过程中 xff0c 经常会出现这种报错 xff0c undefined symbol xxxx referred from xxx o 这个时候大多是 c文件没有被包含在相应的路径中 xff0c o文件在我们的工程中没有
  • 让老照片重现光彩:Bringing Old Photos Back to Life(实战)

    Bringing Old Photos Back to Life 香港城市大学和微软亚洲研究院的 让老照片重现光彩 xff08 Bringing Old Photos Back to Life xff09 项目侧重于对老照片进行划痕修复和人
  • GitLab配置ssh key:gitlab add an ssh key

    一 检查 创建SSH Key 在用户主目录下 xff0c 看看有没有 ssh目录 xff0c 如果有 xff0c 再看看这个目录下有没有id rsa和id rsa pub这两个文件 xff0c 如果已经有了 xff0c 可直接跳到下一步 如
  • 请求头(request headers)和响应头(response headers)解析

    请求头 xff08 request headers xff09 POST user signin HTTP 1 1 请求方式 文件名 http版本号 Host passport cnblogs com 请求地址 Connection kee
  • Tableau基础操作——连接数据源

    Tableau基础操作 连接数据源 Tableau基础操作 连接数据源 前言 随着大数据时代的到来 xff0c 借助于数据分析工具深入分析并可视化呈现变得越来越重要 而Tableau以其低功能强大且学习成本低被越来越多的企业所使用 一 Ta
  • linux下休眠/待机命令

    if you cat sys power state mem disk you can echo mem gt sys power state 这相当于待机 echo disk gt sys power state 这相当于休眠 from
  • 从零开始离线安装k8s集群

    本文主要用于在内网 xff08 离线 xff09 环境安装k8s集群 xff1b linux环境 centos7 6 主要步骤有 xff1a 安装docker创建dokcer 私有镜像库 registry安装kubernetes安装flan