日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
K8s離線部署講解和實戰(zhàn)操作

K8s 離線部署講解和實戰(zhàn)操作

作者:liugp 2023-02-27 07:40:00
云計算
云原生 Kubernetes是一種高度可擴展的容器編排平臺,可用于部署、管理和自動化容器化應(yīng)用程序的運行。在某些情況下,離線部署Kubernetes可能是必需的,例如在沒有互聯(lián)網(wǎng)連接的安全環(huán)境中或在網(wǎng)絡(luò)連接不可靠的情況下。

一、概述

Kubernetes是一種高度可擴展的容器編排平臺,可用于部署、管理和自動化容器化應(yīng)用程序的運行。在某些情況下,離線部署Kubernetes可能是必需的,例如在沒有互聯(lián)網(wǎng)連接的安全環(huán)境中或在網(wǎng)絡(luò)連接不可靠的情況下。以下是離線部署Kubernetes的一般步驟:

  1. 獲取Kubernetes二進制文件:從Kubernetes官網(wǎng)下載Kubernetes二進制文件并解壓縮到本地。
  2. 準備離線鏡像:在離線環(huán)境中,必須將所需的容器鏡像下載到本地并存儲在本地倉庫中。可以使用Docker鏡像導出/導入命令或Docker Registry Mirror工具將鏡像從在線環(huán)境中導出并導入到離線環(huán)境中。
  3. 配置Kubernetes節(jié)點:在每個節(jié)點上安裝必要的依賴項,例如Docker引擎、kubelet、kubeadm等??梢允褂肈ocker離線安裝程序?qū)ocker引擎安裝到離線節(jié)點中。
  4. 初始化Kubernetes集群:使用kubeadm init命令初始化集群,并將必要的配置文件和證書復制到節(jié)點上。在離線環(huán)境中,必須將kubelet和kubeadm所需的配置文件手動復制到每個節(jié)點上。
  5. 加入節(jié)點:使用kubeadm join命令將新節(jié)點加入到集群中。在離線環(huán)境中,必須手動復制kubelet和kubeadm配置文件,并在每個節(jié)點上使用kubeadm join命令將節(jié)點加入集群。
  6. 部署應(yīng)用程序:使用kubectl命令在集群中部署應(yīng)用程序,并將所需的容器鏡像從本地倉庫中拉取。

在離線環(huán)境中部署Kubernetes需要一些額外的工作,但是這是可能的,并且是部署Kubernetes的重要方法之一。

二、前期準備

1)節(jié)點信息

節(jié)點信息

主機名

IP

角色

操作系統(tǒng)

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

2)修改主機名和配置hosts

修改主機名

# 在192.168.182.110執(zhí)行
hostnamectl set-hostname local-168-182-110

# 在192.168.182.111執(zhí)行
hostnamectl set-hostname local-168-182-110

# 在192.168.182.112執(zhí)行
hostnamectl set-hostname local-168-182-110

# 在192.168.182.113執(zhí)行
hostnamectl set-hostname local-168-182-110

配置hosts

cat >> /etc/hosts<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
EOF

3)配置ssh互信

# 直接一直回車就行
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

4)時間同步

yum install chrony -y
systemctl start chronyd
systemctl enable chronyd
chronyc sources

5)關(guān)閉防火墻

systemctl stop firewalld
systemctl disable firewalld

6)關(guān)閉 swap

# 臨時關(guān)閉;關(guān)閉swap主要是為了性能考慮
swapoff -a
# 可以通過這個命令查看swap是否關(guān)閉了
free
# 永久關(guān)閉
sed -ri 's/.*swap.*/#&/' /etc/fstab

7)禁用SELinux

# 臨時關(guān)閉
setenforce 0
# 永久禁用
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config

8)允許 iptables 檢查橋接流量

若要顯式加載此模塊,請運行 sudo modprobe br_netfilter,通過運行 lsmod | grep br_netfilter 來驗證 br_netfilter 模塊是否已加載:

sudo modprobe br_netfilter
lsmod | grep br_netfilter

為了讓 Linux 節(jié)點的 iptables 能夠正確查看橋接流量,請確認 sysctl 配置中的 net.bridge.bridge-nf-call-iptables 設(shè)置為 1。 例如:

cat <overlay
br_netfilter
EOF

sudo modprobe overlay
sudo modprobe br_netfilter

# 設(shè)置所需的 sysctl 參數(shù),參數(shù)在重新啟動后保持不變
cat <net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF

# 應(yīng)用 sysctl 參數(shù)而不重新啟動
sudo sysctl --system

三、開始部署

下載地址:https://download.docker.com/linux/static/stable/x86_64/

