Kubernetes是一种高度可扩展的容器编排平台,可用于部署、管理和自动化容器化应用程序的运行。在某些情况下,离线部署Kubernetes可能是必需的,例如在没有互联网连接的安全环境中或在网络连接不可靠的情况下。以下是离线部署Kubernetes的一般步骤:
在离线环境中部署Kubernetes需要一些额外的工作,但是这是可能的,并且是部署Kubernetes的重要方法之一。
k8s 在线部署可以参考我以下几篇文章:
节点信息
主机名 | IP | 角色 | 操作系统 | k8s 版本 |
local-168-182-110 | 192.168.182.110 | master、keepalived(VIP:192.168.182.211)、nfs-server | centos7 | 1.23.6 |
local-168-182-111 | 192.168.182.111 | master、keepalived、nfs-client | centos7 | 1.23.6 |
local-168-182-112 | 192.168.182.112 | master、nfs-client | centos7 | 1.23.6 |
local-168-182-113 | 192.168.182.113 | node、nfs-client | centos7 | 1.23.6 |
k8s 版本:https://github.com/kubernetes/kubernetes/tree/master/CHANGELOG
修改主机名
# 在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/hosts<
# 直接一直回车就行
ssh-keygen
ssh-copy-id -i ~/.ssh/id_rsa.pub root@local-168-182-110
ssh-copy-id -i ~/.ssh/id_rsa.pub root@local-168-182-111
ssh-copy-id -i ~/.ssh/id_rsa.pub root@local-168-182-112
ssh-copy-id -i ~/.ssh/id_rsa.pub root@local-168-182-113
yum install chrony -y
systemctl start chronyd
systemctl enable chronyd
chronyc sources
systemctl stop firewalld
systemctl disable firewalld
# 临时关闭;关闭swap主要是为了性能考虑
swapoff -a
# 可以通过这个命令查看swap是否关闭了
free
# 永久关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab
# 临时关闭
setenforce 0
# 永久禁用
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
若要显式加载此模块,请运行 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 <
下载地址:https://download.docker.com/linux/static/stable/x86_64/
镜像、安装包、kube-flannel.yml、deploy.yaml等资源可关注我的公众号【大数据与云原生技术分享】回复【k8s】即可获取。
# 下载
wget https://download.docker.com/linux/static/stable/x86_64/docker-20.10.20.tgz
# 解压
tar -zxvf docker-20.10.20.tgz
cp -p docker/* /usr/bin
在/usr/lib/systemd/system/目录下,创建docker.service文件
cat> /usr/lib/systemd/system/docker.service <
systemctl daemon-reload
# 设置为开机自启并现在立刻启动服务 --now:立刻启动服务
systemctl enable --now docker
# 查看容器状态
systemctl status docker
cat >/etc/docker/daemon.json<
下载地址:https://github.com/kubernetes/kubernetes/tree/master/CHANGELOG
wget https://dl.k8s.io/v1.23.6/kubernetes-server-linux-amd64.tar.gz
tar -xf kubernetes-server-linux-amd64.tar.gz
cd kubernetes/server/bin
cp -ar kubelet kubeadm kubectl /usr/bin/
cat >/usr/lib/systemd/system/kubelet.service </usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf <
下载资源包,解压进入images目录,执行以下命令就可以导入镜像了
sh image_load.sh
# 设置为开机自启并现在立刻启动服务 --now:立刻启动服务
systemctl enable --now kubelet
【1】下载
下载地址:https://www.keepalived.org/download.html
wget https://www.keepalived.org/software/keepalived-2.2.7.tar.gz --no-check-certificate
tar -zxvf keepalived-2.2.7.tar.gz
# 安装openssl(编译keepalived需要)
yum -y install openssl openssl-devel
# 编译 keepalived
yum install gcc -y
cd 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.conf<
【3】backend 配置
cat > /etc/keepalived/keepalived.conf<
【4】配置服务启动
cat > /usr/lib/systemd/system/keepalived.service <
【5】启动 keepalived
systemctl daemon-reload
systemctl enable --now keepalived
注意这里使用VIP
kubeadm config print init-defaults > kubeadm-config.yaml
这里追加tee命令将初始化日志输出到kubeadm-init.log中以备用(可选)。
kubeadm init --config=kubeadm-config.yaml --experimental-upload-certs | tee kubeadm-init.log
或者直接初始化
kubeadm init
--apiserver-advertise-address=192.168.182.211
--image-repository registry.aliyuncs.com/google_containers
--control-plane-endpoint=cluster-endpoint
--kubernetes-version v1.23.6
--service-cidr=10.1.0.0/16
--pod-network-cidr=10.244.0.0/16
--v=5
# wget https://raw.githubusercontent.com/flannel-io/flannel/v0.20.2/Documentation/kube-flannel.yml
kubeclt apply -f kube-flannel.yml
# 在需要添加的master节点上执行
CERT_KEY=`ssh cluster-endpoint "kubeadm init phase upload-certs --upload-certs|tail -1"`
join_str=`ssh cluster-endpoint kubeadm token create --print-join-command`
echo $join_str " --control-plane --certificate-key $CERT_KEY --v=5"
# 拿到上面打印的命令在需要添加的节点上执行
# --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/null
CERT_KEY=`ssh cluster-endpoint "kubeadm init phase upload-certs --upload-certs|tail -1"`
join_str=`ssh cluster-endpoint kubeadm token create --print-join-command`
echo $join_str " --certificate-key $CERT_KEY --v=5"
modprobe -- ip_vs
modprobe -- ip_vs_sh
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
# 验证开启了ipvs
lsmod |grep ip_vs
在线安装就非常简单了
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 -version
kubectl edit configmap -n kube-system 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-proxy
# wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.2.0/deploy/static/provider/cloud/deploy.yaml -O /tmp/deploy.yaml
kubectl apply -f /tmp/deploy.yaml
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/helm
# 添加helm仓库源
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
【服务端】
#### 安装nfs
yum -y install nfs-utils rpcbind
# 服务端
mkdir -p /opt/nfsdata
# 授权共享目录
chmod 666 /opt/nfsdata
cat > /etc/exports<
【客户端】
yum -y install rpcbind
systemctl enable --now rpcbind
### helm安装nfs provisioner,安装包在提供的资源里也有,可以不用再去外网下载
helm install nfs-subdir-external-provisioner ./nfs-subdir-external-provisioner-4.0.17.tgz
--namespace=nfs-provisioner
--create-namespace
--set image.repository=willdockerhub/nfs-subdir-external-provisioner
--set image.tag=v4.0.2
--set replicaCount=2
--set storageClass.name=nfs-client
--set storageClass.defaultClass=true
--set nfs.server=cluster-endpoint
--set nfs.path=/opt/nfsdata
# 查看
kubectl get pods,deploy,sc -n nfs-provisioner
GitHub地址:https://github.com/kubernetes/dashboard
kubectl apply -f dashboard.yaml
# 查看
kubectl get pods,svc -n kubernetes-dashboard
cat >ServiceAccount.yaml<
kubectl -n kubernetes-dashboard create token admin-user
登录地址:https://ip:31443/,如果提示如下,建议换成火狐浏览器试试。(如果有证书情况下是不会有种问题的。)
火狐浏览器访问web
mkdir stl && cd stl
# 生成 CA 证书私钥
openssl genrsa -out ca.key 4096
# 生成 CA 证书
openssl req -x509 -new -nodes -sha512 -days 3650
-subj "/C=CN/ST=Guangdong/L=Shenzhen/O=harbor/OU=harbor/CN=myharbor.com"
-key ca.key
-out ca.crt
# 创建域名证书,生成私钥
openssl genrsa -out myharbor.com.key 4096
# 生成证书签名请求 CSR
openssl req -sha512 -new
-subj "/C=CN/ST=Guangdong/L=Shenzhen/O=harbor/OU=harbor/CN=myharbor.com"
-key myharbor.com.key
-out myharbor.com.csr
# 生成 x509 v3 扩展
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=myharbor.com
DNS.2=*.myharbor.com
DNS.3=hostname
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.crt
kubectl create secret tls myharbor.com --key myharbor.com.key --cert myharbor.com.crt -n harbor
kubectl get secret myharbor.com -n harbor
helm repo add harbor https://helm.goharbor.io
# 下载安装包
helm pull harbor/harbor
# harbor-1.11.1.tgz 安装包在提供的资源包里是有的,可以不用再去外网下载的。
helm install myharbor ./harbor-1.11.1.tgz
--namespace=harbor --create-namespace
--set expose.ingress.hosts.core=myharbor.com
--set expose.ingress.hosts.notary=notary.myharbor.com
--set-string expose.ingress.annotations.'nginx.org/client-max-body-size'="1024m"
--set expose.tls.secretName=myharbor.com
--set persistence.persistentVolumeClaim.registry.storageClass=nfs-client
--set persistence.persistentVolumeClaim.jobservice.storageClass=nfs-client
--set persistence.persistentVolumeClaim.database.storageClass=nfs-client
--set persistence.persistentVolumeClaim.redis.storageClass=nfs-client
--set persistence.persistentVolumeClaim.trivy.storageClass=nfs-client
--set persistence.persistentVolumeClaim.chartmuseum.storageClass=nfs-client
--set persistence.enabled=true
--set externalURL=https://myharbor.com
--set harborAdminPassword=Harbor12345
kubectl get pods,ingress -n harbor
配置hosts(如果是真实的域名,就可以不用配置hosts了)
192.168.182.110 myharbor.com
访问地址:https://myharbor.com/
账号/密码:admin/Harbor12345(注意:这里的密码是上面安装时自定义的)
【云原生】k8s 离线部署详解过程就到这里,有不明白或者部署过程中有问题的小伙伴欢迎给我留言哦,后续会持续更新相关技术文章的,离线部署包资源关注我的公众号【大数据与云原生技术分享】回复【k8s】即可获取~
页面更新:2024-05-10
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号