你们交学费做网站,寿宁县建设局网站,一站式营销推广平台,游戏网站怎么制作文章目录一、概述二、前期准备1#xff09;节点信息2#xff09;修改主机名和配置hosts3#xff09;配置ssh互信4#xff09;时间同步5#xff09;关闭防火墙6#xff09;关闭 swap7#xff09;禁用SELinux8#xff09;允许 iptables 检查桥接流量三、开始部署1#x…
文章目录一、概述二、前期准备1节点信息2修改主机名和配置hosts3配置ssh互信4时间同步5关闭防火墙6关闭 swap7禁用SELinux8允许 iptables 检查桥接流量三、开始部署1离线安装 docker1、下载2、解压的docker文件夹全部移动至/usr/bin目录3、配置 docker 启动文件4、启动 docker 服务5、配置镜像下载加速器和 cgroupdriver2离线安装 kubeadm, kubelet, kubectl1、下载2、配置 kubeadm 启动文件3、导入镜像4、启动 kubelet3集群初始化1、安装 keepalived 生成 VIP 实现高可用2、创建初始化配置文件3、k8s 集群初始化4、安装 cni 插件flannel4添加 master 节点5添加 node 节点6配置 IPVS1、加载ip_vs相关内核模块2、离线安装 ipvsadm 工具3、编辑kube-proxy配置文件mode修改成ipvs4、重启kube-proxy7安装 ingress-nginx8安装 nfs provisioner1、安装helm2、添加helm仓库源3、安装 nfs3、nfs provisioner9安装 Dashboard1、安装2、创建登录用户3、创建并获取登录token4、登录 web10安装镜像仓库 Harbor1、创建证书2、创建证书秘钥3、添加 Chart 库4、开始部署 harbor5、查看5、web 访问一、概述
Kubernetes是一种高度可扩展的容器编排平台可用于部署、管理和自动化容器化应用程序的运行。在某些情况下离线部署Kubernetes可能是必需的例如在没有互联网连接的安全环境中或在网络连接不可靠的情况下。以下是离线部署Kubernetes的一般步骤 获取Kubernetes二进制文件从Kubernetes官网下载Kubernetes二进制文件并解压缩到本地。 准备离线镜像在离线环境中必须将所需的容器镜像下载到本地并存储在本地仓库中。可以使用Docker镜像导出/导入命令或Docker Registry Mirror工具将镜像从在线环境中导出并导入到离线环境中。 配置Kubernetes节点在每个节点上安装必要的依赖项例如Docker引擎、kubelet、kubeadm等。可以使用Docker离线安装程序将Docker引擎安装到离线节点中。 初始化Kubernetes集群使用kubeadm init命令初始化集群并将必要的配置文件和证书复制到节点上。在离线环境中必须将kubelet和kubeadm所需的配置文件手动复制到每个节点上。 加入节点使用kubeadm join命令将新节点加入到集群中。在离线环境中必须手动复制kubelet和kubeadm配置文件并在每个节点上使用kubeadm join命令将节点加入集群。 部署应用程序使用kubectl命令在集群中部署应用程序并将所需的容器镜像从本地仓库中拉取。
在离线环境中部署Kubernetes需要一些额外的工作但是这是可能的并且是部署Kubernetes的重要方法之一。 k8s 在线部署可以参考我以下几篇文章 Kubernetesk8s安装以及搭建k8s-Dashboard详解 Kubernetesk8s最新版最完整版环境部署master高可用实现k8sV1.24.1dashboardharbor 【云原生】k8s 一键部署ansible
二、前期准备
1节点信息
节点信息
主机名IP角色操作系统k8s 版本local-168-182-110192.168.182.110master、keepalivedVIP192.168.182.211、nfs-servercentos71.23.6local-168-182-111192.168.182.111master、keepalived、nfs-clientcentos71.23.6local-168-182-112192.168.182.112master、nfs-clientcentos71.23.6local-168-182-113192.168.182.113node、nfs-clientcentos71.23.6
k8s 版本https://github.com/kubernetes/kubernetes/tree/master/CHANGELOG
2修改主机名和配置hosts
修改主机名
# 在192.168.182.110执行
hostnamectl set-hostname local-168-182-110# 在192.168.182.111执行
hostnamectl set-hostname local-168-182-110# 在192.168.182.112执行
hostnamectl set-hostname local-168-182-110# 在192.168.182.113执行
hostnamectl set-hostname local-168-182-110配置hosts
cat /etc/hostsEOF
192.168.182.110 local-168-182-110
192.168.182.111 local-168-182-111
192.168.182.112 local-168-182-112
192.168.182.113 local-168-182-113
# VIP
cluster-endpoint 192.168.182.211
EOF3配置ssh互信
# 直接一直回车就行
ssh-keygenssh-copy-id -i ~/.ssh/id_rsa.pub rootlocal-168-182-110
ssh-copy-id -i ~/.ssh/id_rsa.pub rootlocal-168-182-111
ssh-copy-id -i ~/.ssh/id_rsa.pub rootlocal-168-182-112
ssh-copy-id -i ~/.ssh/id_rsa.pub rootlocal-168-182-1134时间同步
yum install chrony -y
systemctl start chronyd
systemctl enable chronyd
chronyc sources5关闭防火墙
systemctl stop firewalld
systemctl disable firewalld6关闭 swap
# 临时关闭关闭swap主要是为了性能考虑
swapoff -a
# 可以通过这个命令查看swap是否关闭了
free
# 永久关闭
sed -ri s/.*swap.*/#/ /etc/fstab7禁用SELinux
# 临时关闭
setenforce 0
# 永久禁用
sed -i s/^SELINUXenforcing$/SELINUXdisabled/ /etc/selinux/config8允许 iptables 检查桥接流量
若要显式加载此模块请运行 sudo modprobe br_netfilter通过运行 lsmod | grep br_netfilter 来验证 br_netfilter 模块是否已加载
sudo modprobe br_netfilter
lsmod | grep br_netfilter为了让 Linux 节点的 iptables 能够正确查看桥接流量请确认 sysctl 配置中的 net.bridge.bridge-nf-call-iptables 设置为 1。 例如
cat EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOFsudo modprobe overlay
sudo modprobe br_netfilter# 设置所需的 sysctl 参数参数在重新启动后保持不变
cat EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables 1
net.bridge.bridge-nf-call-ip6tables 1
net.ipv4.ip_forward 1
EOF# 应用 sysctl 参数而不重新启动
sudo sysctl --system三、开始部署
下载地址https://download.docker.com/linux/static/stable/x86_64/
镜像、安装包、kube-flannel.yml、deploy.yaml等资源可关注我的公众号【大数据与云原生技术分享】回复【k8s】即可获取。
1离线安装 docker
1、下载
# 下载
wget https://download.docker.com/linux/static/stable/x86_64/docker-20.10.20.tgz
# 解压
tar -zxvf docker-20.10.20.tgz2、解压的docker文件夹全部移动至/usr/bin目录
cp -p docker/* /usr/bin3、配置 docker 启动文件
在/usr/lib/systemd/system/目录下创建docker.service文件
cat /usr/lib/systemd/system/docker.service EOF
[Unit]
DescriptionDocker Application Container Engine
Documentationhttp://docs.docker.com
Afternetwork.target docker.socket
[Service]
Typenotify
EnvironmentFile-/run/flannel/docker
WorkingDirectory/usr/local/bin
ExecStart/usr/bin/dockerd \-H tcp://0.0.0.0:4243 \-H unix:///var/run/docker.sock \--selinux-enabledfalse \--log-opt max-size1g
ExecReload/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILEinfinity
LimitNPROCinfinity
LimitCOREinfinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMaxinfinity
TimeoutStartSec0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegateyes
# kill only the docker process, not all processes in the cgroup
KillModeprocess
Restarton-failure
[Install]
WantedBymulti-user.target
EOF4、启动 docker 服务
systemctl daemon-reload# 设置为开机自启并现在立刻启动服务 --now立刻启动服务
systemctl enable --now docker# 查看容器状态
systemctl status docker5、配置镜像下载加速器和 cgroupdriver
cat /etc/docker/daemon.jsonEOF
{registry-mirrors: [http://hub-mirror.c.163.com],exec-opts: [native.cgroupdriversystemd]
}
EOFsystemctl restart docker2离线安装 kubeadm, kubelet, kubectl
1、下载
下载地址https://github.com/kubernetes/kubernetes/tree/master/CHANGELOG
wget https://dl.k8s.io/v1.23.6/kubernetes-server-linux-amd64.tar.gztar -xf kubernetes-server-linux-amd64.tar.gz
cd kubernetes/server/bin
cp -ar kubelet kubeadm kubectl /usr/bin/2、配置 kubeadm 启动文件
cat /usr/lib/systemd/system/kubelet.service EOF
[Unit]
Descriptionkubelet: The Kubernetes Node Agent
Documentationhttps://kubernetes.io/docs/
[Service]
ExecStart/usr/bin/kubelet
Restartalways
StartLimitInterval0
RestartSec10
[Install]
WantedBymulti-user.target
EOF
#注意ExecStart内容换行
mkdir -p /usr/lib/systemd/system/kubelet.service.d/
cat /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf EOF
[Service]
EnvironmentKUBELET_KUBECONFIG_ARGS--bootstrap-kubeconfig/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig/etc/kubernetes/kubelet.conf
EnvironmentKUBELET_CONFIG_ARGS--config/var/lib/kubelet/config.yaml
EnvironmentFile-/var/lib/kubelet/kubeadm-flags.env
EnvironmentFile-/etc/sysconfig/kubelet
ExecStart
ExecStart/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS
EOF3、导入镜像
下载资源包解压进入images目录执行以下命令就可以导入镜像了
sh image_load.sh4、启动 kubelet
# 设置为开机自启并现在立刻启动服务 --now立刻启动服务
systemctl enable --now kubelet3集群初始化
1、安装 keepalived 生成 VIP 实现高可用
【1】下载 下载地址https://www.keepalived.org/download.html
wget https://www.keepalived.org/software/keepalived-2.2.7.tar.gz --no-check-certificatetar -zxvf keepalived-2.2.7.tar.gz# 安装openssl编译keepalived需要
yum -y install openssl openssl-devel# 编译 keepalived
yum install gcc -ycd keepalived-2.2.7 ./configure --prefix/usr/local/keepalived --sysconf/etc
make make install# 配置环境变量
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/keepalived【2】master 配置
cat /etc/keepalived/keepalived.confEOF
! Configuration File for keepalived
global_defs {#每个keepalived取个不同名称router_id 56
}
vrrp_instance VI_1 {# MASTER为主实例,BACKUP 为从实例state MASTER# 网卡名称interface ens33# 主备这里要配置为同样的 virtual_router_id 68# 优先级,主要高于备. 一般主配置为100 备配置为80priority 100advert_int 1# 主动抢占,主备都开启的话,服务器抢占过去后,要等这个服务器keepalived停掉才会漂移到另一台nopreemptauthentication {# 主备必须配置成同样的auth_type PASS# 主备必须配置成同样的auth_pass 1111}virtual_ipaddress {# vip,主备必须配置一样192.168.182.211}
}
EOF【3】backend 配置
cat /etc/keepalived/keepalived.confEOF
! Configuration File for keepalived
global_defs {#每个keepalived取个不同名称router_id 56
}
vrrp_instance VI_1 {# MASTER为主实例,BACKUP 为从实例state BACKUP# 网卡名称interface ens33# 主备这里要配置为同样的 virtual_router_id 68# 优先级,主要高于备. 一般主配置为100 备配置为80priority 80advert_int 1# 主动抢占,主备都开启的话,服务器抢占过去后,要等这个服务器keepalived停掉才会漂移到另一台nopreemptauthentication {# 主备必须配置成同样的auth_type PASS# 主备必须配置成同样的auth_pass 1111}virtual_ipaddress {# vip,主备必须配置一样192.168.182.211}
}
EOF【4】配置服务启动
cat /usr/lib/systemd/system/keepalived.service EOF
[Unit]
DescriptionLVS and VRRP High Availability Monitor
Afternetwork-online.target syslog.target
Wantsnetwork-online.target
Documentationman:keepalived(8)
Documentationman:keepalived.conf(5)
Documentationman:genhash(1)
Documentationhttps://keepalived.org[Service]
Typeforking
PIDFile/run/keepalived.pid
KillModeprocess
EnvironmentFile-/usr/local/keepalived/sysconfig/keepalived
ExecStart/usr/local/keepalived/sbin/keepalived $KEEPALIVED_OPTIONS
ExecReload/bin/kill -HUP $MAINPID[Install]
WantedBymulti-user.targetEOF【5】启动 keepalived
systemctl daemon-reload
systemctl enable --now keepalived2、创建初始化配置文件
注意这里使用VIP
kubeadm config print init-defaults kubeadm-config.yaml3、k8s 集群初始化
这里追加tee命令将初始化日志输出到kubeadm-init.log中以备用可选。
kubeadm init --configkubeadm-config.yaml --experimental-upload-certs | tee kubeadm-init.log或者直接初始化
kubeadm init \--apiserver-advertise-address192.168.182.211 \--image-repository registry.aliyuncs.com/google_containers \--control-plane-endpointcluster-endpoint \--kubernetes-version v1.23.6 \--service-cidr10.1.0.0/16 \--pod-network-cidr10.244.0.0/16 \--v54、安装 cni 插件flannel
# wget https://raw.githubusercontent.com/flannel-io/flannel/v0.20.2/Documentation/kube-flannel.yml
kubeclt apply -f kube-flannel.yml4添加 master 节点
# 在需要添加的master节点上执行CERT_KEYssh cluster-endpoint kubeadm init phase upload-certs --upload-certs|tail -1join_strssh cluster-endpoint kubeadm token create --print-join-commandecho $join_str --control-plane --certificate-key $CERT_KEY --v5# 拿到上面打印的命令在需要添加的节点上执行# --control-plane 标志通知 kubeadm join 创建一个新的控制平面。加入master必须加这个标记
# --certificate-key ... 将导致从集群中的 kubeadm-certs Secret 下载控制平面证书并使用给定的密钥进行解密。这里的值就是上面这个命令kubeadm init phase upload-certs --upload-certs打印出的key。mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config# 去掉master污点
# kubectl taint nodes hostname node-role.kubernetes.io/master:NoSchedule- 2/dev/null
# kubectl taint nodes hostname node.kubernetes.io/not-ready:NoSchedule- 2/dev/null5添加 node 节点 CERT_KEYssh cluster-endpoint kubeadm init phase upload-certs --upload-certs|tail -1join_strssh cluster-endpoint kubeadm token create --print-join-commandecho $join_str --certificate-key $CERT_KEY --v56配置 IPVS
1、加载ip_vs相关内核模块
modprobe -- ip_vs
modprobe -- ip_vs_sh
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
# 验证开启了ipvs
lsmod |grep ip_vs2、离线安装 ipvsadm 工具
在线安装就非常简单了
yum install ipvsadm -y下载地址http://www.linuxvirtualserver.org/software/ipvs.html
wget https://kernel.org/pub/linux/utils/kernel/ipvsadm/ipvsadm-1.31.tar.gz --no-check-certificate
tar -xzvf ipvsadm-1.31.tar.gz cd ipvsadm-1.31# 先安装依赖包
yum install -y libnl libnl-devel gcc
# 编译安装
make make install# 查看版本号
ipvsadm -version3、编辑kube-proxy配置文件mode修改成ipvs
kubectl edit configmap -n kube-system kube-proxy4、重启kube-proxy
# 先查看
kubectl get pod -n kube-system | grep kube-proxy
# 再delete让它自拉起
kubectl get pod -n kube-system | grep kube-proxy |awk {system(kubectl delete pod $1 -n kube-system)}
# 再查看
kubectl get pod -n kube-system | grep kube-proxy7安装 ingress-nginx
# wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.2.0/deploy/static/provider/cloud/deploy.yaml -O /tmp/deploy.yamlkubectl apply -f /tmp/deploy.yaml8安装 nfs provisioner
1、安装helm
helm安装包在提供的资源包里也是有的可以不用再去外网下载的。
# 下载包
wget https://get.helm.sh/helm-v3.7.1-linux-amd64.tar.gz -O /tmp/helm-v3.7.1-linux-amd64.tar.gz
# 解压压缩包
tar -xf /tmp/helm-v3.7.1-linux-amd64.tar.gz -C /root/
# 制作软连接
ln -s /root/linux-amd64/helm /usr/local/bin/helm2、添加helm仓库源
# 添加helm仓库源
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/3、安装 nfs
【服务端】
#### 安装nfs
yum -y install nfs-utils rpcbind# 服务端
mkdir -p /opt/nfsdata
# 授权共享目录
chmod 666 /opt/nfsdata
cat /etc/exportsEOF
/opt/nfsdata *(rw,no_root_squash,no_all_squash,sync)
EOF
# 配置生效
exportfs -rsystemctl enable --now rpcbind
systemctl enable --now nfs-server【客户端】
yum -y install rpcbind
systemctl enable --now rpcbind3、nfs provisioner
### helm安装nfs provisioner安装包在提供的资源里也有可以不用再去外网下载
helm install nfs-subdir-external-provisioner ./nfs-subdir-external-provisioner-4.0.17.tgz \--namespacenfs-provisioner \--create-namespace \--set image.repositorywilldockerhub/nfs-subdir-external-provisioner \--set image.tagv4.0.2 \--set replicaCount2 \--set storageClass.namenfs-client \--set storageClass.defaultClasstrue \--set nfs.servercluster-endpoint \--set nfs.path/opt/nfsdata# 查看
kubectl get pods,deploy,sc -n nfs-provisioner9安装 Dashboard
1、安装
GitHub地址https://github.com/kubernetes/dashboard
kubectl apply -f dashboard.yaml
# 查看
kubectl get pods,svc -n kubernetes-dashboard2、创建登录用户
cat ServiceAccount.yamlEOF
apiVersion: v1
kind: ServiceAccount
metadata:name: admin-usernamespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: admin-user
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-admin
subjects:
- kind: ServiceAccountname: admin-usernamespace: kubernetes-dashboard
EOF
kubectl apply -f ServiceAccount.yaml3、创建并获取登录token
kubectl -n kubernetes-dashboard create token admin-user4、登录 web
登录地址https://ip:31443/如果提示如下建议换成火狐浏览器试试。如果有证书情况下是不会有种问题的。 火狐浏览器访问web
10安装镜像仓库 Harbor
1、创建证书
mkdir stl cd stl
# 生成 CA 证书私钥
openssl genrsa -out ca.key 4096
# 生成 CA 证书
openssl req -x509 -new -nodes -sha512 -days 3650 \-subj /CCN/STGuangdong/LShenzhen/Oharbor/OUharbor/CNmyharbor.com \-key ca.key \-out ca.crt
# 创建域名证书生成私钥
openssl genrsa -out myharbor.com.key 4096
# 生成证书签名请求 CSR
openssl req -sha512 -new \-subj /CCN/STGuangdong/LShenzhen/Oharbor/OUharbor/CNmyharbor.com \-key myharbor.com.key \-out myharbor.com.csr
# 生成 x509 v3 扩展
cat v3.ext -EOF
authorityKeyIdentifierkeyid,issuer
basicConstraintsCA:FALSE
keyUsage digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage serverAuth
subjectAltName alt_names[alt_names]
DNS.1myharbor.com
DNS.2*.myharbor.com
DNS.3hostname
EOF
#创建 Harbor 访问证书
openssl x509 -req -sha512 -days 3650 \-extfile v3.ext \-CA ca.crt -CAkey ca.key -CAcreateserial \-in myharbor.com.csr \-out myharbor.com.crt2、创建证书秘钥
kubectl create secret tls myharbor.com --key myharbor.com.key --cert myharbor.com.crt -n harbor
kubectl get secret myharbor.com -n harbor3、添加 Chart 库
helm repo add harbor https://helm.goharbor.io4、开始部署 harbor
# 下载安装包
helm pull harbor/harbor
# harbor-1.11.1.tgz 安装包在提供的资源包里是有的可以不用再去外网下载的。
helm install myharbor ./harbor-1.11.1.tgz \--namespaceharbor --create-namespace \--set expose.ingress.hosts.coremyharbor.com \--set expose.ingress.hosts.notarynotary.myharbor.com \--set-string expose.ingress.annotations.nginx\.org/client-max-body-size1024m \--set expose.tls.secretNamemyharbor.com \--set persistence.persistentVolumeClaim.registry.storageClassnfs-client \--set persistence.persistentVolumeClaim.jobservice.storageClassnfs-client \--set persistence.persistentVolumeClaim.database.storageClassnfs-client \--set persistence.persistentVolumeClaim.redis.storageClassnfs-client \--set persistence.persistentVolumeClaim.trivy.storageClassnfs-client \--set persistence.persistentVolumeClaim.chartmuseum.storageClassnfs-client \--set persistence.enabledtrue \--set externalURLhttps://myharbor.com \--set harborAdminPasswordHarbor123455、查看
kubectl get pods,ingress -n harbor5、web 访问
配置hosts如果是真实的域名就可以不用配置hosts了
192.168.182.110 myharbor.com访问地址https://myharbor.com/ 账号/密码admin/Harbor12345注意这里的密码是上面安装时自定义的 【云原生】k8s 离线部署详解过程就到这里有不明白或者部署过程中有问题的小伙伴欢迎给我留言哦后续会持续更新相关技术文章的离线部署包资源关注我的公众号【大数据与云原生技术分享】回复【k8s】即可获取~