生产环境 CentOS 7 k8s v1.28.0离线部署

背景描述:CentOS 7 Kubernetes 离线部署

随着云计算和微服务架构的普及,Kubernetes(K8s)已经成为容器编排的标准工具。它能够自动化应用的部署、扩展和管理,使得开发和运维的工作更加高效和可靠。然而,在一些特定场景下,由于安全性、网络隔离或企业政策等原因,无法直接访问互联网。在这种情况下,需要在离线环境中部署Kubernetes集群。

一、服务器初始化与docker环境准备工作

参考链接:

生产环境:CentOS 7 Docker 20.10.19离线部署(为离线部署k8s做准备)-CSDN博客文章浏览阅读30次。然而,在某些场景下,由于安全性、网络隔离或企业政策等原因,无法直接访问互联网。这种情况下,需要在离线环境中部署Docker。因此,需要提前下载好所有需要的组件,并在离线环境中进行部署。: 由于数据安全和保密需求,某些机构(如金融机构、政府部门)要求系统不能直接访问外部网络,以防止数据泄露和网络攻击。: 为了简化离线环境下的部署流程,可能需要使用一些辅助工具(如Docker Compose)进行批量部署和管理。: 所有与Docker相关的依赖包及其特定版本需要提前下载,并确保在离线环境中兼容。https://blog.csdn.net/luckysign/article/details/139971133?spm=1001.2014.3001.5502

二、离线安装包

夸克网盘分享夸克网盘是夸克推出的一款云服务产品,功能包括云存储、高清看剧、文件在线解压、PDF一键转换等。通过夸克网盘可随时随地管理和使用照片、文档、手机资料,目前支持Android、iOS、PC、iPad。https://pan.quark.cn/s/2993ae170aac#/list/share

三、k8s离线部署

复制代码
#k8s离线部署
cd k8s_rpm

#都进行了强制安装
rpm -ivh 0e6cee78a8e883b6dab6fa113d71f911167b293c58b88953ade826dc1a514ff4-kubelet-1.28.0-0.x86_64.rpm --nodeps --force
rpm -ivh 0f2a2afd740d476ad77c508847bad1f559afc2425816c1f2ce4432a62dfe0b9d-kubernetes-cni-1.2.0-0.x86_64.rpm --nodeps --force
rpm -ivh 3f5ba2b53701ac9102ea7c7ab2ca6616a8cd5966591a77577585fde1c434ef74-cri-tools-1.26.0-0.x86_64.rpm --nodeps --force
rpm -ivh 4aa17ffad1fe0dcaa0d37972a13f34a218bbb6dcc39e535a605412b451d2440e-kubectl-1.28.0-0.x86_64.rpm --nodeps --force
rpm -ivh b7b8fe5a134063b5e5c7794675609bd6a06d334930cfdb4b1ae4e9cdd4f70220-kubeadm-1.28.0-0.x86_64.rpm --nodeps --force
rpm -ivh conntrack-tools-1.4.4-7.el7.x86_64.rpm --nodeps --force
rpm -ivh libnetfilter_cthelper-1.0.0-11.el7.x86_64.rpm --nodeps --force
rpm -ivh libnetfilter_cttimeout-1.0.0-7.el7.x86_64.rpm --nodeps --force
rpm -ivh libnetfilter_queue-1.0.2-2.el7_2.x86_64.rpm --nodeps --force
rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm --nodeps --force



#kubelet配置更新
vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
#kubelet加入开机自启
systemctl enable kubelet

#k8s---node节点启动需要用到的离线镜像
cd k8s_tar
docker load -i coredns.tar
docker load -i etcd.tar
docker load -i kube-apiserver.tar
docker load -i kube-controller-manager.tar
docker load -i kube-proxy.tar
docker load -i kube-scheduler.tar
docker load -i pause.tar

#将your_master_IP替换成master节点的地址

kubeadm init \
  --apiserver-advertise-address=your_master_IP  \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.28.0 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16 \
--cri-socket=unix:///var/run/cri-dockerd.sock \
  --ignore-preflight-errors=all
  • --apiserver-advertise-address 集群通告地址
  • --image-repository 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
  • --kubernetes-version K8s版本,与上面安装的一致
  • --service-cidr 集群内部虚拟网络,Pod统一访问入口
  • --pod-network-cidr Pod网络,与下面部署的CNI网络组件yaml中保持一致
  • --cri-socket 指定cri-dockerd接口,如果是containerd则使用--cri-socket unix:///run/containerd/containerd.sock

初始化完成后,最后会输出一个join命令,先记住,下面加入节点会用到。

接着,拷贝kubectl使用的连接k8s认证文件到默认路径:

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

此时就可以使用kubectl工具管理K8s集群了,例如查看工作节点:

复制代码
kubectl get nodes

# NAME               STATUS     ROLES            AGE   VERSION
# k8s-master     NotReady   control-plane        20s   v1.28.0

# 注:由于网络插件还没有部署,节点会处于NotReady状态

四、node节点部署

向集群添加新节点,执行在kubeadm init输出的kubeadm join命令并手动加上--cri-socket=unix:///var/run/cri-dockerd.sock:

复制代码
#此命令为举例,仅为参考

kubeadm join your_master_IP:6443 --token j18dc5.suswnyrc6i7wzzqn --discovery-token-ca-cert-hash sha256:e52e2853720893129ed594984e05ea89965492feee215ab067aa821188bd288d  --cri-socket=unix:///var/run/cri-dockerd.sock

为了安全性,上述命令中的token,默认有效期为24小时,当过期后,就无法使用该命令再加入节点了。需要重新生成加入节点命令:

复制代码
kubeadm token create --print-join-command
4.1集群部署报错重置集群命令
复制代码
#当初始化中途出现报错时,先重置集群,后重新初始化集群(正在运行的生产环境谨慎使用,会造成整个集群配置与pod格式化造成数据丢失)
kubeadm reset
systemctl daemon-reload
systemctl restart kubelet

五、网络插件部署(镜像未测试还需要完善)

复制代码
#部署calico插件:
cd calico_tar
docker load -i 
docker load -i 
docker load -i 

cd ..
kubectl apply -f calico.yaml


#查看部署CNI网络插件进度:
kubectl get pods -n kube-system

验证集群状态

复制代码
#再次在Master节点使用kubectl工具查看节点状态:
kubectl get nodes
#再次在Master节点使用kubectl工具查看节点
kubectl get pod -n kube-system
kubectl get pod -n kube-system -owide
#查看集群健康状态:
kubectl get cs
#查看集群健康状态命令
kubectl cluster-info
相关推荐
虾..8 小时前
Linux 软硬链接和动静态库
linux·运维·服务器
Evan芙8 小时前
Linux常见的日志服务管理的常见日志服务
linux·运维·服务器
hkhkhkhkh12310 小时前
Linux设备节点基础知识
linux·服务器·驱动开发
HZero.chen11 小时前
Linux字符串处理
linux·string
张童瑶11 小时前
Linux SSH隧道代理转发及多层转发
linux·运维·ssh
汪汪队立大功12311 小时前
什么是SELinux
linux
石小千11 小时前
Linux安装OpenProject
linux·运维
柏木乃一11 小时前
进程(2)进程概念与基本操作
linux·服务器·开发语言·性能优化·shell·进程
Lime-309011 小时前
制作Ubuntu 24.04-GPU服务器测试系统盘
linux·运维·ubuntu
百年渔翁_肯肯12 小时前
Linux 与 Unix 的核心区别(清晰对比版)
linux·运维·unix