0


离线安装4:kubernetes(k8s)离线安装

本文内容以语雀为准

说明

  1. 本文以 CentOS 7.9 最小化安装、kubernetes(k8s)1.25.3 为例(其他 CentOS、k8s 版本类似),离线包(免费下载):https://download.csdn.net/download/qq_32596527/87127488。
  2. 如果没有在有网的环境下安装 kubernetes(k8s)成功过,也不影响本文离线安装的阅读与学习。
  3. yum 包准备:可通过查阅 kubernetes(k8s)安装 文中的 yum install *** 命令在后面添加 --downloadonly --downloaddir=./下载的文件夹 下载到指定文件夹中获取,或者使用作者提供安装包。
  4. Docker 镜像准备:可通过学习 kubernetes(k8s)安装 安装成功后,使用命令 ctr -n=k8s.io image list 查询 k8s 安装成功后,当前使用的 Docker 镜像,使用命令 ctr -n=k8s.io image export 导出Docker镜像到磁盘的文件名 Docker镜像名
  5. Docer 镜像导入:ctr -n=k8s.io image Docker镜像导出到磁盘的文件名 Docker镜像名

准备

  1. 已整理的安装包:,下载所需的离线安装包。
  2. 将云盘中的软件安装包解压在一台没有网络的 CentOS 7.9 最小化安装的电脑上。
  3. 如果你的环境不是 CentOS 7.9 最小化安装,或者所需安装的 k8s、Docker、Containerd 的等版本不同时,可以根据下面的命令在有网的电脑上提前下载准备 1. 准备 vim
  1. sudo yum -yinstallvim--downloadonly--downloaddir=./vim
  1. 准备 wget(可忽略)
  1. sudo yum -yinstallwget--downloadonly--downloaddir=./wget
  1. 准备 ntpdate(可忽略)
  1. sudo yum -yinstall ntpdate --downloadonly--downloaddir=./ntpdate
  1. 准备 bash-completion(可忽略,推荐)
  1. sudo yum -yinstall bash-completion --downloadonly--downloaddir=./bash-completion
  1. 准备 Docker、Containerd 安装前的依赖
  1. sudo yum install-y yum-utils device-mapper-persistent-data lvm2 --downloadonly--downloaddir=./docker-before
  1. 准备 Docker 安装包
  1. sudocurl https://download.docker.com/linux/centos/docker-ce.repo > /etc/yum.repos.d/docker-ce.repo
  2. sudo yum makecache
  3. # sudo yum clean all && yum makecache
  1. sudo yum install-y docker-ce docker-ce-cli containerd.io docker-compose-plugin containerd --downloadonly--downloaddir=./docker
  1. 准备 k8s 安装包
  1. cat<<EOF> /etc/yum.repos.d/kubernetes.repo
  2. [kubernetes]
  3. name=Kubernetes
  4. baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
  5. # 是否开启本仓库
  6. enabled=1
  7. # 是否检查 gpg 签名文件
  8. gpgcheck=0
  9. # 是否检查 gpg 签名文件
  10. repo_gpgcheck=0
  11. gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
  12. EOF
  1. sudo yum makecache
  2. # sudo yum clean all && yum makecache
  1. # yum --showduplicates list kubelet --nogpgcheck# yum --showduplicates list kubeadm --nogpgcheck# yum --showduplicates list kubectl --nogpgchecksudo yum install-y kubelet-1.25.3-0 kubeadm-1.25.3-0 kubectl-1.25.3-0 --disableexcludes=kubernetes --nogpgcheck--downloadonly--downloaddir=./k8s
  1. 准备 k8s 初始化 Docker 镜像包,准备 containerd 所需的 Docker 镜像包 pause 1. k8s 1.25.3 所需 pause 的版本是 3.82. 当前使用的 containerd 版本是 1.6.10(最新版,2022-11-22),containerd 1.6.10 所需的 pause 版本是 3.63. 根据上面的描述,需要下载两个 pause 版本4. 可以使用 sudo containerd config default 查看当前 containerd 所需的 pause 版本。5. 如果要修改 containerd 使用的 pause 版本,可以在 /etc/containerd/config.toml 文件中将 pause 的版本与 k8s 设置成一样的。6. 默认安装时, /etc/containerd/config.toml 文件内容较少,并且配置不支持 k8s,需要使用 sudo containerd config default > /etc/containerd/config.toml重新生成配置文件。生成前请备份源文件。
  1. # 在有网的电脑上安装 k8s 后,运行下列命令就可以获取到 k8s 初始化时所需的 docker 镜像了
  2. kubeadm config images list
  3. # k8s 1.25.3 执行结果如下# registry.k8s.io/kube-apiserver:v1.25.3# registry.k8s.io/kube-controller-manager:v1.25.3# registry.k8s.io/kube-scheduler:v1.25.3# registry.k8s.io/kube-proxy:v1.25.3# registry.k8s.io/pause:3.8# registry.k8s.io/etcd:3.5.4-0# registry.k8s.io/coredns/coredns:v1.9.3
  1. # 使用 Docker 拉取镜像:k8s 1.25.3 初始化所需 Docker 镜像如下# 如果你的网络可以直接拉取 registry.k8s.io 域名下的包,则可以直接使用下列命令,并且可以节省操作 Docker 镜像标签的命令# docker pull registry.k8s.io/kube-apiserver:v1.25.3# docker pull registry.k8s.io/kube-controller-manager:v1.25.3# docker pull registry.k8s.io/kube-scheduler:v1.25.3# docker pull registry.k8s.io/kube-proxy:v1.25.3# docker pull registry.k8s.io/pause:3.8# containerd 所需# docker pull registry.k8s.io/pause:3.6# docker pull registry.k8s.io/etcd:3.5.4-0# docker pull registry.k8s.io/coredns/coredns:v1.9.3# 在这里我们使用阿里云Docker镜像来拉取上面的 Docker imagedocker pull registry.aliyuncs.com/google_containers/kube-apiserver:v1.25.3
  2. docker pull registry.aliyuncs.com/google_containers/kube-controller-manager:v1.25.3
  3. docker pull registry.aliyuncs.com/google_containers/kube-scheduler:v1.25.3
  4. docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.25.3
  5. docker pull registry.aliyuncs.com/google_containers/pause:3.8
  6. # containerd 所需docker pull registry.aliyuncs.com/google_containers/pause:3.6
  7. docker pull registry.aliyuncs.com/google_containers/etcd:3.5.4-0
  8. docker pull registry.aliyuncs.com/google_containers/coredns:v1.9.3
  9. docker images
  10. # 将上述的 registry.aliyuncs.com 修改为 registry.k8s.iodocker tag registry.aliyuncs.com/google_containers/kube-apiserver:v1.25.3 registry.k8s.io/kube-apiserver:v1.25.3
  11. docker tag registry.aliyuncs.com/google_containers/kube-scheduler:v1.25.3 registry.k8s.io/kube-scheduler:v1.25.3
  12. docker tag registry.aliyuncs.com/google_containers/kube-controller-manager:v1.25.3 registry.k8s.io/kube-controller-manager:v1.25.3
  13. docker tag registry.aliyuncs.com/google_containers/kube-proxy:v1.25.3 registry.k8s.io/kube-proxy:v1.25.3
  14. docker tag registry.aliyuncs.com/google_containers/pause:3.8 registry.k8s.io/pause:3.8
  15. # containerd 所需docker tag registry.aliyuncs.com/google_containers/pause:3.6 registry.k8s.io/pause:3.6
  16. docker tag registry.aliyuncs.com/google_containers/etcd:3.5.4-0 registry.k8s.io/etcd:3.5.4-0
  17. # 注意这里的名称为 coredns/coredns:v1.9.3 docker tag registry.aliyuncs.com/google_containers/coredns:v1.9.3 registry.k8s.io/coredns/coredns:v1.9.3
  18. # 保存镜像到磁盘docker save -o kube-apiserver-v1.25.3.tar registry.k8s.io/kube-apiserver:v1.25.3
  19. docker save -o kube-controller-manager-v1.25.3.tar registry.k8s.io/kube-controller-manager:v1.25.3
  20. docker save -o kube-scheduler-v1.25.3.tar registry.k8s.io/kube-scheduler:v1.25.3
  21. docker save -o kube-proxy-v1.25.3.tar registry.k8s.io/kube-proxy:v1.25.3
  22. docker save -o pause-3.8.tar registry.k8s.io/pause:3.8
  23. # containerd 所需docker save -o pause-3.6.tar registry.k8s.io/pause:3.6
  24. docker save -o etcd-3.5.4-0.tar registry.k8s.io/etcd:3.5.4-0
  25. docker save -o coredns-v1.9.3.tar registry.k8s.io/coredns/coredns:v1.9.3
  26. # 将上述镜像复制到已安装 k8s、待初始化 k8s 的系统上

