目標(biāo)
在沒有互聯(lián)網(wǎng)到企業(yè)內(nèi)網(wǎng)部署Kubernetes集群
目錄
環(huán)境
- CentOS Linux release 7.7.1908 (Core)
- Docker 19.03.5
- Kubernetes 1.17.1
準(zhǔn)備安裝包
Docker
Kubernetes
- 最新版本號(hào):https://storage.googleapis.com/kubernetes-release/release/stable.txt
- 版本發(fā)型說明:https://kubernetes.io/docs/setup/release/notes
獲取yum 依賴包
首先在一臺(tái)能聯(lián)網(wǎng)Centos 7中下載依賴包,注意這個(gè)系統(tǒng)要是全新minimal安裝的,如果已經(jīng)通過yum安裝過一些軟件碰煌,下載的依賴包可能不完整蠢涝。
- Centos 7 minimal下載地址:http://mirrors.aliyun.com/centos/7.7.1908/isos/x86_64/CentOS-7-x86_64-Minimal-1908.iso
所有依賴包會(huì)下載到/root/k8sOfflineSetup/packages
目錄。
# 使用阿里云鏡像源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 創(chuàng)建本地倉(cāng)庫(kù)包
yum install --downloadonly --downloaddir=/root/k8sOfflineSetup/packages \
createrepo
# 實(shí)用工具
yum install --downloadonly --downloaddir=/root/k8sOfflineSetup/packages \
yum-utils \
nfs-utils \
wget
# docker 依賴包
yum install --downloadonly --downloaddir=/root/k8sOfflineSetup/packages \
device-mapper-persistent-data \
lvm2
# 添加阿里云Docker源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# docker
yum install --downloadonly --downloaddir=/root/k8sOfflineSetup/packages \
docker-ce-19.03.5 \
docker-ce-cli-19.03.5 \
containerd.io
# 時(shí)間同步
yum install --downloadonly --downloaddir=/root/k8sOfflineSetup/packages \
chrony
# HAProxy 和 KeepAlived
yum install --downloadonly --downloaddir=/root/k8sOfflineSetup/packages \
haproxy \
keepalived
# 配置K8S的yum源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
# kubelet
yum install --downloadonly --downloaddir=/root/k8sOfflineSetup/packages \
kubelet-1.17.1 \
kubeadm-1.17.1 \
kubectl-1.17.1
獲取kubeadm依賴鏡像
獲取kubeadm用到的鏡像列表匿垄,這步操作要在一臺(tái)安裝好Docker環(huán)境的計(jì)算機(jī)上進(jìn)行,拉取完成后打包復(fù)制到資源包/root/k8sOfflineSetup/images
目錄中。
kubeadm config images list
得到的結(jié)果是以下這些鏡像访惜,因?yàn)殓R像的服務(wù)器都在國(guó)外,下載速度慢或者根本無(wú)法下載腻扇。所以债热,我們先在阿里云上獲取鏡像后再改名放到資源包中。
- k8s.gcr.io/kube-apiserver:v1.17.1
- k8s.gcr.io/kube-controller-manager:v1.17.1
- k8s.gcr.io/kube-scheduler:v1.17.1
- k8s.gcr.io/kube-proxy:v1.17.1
- k8s.gcr.io/pause:3.1
- k8s.gcr.io/etcd:3.4.3-0
- k8s.gcr.io/coredns:1.6.5
# 從阿里云拉取鏡像
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.17.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.17.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.17.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.17.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.3-0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.6.5
# 重新tag鏡像
docker images \
| grep registry.cn-hangzhou.aliyuncs.com/google_containers \
| sed 's/registry.cn-hangzhou.aliyuncs.com\/google_containers/k8s.gcr.io/' \
| awk '{print "docker tag " $3 " " $1 ":" $2}' \
| sh
# 刪除舊鏡像
docker images \
| grep registry.cn-hangzhou.aliyuncs.com/google_containers \
| awk '{print "docker rmi " $1 ":" $2}' \
| sh
# 在當(dāng)前目錄導(dǎo)出鏡像為壓縮包
docker save -o kube-controller-manager-v1.17.1.tar k8s.gcr.io/kube-controller-manager:v1.17.1
docker save -o kube-apiserver-v1.17.1.tar k8s.gcr.io/kube-apiserver:v1.17.1
docker save -o kube-scheduler-v1.17.1.tar k8s.gcr.io/kube-scheduler:v1.17.1
docker save -o kube-proxy-v1.17.1.tar k8s.gcr.io/kube-proxy:v1.17.1
docker save -o coredns-1.6.5.tar k8s.gcr.io/coredns:1.6.5
docker save -o etcd-3.4.3-0.tar k8s.gcr.io/etcd:3.4.3-0
docker save -o pause-3.1.tar k8s.gcr.io/pause:3.1
calico網(wǎng)絡(luò)插件依賴鏡像
從Quickstart for Calico on Kubernetes找到calico.yaml
文件幼苛,命名為calico-v3.10.3.yaml
保存到資源包/root/k8sOfflineSetup/plugins
目錄中窒篱。
cat calico-v3.10.3.yaml | grep image: | awk '{print $2}'
從文件中搜索image
關(guān)鍵字找到如下依賴鏡像。
- calico/cni:v3.10.3
- calico/pod2daemon-flexvol:v3.10.3
- calico/node:v3.10.3
- calico/kube-controllers:v3.10.3
# 拉取全部鏡像
cat calico-v3.10.3.yaml \
| grep image: \
| awk '{print "docker pull " $2}' \
| sh
# 在當(dāng)前目錄導(dǎo)出鏡像為壓縮包
docker save -o calico-cni-v3.10.3.tar calico/cni:v3.10.3
docker save -o calico-pod2daemon-flexvol-v3.10.3.tar calico/pod2daemon-flexvol:v3.10.3
docker save -o calico-node-v3.10.3.tar calico/node:v3.10.3
docker save -o calico-kube-controllers-v3.10.3.tar calico/kube-controllers:v3.10.3
同樣拉取完成后打包復(fù)制到資源包/root/k8sOfflineSetup/images
目錄中舶沿。
kubernetes dashboard
從GitHub上找到Dashboard最新版本部署文件墙杯。
- Dashboard版本發(fā)布地址:https://github.com/kubernetes/dashboard/releases
下載v2.0.0-rc5,命名為dashboard-v2.0.0-rc5.yaml
保存到資源包/root/k8sOfflineSetup/plugins
目錄中括荡。
修改dashboard-v2.0.0-rc5.yaml
的imagePullPolicy,默認(rèn)是Always
高镐,注釋掉。否則即使本地已有鏡像dashboard啟動(dòng)時(shí)還是要從網(wǎng)上拉取畸冲。為了內(nèi)網(wǎng)能正常運(yùn)行嫉髓,所以禁止每次運(yùn)行都重新pull image。
- 找出鏡像列表
cat dashboard-v2.0.0-rc5.yaml | grep image: | awk '{print $2}'
得到這兩個(gè)鏡像名稱邑闲。
- kubernetesui/dashboard:v2.0.0-rc5
- kubernetesui/metrics-scraper:v1.0.3
- 拉取鏡像
cat dashboard-v2.0.0-rc5.yaml \
| grep image: \
| awk '{print "docker pull " $2}' \
| sh
# 在當(dāng)前目錄導(dǎo)出鏡像為壓縮包
docker save -o kubernetesui-dashboard-v2.0.0-rc5.tar kubernetesui/dashboard:v2.0.0-rc5
docker save -o kubernetesui-metrics-scraper-v1.0.3.tar kubernetesui/metrics-scraper:v1.0.3
同樣拉取完成后打包復(fù)制到資源包/root/k8sOfflineSetup/images
目錄中岩喷。
Kuboard
查看Kuboard官網(wǎng)安裝文檔,從中獲取到需要kuboard.yaml
和metrics-server.yaml
兩個(gè)部署文件监憎,中需要使用以下兩個(gè)鏡像纱意,還是按前面到方法拉下來保存起來。
- eipwork/kuboard:latest
- registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6
# 拉取鏡像
docker pull eipwork/kuboard:latest
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6
# 在當(dāng)前目錄導(dǎo)出鏡像為壓縮包
docker save -o kuboard-latest.tar eipwork/kuboard:latest
docker save -o kuboard-metrics-server-amd64-v0.3.6.tar registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6
同樣拉取完成后打包復(fù)制到資源包/root/k8sOfflineSetup/images
目錄中鲸阔。
NGINX Ingress Controller
同樣在官方網(wǎng)站找到部署yaml
文件偷霉,并獲取鏡像列迄委。
這里下載ingress-nginx-v0.29.0,命名為ingress-nginx-v0.29.0.yaml
保存到資源包/root/k8sOfflineSetup/plugins
目錄中类少。
- 找出鏡像列表
cat ingress-nginx-v0.29.0.yaml | grep image: | awk '{print $2}'
得到這兩個(gè)鏡像名稱叙身。
- quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.29.0
- 拉取鏡像
cat ingress-nginx-v0.29.0.yaml \
| grep image: \
| awk '{print "docker pull " $2}' \
| sh
# 如果網(wǎng)絡(luò)原因拉取速度太慢可從這兒拉取再重新tag
# docker pull quay.azk8s.cn/kubernetes-ingress-controller/nginx-ingress-controller:0.29.0
# docker tag quay.azk8s.cn/kubernetes-ingress-controller/nginx-ingress-controller:0.29.0 quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.29.0
# docker rim quay.azk8s.cn/kubernetes-ingress-controller/nginx-ingress-controller:0.29.0
# 在當(dāng)前目錄導(dǎo)出鏡像為壓縮包
docker save -o nginx-ingress-controller-0.29.0.tar quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.29.0
同樣拉取完成后打包復(fù)制到資源包/root/k8sOfflineSetup/images
目錄中。
資源包打包
將下載到packages
硫狞、images
與https://github.com/scfido/k8s-offline-setup倉(cāng)庫(kù)的文件合并信轿,最后的目錄應(yīng)該是這樣的
??k8sOfflineSetup
├── ??gpg
├── ??plugins
├── ??repos
├── ??scripts
├── ??packages
├── ??images
├── ??setup_master.sh
└── ??setup_worker.sh
壓縮資源包
cd /root/k8sOfflineSetup
tar -czf k8sOfflineSetup.tar.gz *
完成
現(xiàn)在你得到一個(gè)可以離線安裝到Kubernetes單節(jié)點(diǎn)Master集群到資源包,下一步將介紹如何使用它财忽。