zl程序教程

您现在的位置是:首页 >  后端

当前栏目

kubernetes 集群离线部署

2023-06-13 09:15:13 时间

本文主要阐述在生产环境不可连接互联网的情况下如何离线搭建K8S 集群。

1.离线安装包准备

  • 下载kubelet,kubectl ,kubeadm 安装包

在可联网的linux 环境执行以下命令,查看可下载的kubelet版本

yum list kubelet --showduplicates | sort -r    

以下载1.18.8 版本为例

yum install --downloadonly --downloaddir=/home/centos/k8s kubelet-1.18.8 kubeadm-1.18.8 kubectl-1.18.8

  • 获取镜像列表
kubeadm config images list
k8s.gcr.io/kube-apiserver:v1.18.8
k8s.gcr.io/kube-controller-manager:v1.18.8
k8s.gcr.io/kube-scheduler:v1.18.8
k8s.gcr.io/kube-proxy:v1.18.8
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.7

通过外部联网环境拉去docker 镜像,下载示例

docker pull k8s.gcr.io/kube-apiserver:v1.18.8

保存镜像

docker save -o  kube-apiserver.tar k8s.gcr.io/kube-apiserver:v1.18.8

镜像传输到离线环境

docker load -i kube-apiserver.tar

  • 下载docker 安装包

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

或者使用命令下载rpm 包

yum install --downloadonly --downloaddir=./  docker-ce docker-ce-cli-y

  • 下载docker 私有仓库register

1.在有外网环境的docker中下载镜像

docker pull registry:2

2.从image导出镜像

docker save -o registry.tar registry:2

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

docker load -i registry.tar

2.离线包安装

docker 安装

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

上传到指定服务器,安装命令

rpm -ivh *.rpm

docker info 查看docker信息

修改cgoupdriver为systemd与k8b保持一致,

vim /etc/docker/daemon.json

进行以下修改

{

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

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

}
systemctl  daemon-reload

启动docker

systemctl  restart docker

设置开机启动

systemctl enabel docker

docker 仓库安装

启动register

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

修改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

安装K8S

环境准备

  • 关闭防火墙
systemctl disable firewalld.service
systemctl stop firewalld.service
  • 设置时间同步
yum install ntpdate ‐y 
ntpdate time.windows.com
  • 关闭swap
swapoff -a  #临时关闭
vim /etc/fstab   #永久关闭 

#注释掉swap这行

# /dev/mapper/centos‐swap swap swap defaults 0 0

systemctl reboot#重启生效

free ‐m #查看下swap交换区是否都为0,如果都为0则swap关闭成功

关闭selinux

sed ‐i "s/enforcing/disabled/" /etc/selinux/config  #永久关闭

允许 iptables 检查桥接流量

确保 br_netfilter 模块被加载。这一操作可以通过运行 lsmod | grep br_netfilter 来完成。若要显式加载该模块,可执行 sudo modprobe br_netfilter

为了让你的 Linux 节点上的 iptables 能够正确地查看桥接流量,你需要确保在你的 sysctl 配置中将 net.bridge.bridge-nf-call-iptables 设置为 1。例如:

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system

安装 kubeadm、kubelet 和 kubectl 本地安装包

yum localinstall *.rpm

初始化控制平面节点(mater)

kubeadm init <args>

--kubernetes-version v1.18.8 指定版本
--apiserver-advertise-address 为通告给其它组件的IP,一般应为master节点的IP地址
--service-cidr 指定service网络,不能和node网络冲突
--pod-network-cidr 指定pod网络,不能和node网络、service网络冲突
--image-repository registry.aliyuncs.com/google_containers 指定镜像源,由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址。
kubeadm init --apiserver-advertise-address=192.168.17.149--image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.8--pod-network-cidr=10.10.0.0/16--service-cidr=10.20.0.0/16

要使非 root 用户可以运行 kubectl,请运行以下命令, 它们也是 kubeadm init 输出的一部分:

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

或者,如果你是 root 用户,则可以运行:

export KUBECONFIG=/etc/kubernetes/admin.conf

#查看kubectl是否能正常使用

kubectl get nodes

安装 Pod 网络附加组件(master)

每个集群只能安装一个 Pod 网络。

安装 Pod 网络后,您可以通过在 kubectl get pods --all-namespaces 输出中检查 CoreDNS Pod 是否 Running 来确认其是否正常运行。 一旦 CoreDNS Pod 启用并运行,你就可以继续加入节点。

安装POD network Flannel(DamonSet)

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

复制

修改kube-flannel.yml

更改 128行的网络配置,要和 pod-network-cidr保持一致

cat kube-flannel.yml | grep Network

kubectl  apply -f kube-flannel.yaml

如果您的网络无法正常工作或 CoreDNS 不在“运行中”状态,请查看kubeadm故障排除指南

kubectl -n kube-system get pods -o wide   #查看是否创建成功

加入节点(NODE执行)

NODE 节点也需要安装 kubeadm、kubelet 和 kubectl

kubeadm join 192.168.17.149:6443--token gfs8qb.shcvgzxrcflaw19m \     --discovery-token-ca-cert-hash sha256:a47db38d409c8135969aeee18b1371230dfabfd8fed860691b02f717543a8f85