下面是 k8s 1.25.3 初始化所需要的 Docker 镜像包

  1. 准备 网络 calico 初始化 Docker 镜像包 本文使用 calico 3.24.5,可以从下面链接中获取

如果要使用其他版本的 calico,请查看 calico.yaml 文件中的 calico/node、calico/cni、calico/kube-controllers 版本,下载对应的 Docker 镜像就可
不同 calico 支持的 k8s 版本不同,请查看 calico 与 k8s 版本的对应关系:https://www.yuque.com/xuxiaowei-com-cn/gitlab-k8s/orkd5pgmgpbrhqui
calico GitHub: https://github.com/projectcalico/calico/blob/v3.24.5/manifests/calico.yaml
calico GitCode 加速镜像: https://gitcode.net/mirrors/projectcalico/calico/-/raw/v3.24.5/manifests/calico.yaml

  1. docker pull docker.io/calico/node:v3.24.5
  2. docker pull docker.io/calico/cni:v3.24.5
  3. docker pull docker.io/calico/kube-controllers:v3.24.5
  4. docker images
  5. docker save -o node-v3.24.5.tar docker.io/calico/node:v3.24.5
  6. docker save -o cni-v3.24.5.tar docker.io/calico/cni:v3.24.5
  7. docker save -o kube-controllers-v3.24.5.tar docker.io/calico/kube-controllers:v3.24.5

