完整的离线安装过程,还是比较复杂,这里面整理一下思路
- 一个私有的镜像仓库,存放所有的docker镜像
- 一个私有的地址,存放k8s相关的二进制包
- 一个私有的repo,提供操作系统的包的依赖
计划
- 容器部署一个nexus,支持https,使用腾讯dnspod来做域名解析,解析私有地址,并且创建ssl证书
- nexus提供私有镜像仓库
- nexus提供raw的存储功能,存放kubeadmin,kk等的压缩包
- nexus提供操作系统repo的proxy功能。
软件版本
- kk 1.20
- k8s 版本 1.21.5 , kubekey支持的版本都没问题
- nexus 3.4
- CentOS 7.9虚拟机
- 使用:hub.abc.tech 域名和证书(腾讯dnspod)
Docker 准备
一个标准CentOS7.9虚拟机,存储我就80G,好像也是足够使用,没太特别。
我们需要解决docker pull的限制,按照下面的mirror设置,就可以顺利突破这个限制。
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install docker-ce -y
systemctl daemon-reload && systemctl restart docker
# cat /etc/docker/daemon.json
{
"registry-mirrors": [
"https://ustc-edu-cn.mirror.aliyuncs.com"
]
}
systemctl daemon-reload && systemctl restart docker
Nexus安装
要让nexus支持https,还是比较折腾的。
mkdir -p /data/nexus/nexus-data
mkdir -p /data/nexus/nexus-ssl
chown -R 200 /data/nexus/nexus-data
chown -R 200 /data/nexus/nexus-ssl
docker run -d -p 8081:8081 -p 8443:8443 -p 5000:5000 \
-v /data/nexus/nexus-data:/nexus-data \
-v /data/nexus/nexus-ssl:/opt/sonatype/nexus/etc/ssl \
--name nexus \
bradbeck/nexus-https
这个时候,你就可以使用ip地址登陆nexus。查看nexus admin密码
cat /data/nexus/nexus-data/admin.password
https支持
你登陆dnspod,设置一个A记录,指向内网的ip,申请ssl证书,下载证书,上传到服务器上
http://www.chenshake.com/docker-nexus-uses-a-dnspod-certificate/
nexus配置
创建一个私有docker创建,创建一个repo,docker host,使用5000端口。
docker login hub.abc.tech:5000
能登陆就可以。
下载镜像
mkdir kube
cd kube
curl -L -O https://github.com/kubesphere/ks-installer/releases/download/v3.2.0/offline-installation-tool.sh
curl -L -O https://github.com/kubesphere/ks-installer/releases/download/v3.2.0/images-list.txt
chmod +x offline-installation-tool.sh
export KKZONE=cn;./offline-installation-tool.sh -b
./offline-installation-tool.sh -s -l images-list.txt -d ./kubesphere-images
./offline-installation-tool.sh -l images-list.txt -d ./kubesphere-images -r hub.abc.tech:5000
[root@hub kube]# tree
.
├── images-list.txt
├── kubekey
│ └── v1.21.5
│ └── amd64
│ ├── cni-plugins-linux-amd64-v0.9.1.tgz
│ ├── etcd-v3.4.13-linux-amd64.tar.gz
│ ├── helm
│ ├── kubeadm
│ ├── kubectl
│ └── kubelet
├── kubesphere-images
│ ├── example-images.tar.gz
│ ├── gatekeeper-images.tar.gz
│ ├── istio-images.tar.gz
│ ├── k8s-images.tar.gz
│ ├── kubeedge-images.tar.gz
│ ├── kubesphere-devops-images.tar.gz
│ ├── kubesphere-images.tar.gz
│ ├── kubesphere-logging-images.tar.gz
│ ├── kubesphere-monitoring-images.tar.gz
│ ├── openpitrix-images.tar.gz
│ └── weave-scope-images.tar.gz
└── offline-installation-tool.sh
上面就是目录结构。目前还缺少docker crictl,这个是bug,后续会解决。
制作离线安装包,需要把kk的包放到目录里
# tree
.
├── kk
└── kubekey
└── v1.21.5
└── amd64
├── cni-plugins-linux-amd64-v0.9.1.tgz
├── etcd-v3.4.13-linux-amd64.tar.gz
├── helm
├── kubeadm
├── kubectl
└── kubelet
把目录tar一个包。上传到nexus到raw到存储上。我在nexus上创建一个binnary 的raw的repo。
tar -czvf kubekey.tar.gz kubekey
curl -v -u admin:admin --upload-file kubekey.tar.gz https://hub.abc.tech:8443/repository/binary/kubekey/1.2.0/kubekey.tar.gz
目录会自动创建
开始离线安装
curl -o kubekey.tar.gz https://hub.abc.tech:8443/repository/binary/kubekey/1.2.0/kubekey.tar.gz
tar zxvf kubekey.tar.gz
mkdir config
./kk create config --with-kubernetes v1.21.5 --with-kubesphere v3.2.0 -f ./config/flannel.yaml
修改配置文件,重点就是修改私有镜像仓库
network:
plugin: flannel
kubePodsCIDR: 10.233.64.0/18
kubeServiceCIDR: 10.233.0.0/18
registry:
registryMirrors: []
insecureRegistries: []
privateRegistry: hub.abc.tech:5000
这个时候,就基本可以实现离线安装了。当然你的虚拟机镜像,提前集成的相关的rpm依赖。