背景描述: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

二、离线安装包

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

三、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 cni.tar
docker load -i node.tar 
docker load -i pod2daemon-flexvol.tar

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

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