安装

  1. 安装 vim
  1. cd ./vim
  2. yum -y localinstall *.rpm
  3. # yum -y install *.rpmcd..
  1. 安装 wget(可忽略)
  1. cd ./wget
  2. yum -y localinstall *.rpm
  3. # yum -y install *.rpmcd..
  1. 安装 ntpdate(可忽略)
  1. cd ./ntpdate
  2. yum -y localinstall *.rpm
  3. # yum -y install *.rpmcd..
  1. 安装 bash-completion(可忽略,推荐)
  1. cd ./bash-completion
  2. yum -y localinstall *.rpm
  3. # yum -y install *.rpmsource /etc/profile
  4. cd..
  1. 安装 Docker、Containerd 安装前的依赖
  1. cd ./docker-before
  2. yum -y localinstall *.rpm
  3. # yum -y install *.rpmcd..
  1. 安装 Docker、Containerd
  1. cd ./docker
  2. yum -y localinstall *.rpm
  3. # yum -y install *.rpmcd..# 启动 docker 时,会启动 containerd# sudo systemctl status containerd.servicesudo systemctl stop containerd.service
  4. sudocp /etc/containerd/config.toml /etc/containerd/config.toml.bak
  5. sudo containerd config default >$HOME/config.toml
  6. sudocp$HOME/config.toml /etc/containerd/config.toml
  7. # 由于是离线安装,提前准备了Docker镜像,所以此处不用修改 pause# https://kubernetes.io/zh-cn/docs/setup/production-environment/container-runtimes/#containerd-systemd# 确保 /etc/containerd/config.toml 中的 disabled_plugins 内不存在 crisudosed-i"s#SystemdCgroup = false#SystemdCgroup = true#g" /etc/containerd/config.toml
  8. sudo systemctl enable--now containerd.service
  9. # sudo systemctl status containerd.service# sudo systemctl status docker.servicesudo systemctl start docker.service
  10. # sudo systemctl status docker.servicesudo systemctl enable docker.service
  11. sudo systemctl enable docker.socket
  12. sudo systemctl list-unit-files |grepdockersudotee /etc/docker/daemon.json <<-'EOF'
  13. {
  14. "registry-mirrors": ["https://hnkfbj7x.mirror.aliyuncs.com"],
  15. "exec-opts": ["native.cgroupdriver=systemd"]
  16. }
  17. EOFsudo systemctl daemon-reload
  18. sudo systemctl restart dockersudodocker info
  1. sudo systemctl status docker.service
  1. sudo systemctl status containerd.service
  1. 安装 k8s
  1. # 设置所需的 sysctl 参数,参数在重新启动后保持不变cat<<EOF|sudotee /etc/sysctl.d/k8s.conf
  2. net.bridge.bridge-nf-call-iptables = 1
  3. net.bridge.bridge-nf-call-ip6tables = 1
  4. net.ipv4.ip_forward = 1
  5. EOF
  1. # 应用 sysctl 参数而不重新启动sudosysctl--system
  1. cd k8s
  2. yum -y localinstall *.rpm
  3. # yum -y install *.rpmcd..
  4. systemctl daemon-reload
  5. sudo systemctl restart kubelet
  6. sudo systemctl enable kubelet
  1. 导入k8s 初始化时所需的Docker镜像
  1. cd init-images
  2. # 注意这里指定了命名空间为 k8s.io
  3. ctr -n=k8s.io image import kube-apiserver-v1.25.3.tar
  4. ctr -n=k8s.io image import kube-controller-manager-v1.25.3.tar
  5. ctr -n=k8s.io image import kube-scheduler-v1.25.3.tar
  6. ctr -n=k8s.io image import kube-proxy-v1.25.3.tar
  7. ctr -n=k8s.io image import pause-3.8.tar
  8. # containerd 使用
  9. ctr -n=k8s.io image import pause-3.6.tar
  10. ctr -n=k8s.io image import etcd-3.5.4-0.tar
  11. ctr -n=k8s.io image import coredns-v1.9.3.tar
  12. ctr -n=k8s.io images list
  13. ctr i list
  14. cd..
  1. 将主机名指向本机IP,主机名只能包含:字母、数字、-(横杠)、.(点)1. 获取主机名
  1. hostname
  1. 临时设置主机名
  1. hostname 主机名
  1. 永久设置主机名
  1. sudoecho'主机名'> /etc/hostname
  1. 编辑 hosts
  1. sudovim /etc/hosts

