文章目录
官网(中国站):https://kubesphere.com.cn/
GitHub: https://github.com/kubesphere
中文论坛:https://kubesphere.com.cn/forum/
一、背景
当前环境为私有化环境,均无法上外网,且kubernetes集群已经部署,现在需要离线安装kubesphere,所以对于一些需要下载的镜像或文件建议找一台能外网的主机操作,然后上传到内网主机。
二、环境信息
主机名 | 系统版本 | 内核版本 | IP地址 | 备注 |
---|---|---|---|---|
VIP | 192.168.1.234 | VIP(不是实际的主机) | ||
lvs-keepalived-01 | centos7.6.1810 | 5.11.16 | 192.168.1.143 | LVS+Keepalived |
lvs-keepalived-02 | centos7.6.1810 | 5.11.16 | 192.168.1.144 | LVS+Keepalived |
k8s-master-149 | centos7.6.1810 | 5.11.16 | 192.168.1.149 | master节点 |
k8s-master-155 | centos7.6.1810 | 5.11.16 | 192.168.1.155 | master节点 |
k8s-master-160 | centos7.6.1810 | 5.11.16 | 192.168.1.160 | master节点 |
k8s-worker-161 | centos7.6.1810 | 5.11.16 | 192.168.1.161 | worker节点 |
k8s-worker-162 | centos7.6.1810 | 5.11.16 | 192.168.1.162 | worker节点 |
k8s-worker-166 | centos7.6.1810 | 5.11.16 | 192.168.1.166 | worker节点 |
k8s-client-170 | centos7.6.1810 | 5.11.16 | 192.168.1.170 | client节点 |
说明:共有9台服务器,2台为lvs-keepalived集群,3台master集群,3台work集群,1台client。
三、准备工作
您可以在虚拟机和裸机上安装 KubeSphere,并同时配置 Kubernetes。另外,只要 Kubernetes 集群满足以下前提条件,那么您也可以在云托管和本地 Kubernetes 集群上部署 KubeSphere。
1、Kubernetes 版本:1.15.x,1.16.x,1.17.x,1.18.x。
2、可用 CPU > 1 核;内存 > 2 G。
3、Kubernetes 集群已配置默认 StorageClass(请使用 kubectl get sc 进行确认)。
4、使用 --cluster-signing-cert-file 和 --cluster-signing-key-file 参数启动集群时,kube-apiserver 将启用 CSR 签名功能。请参见RKE安装问题 。
四、部署harbor镜像仓库
方法一:使用docker镜像仓库
参考官方文档
方法二:使用harbor镜像仓库
部署harbor镜像仓库
4.1、harbor服务端部署
#1、二进制包下载
wget https://github.com/goharbor/harbor/releases/download/v1.10.1/harbor-offline-installer-v1.10.1.tgz
tar axf harbor-offline-installer-v1.10.1.tgz
cd harbor
#2、创建harbor数据目录
mkdir /data/harbor
#3、编辑harbor.yml配置文件
#注释部分
https:
port: 443
certificate: /your/certificate/path
private_key: /your/private/key/path
#修改部分
hostname: server.harbor.com
http:
port: 8888
harbor_admin_password: admin #这里设置成默认,建议修改
data_volume: /data/harbor #可以根据实际情况修改,建议选择磁盘空间最大目录
#4、执行脚本
进入harbor目录
bash install.sh
#5、添加hosts
echo "192.168.1.170 server.harbor.com" >>/etc/hosts
#6、配置仓库镜像地址
sed -e '3a "insecure-registries": ["server.harbor.com:8888"],' -i /etc/docker/daemon.json
systemctl daemon-reload && systemctl restart docker
#7、login登录验证
docker login server.harbor.com:8888
输入harbor登录账号和密码
4.2、harbor客户端部署
#1、添加hosts
echo "192.168.1.170 server.harbor.com" >>/etc/hosts
#2、配置仓库镜像地址
sed -e '3a "insecure-registries": ["server.harbor.com:8888"],' -i /etc/docker/daemon.json
systemctl daemon-reload && systemctl restart docker
#3、login登录验证
docker login server.harbor.com:8888
输入harbor登录账号和密码
4.3、harbor仓库创建项目
分别新建两个项目,nfs-client和kubesphere,如下图所示
五、下载kubesphere镜像包
5.1、准备安装镜像
当您在离线环境中安装KubeSphere时,需要事先准备一个包含所有必需镜像的镜像包。
# 1、使用以下命令从能够访问互联网的机器上下载镜像清单文件 images-list.txt
curl -L -O https://github.com/kubesphere/ks-installer/releases/download/v3.1.0/images-list.txt
vim images-list.txt
#由于当前环境已经安装了k8s,所以需要删除 ##k8s-images 和在它下面的相关镜像。
# 2、下载 offline-installation-tool.sh
curl -L -O https://github.com/kubesphere/ks-installer/releases/download/v3.1.0/offline-installation-tool.sh
chmod +x offline-installation-tool.sh
# 3、在 offline-installation-tool.sh 中拉取镜像
./offline-installation-tool.sh -s -l images-list.txt -d ./kubesphere-images
说明:您可以根据需要选择拉取的镜像。例如,如果已经有一个 Kubernetes 集群了,您可以在 images-list.text 中删除 ##k8s-images 和在它下面的相关镜像。
5.2、推送镜像至私有仓库
说明:将打包的镜像文件传输至您的本地机器,并运行以下命令把它推送至仓库。
./offline-installation-tool.sh -l images-list.txt -d ./kubesphere-images -r server.harbor.com:8888/kubesphere
如下图所示则表示推送成功。
六、搭建storageclass
说明:这里采用nfs作为kubernetes集群默认存储。
6.1、安装nfs服务端
说明:建议找一台单独且磁盘容量足够大的服务器作为nfs-server端。
# 1、安装nfs-server端
yum -y install nfs-utils rpcbind
systemctl start nfs && systemctl enable nfs
systemctl start rpcbind && systemctl enable rpcbind
# 3、创建共享目录
mkdir /data/kubesphere/v1
mkdir /data/kubesphere/v2
mkdir /data/kubesphere/v3
# 3、编辑配置文件
vim /etc/exports
/data/kubesphere/v1 192.168.1.0/24(rw,no_root_squash,no_all_squash)
/data/kubesphere/v2 192.168.1.0/24(rw,no_root_squash,no_all_squash)
/data/kubesphere/v3 192.168.1.0/24(rw,no_root_squash,no_all_squash)
# 4、发布
[root@k8s-client kubesphere]# exportfs -arv
exporting 192.168.1.0/24:/data/kubesphere/v1
exporting 192.168.1.0/24:/data/kubesphere/v2
exporting 192.168.1.0/24:/data/kubesphere/v3
# 5、查看
[root@k8s-client ~]# showmount -e 192.168.1.170
Export list for 192.168.1.170:
/data/kubesphere/v1 192.168.1.0/24
/data/kubesphere/v2 192.168.1.0/24
/data/kubesphere/v3 192.168.1.0/24
6.2、安装nfs客户端
说明:当前环境kubernetes集群master节点和worker节点则为nfs客户端。
# 客户端不需要创建共享目录和编辑配置文件,只安装服务就行
yum -y install nfs-utils rpcbind
6.3、安装nfs插件
说明:具有kubectl权限的主机。当前环境具有kubectl管理权限的主机有master01、master02、master03、kubectl节点,这里选择kubectl节点,即为192.168.1.170主机。
# 1、下载nfs插件
mkdir /root/nfs && cd /root/nfs
for file in class.yaml deployment.yaml rbac.yaml; do wget https://raw.githubusercontent.com/kubernetes-incubator/external-storage/master/nfs-client/deploy/$file ; done
# 2、镜像下载并推送到镜像仓库(如下图所示)
docker pull quay.io/external_storage/nfs-client-provisioner:latest
docker tag quay.io/external_storage/nfs-client-provisioner:latest server.harbor.com:8888/nfs-client/quay.io/external_storage/nfs-client-provisioner:latest
docker push server.harbor.com:8888/nfs-client/quay.io/external_storage/nfs-client-provisioner:latest
# 2、修改deployment.yaml文件
vim /root/nfs/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nfs-client-provisioner
labels:
app: nfs-client-provisioner
# replace with namespace where provisioner is deployed
namespace: default
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app: nfs-client-provisioner
template:
metadata:
labels:
app: nfs-client-provisioner
spec:
serviceAccountName: nfs-client-provisioner
containers:
- name: nfs-client-provisioner
image: server.harbor.com:8888/nfs-client/quay.io/external_storage/nfs-client-provisioner:latest ##默认是latest版本
volumeMounts:
- name: nfs-client-root
mountPath: /persistentvolumes
env:
- name: PROVISIONER_NAME
value: fuseim.pri/ifs ##这里的供应者名称必须和class.yaml中的provisioner的名称一致,否则部署不成功
- name: NFS_SERVER
value: 192.168.1.170 ##这里写NFS服务器的IP地址或者能解析到的主机名
- name: NFS_PATH
value: /data/kubesphere/v1 ##这里写NFS服务器中的共享挂载目录(强调:这里的路径必须是目录中最后一层的文件夹,否则部署的应用将无权限创建目录导致Pending)
volumes:
- name: nfs-client-root
nfs:
server: 192.168.1.170 ##NFS服务器的IP或可解析到的主机名
path: /data/kubesphere/v1 ##NFS服务器中的共享挂载目录(强调:这里的路径必须是目录中最后一层的文件夹,否则部署的应用将无权限创建目录导致Pending)
# 4、部署yaml文件
[root@k8s-client nfs]# kubectl apply -f .
# 5、查看服务
[root@k8s-client nfs]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nfs-client-provisioner-78697f488-5p52r 1/1 Running 0 16h
# 6、列出你的集群中的StorageClass
[root@k8s-client nfs]# kubectl get storageclass
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
managed-nfs-storage fuseim.pri/ifs Delete Immediate false 16h
# 7、标记一个StorageClass为默认的 (是storageclass的名字也就是你部署的StorageClass名字是啥就写啥)
[root@k8s-client nfs]# kubectl patch storageclass managed-nfs-storage -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
storageclass.storage.k8s.io/managed-nfs-storage patched
# 8、验证你选用为默认的StorageClass
[root@k8s-client nfs]# kubectl get storageclass
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
managed-nfs-storage (default) fuseim.pri/ifs Delete Immediate false 16h
七、离线部署kubesphere
7.1、下载部署文件
# 1、执行以下命令下载这两个文件,并将它们传输至您充当任务机的机器,用于安装
curl -L -O https://github.com/kubesphere/ks-installer/releases/download/v3.1.0/cluster-configuration.yaml
curl -L -O https://github.com/kubesphere/ks-installer/releases/download/v3.1.0/kubesphere-installer.yaml
# 2、编辑cluster-configuration.yaml添加您的私有镜像仓库
vim cluster-configuration.yaml
spec:
persistence:
storageClass: ""
authentication:
jwtSecret: ""
local_registry: server.harbor.com:8888/kubesphere #添加内容
# 3、编辑完成后保存 cluster-configuration.yaml,使用以下命令将 ks-installer 替换为您自己仓库的地址
sed -i "s#^\s*image: kubesphere.*/ks-installer:.*# image: server.harbor.com:8888/kubesphere/kubesphere/ks-installer:v3.1.0#" kubesphere-installer.yaml
7.2、最小化安装
# 请按照如下先后顺序安装(必须)
# 1、安装kubesphere-installer.yaml
[root@k8s-client ~]# kubectl apply -f kubesphere-installer.yaml
customresourcedefinition.apiextensions.k8s.io/clusterconfigurations.installer.kubesphere.io created
namespace/kubesphere-system created
serviceaccount/ks-installer created
clusterrole.rbac.authorization.k8s.io/ks-installer created
clusterrolebinding.rbac.authorization.k8s.io/ks-installer created
deployment.apps/ks-installer created
# 2、安装cluster-configuration.yaml
[root@k8s-client ~]# kubectl apply -f cluster-configuration.yaml
clusterconfiguration.installer.kubesphere.io/ks-installer created
7.2、检查安装日志
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f
如下图所示,则表示安装成功
默认账号密码:
Console: http://192.168.1.223:30880
Account: admin
Password: P@88w0rd
如下图所示:
至此,kubesphere最小化安装就成功了。
八、启用可插拔组件
8.1、KubeSphere告警系统
# 1、编辑cluster-configuration.yaml
vim cluster-configuration.yaml
alerting:
enabled: true # 将“false”更改为“true”。
# 2、执行以下命令开始安装
kubectl apply -f kubesphere-installer.yaml
kubectl apply -f cluster-configuration.yaml
如下图所示:
8.2、KubeSphere日志系统
# 1、编辑cluster-configuration.yaml
vim cluster-configuration.yaml
logging:
enabled: true # 将“false”更改为“true”。
# 2、执行以下命令开始安装
kubectl apply -f kubesphere-installer.yaml
kubectl apply -f cluster-configuration.yaml
如下图所示:
8.3、KubeSphere审计日志
# 1、编辑cluster-configuration.yaml
vim cluster-configuration.yaml
auditing:
enabled: true # 将“false”更改为“true”。
# 2、执行以下命令开始安装
kubectl apply -f kubesphere-installer.yaml
kubectl apply -f cluster-configuration.yaml
如下图所示:
8.4、KubeSphere应用商店
# 1、编辑cluster-configuration.yaml
vim cluster-configuration.yaml
openpitrix:
store:
enabled: true # 将“false”更改为“true”。
# 2、执行以下命令开始安装
kubectl apply -f kubesphere-installer.yaml
kubectl apply -f cluster-configuration.yaml
如下图所示:
8.5、KubeSphere DevOps
# 1、编辑cluster-configuration.yaml
vim cluster-configuration.yaml
devops:
enabled: true # 将“false”更改为“true”。
# 2、执行以下命令开始安装
kubectl apply -f kubesphere-installer.yaml
kubectl apply -f cluster-configuration.yaml
# 3、查看jenkins服务端口
[root@k8s-client ~]# kubectl get svc -n kubesphere-devops-system | grep ks-jenkins
ks-jenkins NodePort 10.96.209.254 <none> 80:30180/TCP 2d3h
ks-jenkins-agent ClusterIP 10.96.184.146 <none> 50000/TCP 2d3h
# 4、查看jenkins服务主机
[root@k8s-client ~]# kubectl get pods -n kubesphere-devops-system -o wide | grep jenkins
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
ks-jenkins-67dcf6998d-gkrl5 1/1 Running 0 2d3h 10.48.4.31 worker02 <none> <none>
s2ioperator-0 1/1 Running 0 2d3h 10.48.3.31 worker01 <none> <none>
# 5、登录jenkins
http://192.168.1.162:30180/
Account: admin
Password: P@88w0rd
如下图所示:
8.6、KubeSphere服务网格
# 1、编辑cluster-configuration.yaml
vim cluster-configuration.yaml
servicemesh:
enabled: true # 将“false”更改为“true”。
# 2、执行以下命令开始安装
kubectl apply -f kubesphere-installer.yaml
kubectl apply -f cluster-configuration.yaml
如下图所示:
8.7、KubeSphere网络策略
# 1、编辑cluster-configuration.yaml
vim cluster-configuration.yaml
network:
networkpolicy:
enabled: true # 将“false”更改为“true”。
# 2、执行以下命令开始安装
kubectl apply -f kubesphere-installer.yaml
kubectl apply -f cluster-configuration.yaml
如下图所示:
总结:整理不易,如果对你有帮助,可否点赞关注一下?
更多详细内容请参考:企业级K8s集群运维实战