鏡像、安裝包、kube-flannel.yml、deploy.yaml等資源可關(guān)注我的公眾號【大數(shù)據(jù)與云原生技術(shù)分享】回復【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.tgz

2、解壓的docker文件夾全部移動至/usr/bin目錄

cp -p docker/* /usr/bin

3、配置 docker 啟動文件

在/usr/lib/systemd/system/?目錄下,創(chuàng)建docker.service文件

cat> /usr/lib/systemd/system/docker.service <[Unit]
Descriptinotallow=Docker Application Container Engine
Documentatinotallow=http://docs.docker.com
After=network.target docker.socket
[Service]
Type=notify
Envirnotallow=-/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-enabled=false \
--log-opt max-size=1g
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.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF

4、啟動 docker 服務(wù)

systemctl daemon-reload

# 設(shè)置為開機自啟并現(xiàn)在立刻啟動服務(wù) --now:立刻啟動服務(wù)
systemctl enable --now docker

# 查看容器狀態(tài)
systemctl status docker

5、配置鏡像下載加速器和 cgroupdriver

cat >/etc/docker/daemon.json<{
"registry-mirrors": ["http://hub-mirror.c.163.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

systemctl restart docker

2)離線安裝 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.gz

tar -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 <[Unit]
Descriptinotallow=kubelet: The Kubernetes Node Agent
Documentatinotallow=https://kubernetes.io/docs/

[Service]
ExecStart=/usr/bin/kubelet
Restart=always
StartLimitInterval=0
RestartSec=10

[Install]
WantedBy=multi-user.target
EOF

#注意ExecStart內(nèi)容換行
mkdir -p /usr/lib/systemd/system/kubelet.service.d/
cat >/usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf <[Service]
Envirnotallow="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubecnotallow=/etc/kubernetes/bootstrap-kubelet.conf --kubecnotallow=/etc/kubernetes/kubelet.conf"
Envirnotallow="KUBELET_CONFIG_ARGS=--cnotallow=/var/lib/kubelet/config.yaml"
Envirnotallow=-/var/lib/kubelet/kubeadm-flags.env
Envirnotallow=-/etc/sysconfig/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS
EOF

3、導入鏡像

下載資源包,解壓進入images目錄,執(zhí)行以下命令就可以導入鏡像了

sh image_load.sh

4、啟動 kubelet

# 設(shè)置為開機自啟并現(xiàn)在立刻啟動服務(wù) --now:立刻啟動服務(wù)
systemctl enable --now kubelet

3)集群初始化

1、安裝 keepalived 生成 VIP 實現(xiàn)高可用

【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 --syscnotallow=/etc
make && make install

# 配置環(huán)境變量
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/keepalived

【2】master 配置

cat > /etc/keepalived/keepalived.conf<! Configuration File for keepalived 
global_defs {
#每個keepalived取個不同名稱
router_id 56
}
vrrp_instance VI_1 {
# MASTER為主實例,BACKUP 為從實例
state MASTER
# 網(wǎng)卡名稱
interface ens33
# 主備這里要配置為同樣的
virtual_router_id 68
# 優(yōu)先級,主要高于備. 一般主配置為100 備配置為80
priority 100
advert_int 1
# 主動搶占,主備都開啟的話,服務(wù)器搶占過去后,要等這個服務(wù)器keepalived停掉才會漂移到另一臺
nopreempt
authentication {
# 主備必須配置成同樣的
auth_type PASS
# 主備必須配置成同樣的
auth_pass 1111
}
virtual_ipaddress {
# vip,主備必須配置一樣
192.168.182.211
}
}
EOF

【3】backend 配置

cat > /etc/keepalived/keepalived.conf<! Configuration File for keepalived 
global_defs {
#每個keepalived取個不同名稱
router_id 56
}
vrrp_instance VI_1 {
# MASTER為主實例,BACKUP 為從實例
state BACKUP
# 網(wǎng)卡名稱
interface ens33
# 主備這里要配置為同樣的
virtual_router_id 68
# 優(yōu)先級,主要高于備. 一般主配置為100 備配置為80
priority 80
advert_int 1
# 主動搶占,主備都開啟的話,服務(wù)器搶占過去后,要等這個服務(wù)器keepalived停掉才會漂移到另一臺
nopreempt
authentication {
# 主備必須配置成同樣的
auth_type PASS
# 主備必須配置成同樣的
auth_pass 1111
}
virtual_ipaddress {
# vip,主備必須配置一樣
192.168.182.211
}
}
EOF

【4】配置服務(wù)啟動

cat > /usr/lib/systemd/system/keepalived.service <[Unit]
Descriptinotallow=LVS and VRRP High Availability Monitor
After=network-online.target syslog.target
Wants=network-online.target
Documentatinotallow=man:keepalived(8)
Documentatinotallow=man:keepalived.conf(5)
Documentatinotallow=man:genhash(1)
Documentatinotallow=https://keepalived.org

[Service]
Type=forking
PIDFile=/run/keepalived.pid
KillMode=process
Envirnotallow=-/usr/local/keepalived/sysconfig/keepalived
ExecStart=/usr/local/keepalived/sbin/keepalived $KEEPALIVED_OPTIONS
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

EOF

【5】啟動 keepalived

systemctl daemon-reload
systemctl enable --now keepalived

2、創(chuàng)建初始化配置文件

注意這里使用VIP

kubeadm config print init-defaults > kubeadm-config.yaml

3、k8s 集群初始化

這里追加tee命令將初始化日志輸出到kubeadm-init.log中以備用(可選)。

kubeadm init --cnotallow=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

4、安裝 cni 插件(flannel)

# wget https://raw.githubusercontent.com/flannel-io/flannel/v0.20.2/Documentation/kube-flannel.yml
kubeclt apply -f kube-flannel.yml

4)添加 master 節(jié)點

# 在需要添加的master節(jié)點上執(zhí)行

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"

# 拿到上面打印的命令在需要添加的節(jié)點上執(zhí)行

# --control-plane 標志通知 kubeadm join 創(chuàng)建一個新的控制平面。加入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

5)添加 node 節(jié)點

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"

6)配置 IPVS

1、加載ip_vs相關(guān)內(nèi)核模塊

modprobe -- ip_vs
modprobe -- ip_vs_sh
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
# 驗證開啟了ipvs
lsmod |grep ip_vs

2、離線安裝 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 -version

3、編輯kube-proxy配置文件,mode修改成ipvs

kubectl edit  configmap -n kube-system  kube-proxy

4、重啟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

7)安裝 ingress-nginx

# 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

8)安裝 nfs provisioner

1、安裝helm

helm安裝包在提供的資源包里也是有的,可以不用再去外網(wǎng)下載的。

# 下載包
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

2、添加helm倉庫源

# 添加helm倉庫源
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/

3、安裝 nfs

【服務(wù)端】

#### 安裝nfs
yum -y install nfs-utils rpcbind

# 服務(wù)端
mkdir -p /opt/nfsdata
# 授權(quán)共享目錄
chmod 666 /opt/nfsdata
cat > /etc/exports</opt/nfsdata *(rw,no_root_squash,no_all_squash,sync)
EOF
# 配置生效
exportfs -r

systemctl enable --now rpcbind
systemctl enable --now nfs-server

【客戶端】

yum -y install rpcbind
systemctl enable --now rpcbind

3、nfs provisioner

### helm安裝nfs provisioner,安裝包在提供的資源里也有,可以不用再去外網(wǎng)下載
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

9)安裝 Dashboard

1、安裝

GitHub地址:https://github.com/kubernetes/dashboard

kubectl apply -f dashboard.yaml
# 查看
kubectl get pods,svc -n kubernetes-dashboard

2、創(chuàng)建登錄用戶

cat >ServiceAccount.yaml<apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
EOF
kubectl apply -f ServiceAccount.yaml

3、創(chuàng)建并獲取登錄token

kubectl -n kubernetes-dashboard create token admin-user

4、登錄 web

登錄地址:https://ip:31443/,如果提示如下,建議換成火狐瀏覽器試試。(如果有證書情況下是不會有種問題的。)

火狐瀏覽器訪問web

10)安裝鏡像倉庫 Harbor

1、創(chuàng)建證書

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
# 創(chuàng)建域名證書,生成私鑰
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
basicCnotallow=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
#創(chuàng)建 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

2、創(chuàng)建證書秘鑰

kubectl create secret tls myharbor.com --key myharbor.com.key --cert myharbor.com.crt -n harbor
kubectl get secret myharbor.com -n harbor

3、添加 Chart 庫

helm repo add harbor https://helm.goharbor.io

4、開始部署 harbor

# 下載安裝包
helm pull harbor/harbor
# harbor-1.11.1.tgz 安裝包在提供的資源包里是有的,可以不用再去外網(wǎng)下載的。
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

5、查看

kubectl get pods,ingress -n harbor

5、web 訪問

配置hosts(如果是真實的域名,就可以不用配置hosts了)

192.168.182.110 myharbor.com

訪問地址:https://myharbor.com/

賬號/密碼:admin/Harbor12345(注意:這里的密碼是上面安裝時自定義的)

? ?


網(wǎng)頁標題:K8s離線部署講解和實戰(zhàn)操作
網(wǎng)站URL:http://www.dlmjj.cn/article/dhshpjh.html