控制面板:设置IP

  1. 当前机器的IP 当前机器的主机名
  1. 关闭防火墙、或者开通指定端口
  1. sudo systemctl stop firewalld.service
  2. sudo systemctl disable firewalld.service
  1. # 控制面板
  2. firewall-cmd --zone=public --add-port=6443/tcp --permanent# Kubernetes API server 所有
  3. firewall-cmd --zone=public --add-port=2379/tcp --permanent# etcd server client API kube-apiserver, etcd
  4. firewall-cmd --zone=public --add-port=2380/tcp --permanent# etcd server client API kube-apiserver, etcd
  5. firewall-cmd --zone=public --add-port=10250/tcp --permanent# Kubelet API 自身, 控制面
  6. firewall-cmd --zone=public --add-port=10259/tcp --permanent# kube-scheduler 自身
  7. firewall-cmd --zone=public --add-port=10257/tcp --permanent# kube-controller-manager 自身
  8. firewall-cmd --zone=trusted --add-source=192.168.80.60 --permanent# 信任集群中各个节点的IP
  9. firewall-cmd --zone=trusted --add-source=192.168.80.16 --permanent# 信任集群中各个节点的IP
  10. firewall-cmd --add-masquerade --permanent# 端口转发
  11. firewall-cmd --reload
  12. firewall-cmd --list-all
  13. firewall-cmd --list-all --zone=trusted
  14. # 工作节点
  15. firewall-cmd --zone=public --add-port=10250/tcp --permanent# Kubelet API 自身, 控制面
  16. firewall-cmd --zone=public --add-port=30000-32767/tcp --permanent# NodePort Services† 所有
  17. firewall-cmd --zone=trusted --add-source=192.168.80.60 --permanent# 信任集群中各个节点的IP
  18. firewall-cmd --zone=trusted --add-source=192.168.80.16 --permanent# 信任集群中各个节点的IP
  19. firewall-cmd --add-masquerade --permanent# 端口转发
  20. firewall-cmd --reload
  21. firewall-cmd --list-all
  22. firewall-cmd --list-all --zone=trusted
  1. 关闭交换空间
  1. sudo swapoff -asudosed-i's/.*swap.*/#&/' /etc/fstab
  1. k8s 初始化
  1. # 由于导入的 Docker 镜像已经修改为原始的名称,故此处初始化无需增加 --image-repository=registry.aliyuncs.com/google_containers
  2. kubeadm init
  3. # 指定集群的IP# kubeadm init --image-repository=registry.aliyuncs.com/google_containers --apiserver-advertise-address=192.168.80.60mkdir-p$HOME/.kube
  4. sudocp-i /etc/kubernetes/admin.conf $HOME/.kube/config
  5. sudochown$(id-u):$(id-g)$HOME/.kube/config
  6. kubectl cluster-info
  7. # 初始化失败后,可进行重置,重置命令:kubeadm reset# 执行成功后,会出现类似下列内容:# kubeadm join 192.168.80.60:6443 --token f9lvrz.59mykzssqw6vjh32 \# --discovery-token-ca-cert-hash sha256:4e23156e2f71c5df52dfd2b9b198cce5db27c47707564684ea74986836900107
  1. 网络初始化 下载 calico.yaml 文件,复制到电脑上 calico GitHub: https://github.com/projectcalico/calico/blob/v3.24.5/manifests/calico.yaml

calico GitCode 加速镜像: https://gitcode.net/mirrors/projectcalico/calico/-/raw/v3.24.5/manifests/calico.yaml

  1. cd calico
  2. ctr -n=k8s.io image import node-v3.24.5.tar
  3. ctr -n=k8s.io image import cni-v3.24.5.tar
  4. ctr -n=k8s.io image import kube-controllers-v3.24.5.tar
  5. cd..
  1. # 增加 DNSvim /etc/resolv.conf
  1. # 没有DNS时随便写一个
  2. nameserver 192.168.10.1
  1. kubectl apply -f calico.yaml
  1. 查看集群
  1. kubectl get pods --all-namespaces -o wide
  1. kubectl get nodes -o wide
  1. 关于去污、创建实例、其他命令,参见kubernetes(k8s)安装

本文转载自: https://blog.csdn.net/qq_32596527/article/details/129293554
版权归原作者 徐晓伟 所有, 如有侵权,请联系我们删除。

“离线安装4:kubernetes(k8s)离线安装”的评论:

还没有评论