《Kubernetes部署篇:基于Kubernetes集群离线部署KubeSphere3.1》



官网(中国站):https://kubesphere.com.cn/
GitHub: https://github.com/kubesphere
中文论坛:https://kubesphere.com.cn/forum/


一、背景

当前环境为私有化环境,均无法上外网,且kubernetes集群已经部署,现在需要离线安装kubesphere,所以对于一些需要下载的镜像或文件建议找一台能外网的主机操作,然后上传到内网主机。


二、环境信息

主机名系统版本内核版本IP地址备注
VIP192.168.1.234VIP(不是实际的主机)
lvs-keepalived-01centos7.6.18105.11.16192.168.1.143LVS+Keepalived
lvs-keepalived-02centos7.6.18105.11.16192.168.1.144LVS+Keepalived
k8s-master-149centos7.6.18105.11.16192.168.1.149master节点
k8s-master-155centos7.6.18105.11.16192.168.1.155master节点
k8s-master-160centos7.6.18105.11.16192.168.1.160master节点
k8s-worker-161centos7.6.18105.11.16192.168.1.161worker节点
k8s-worker-162centos7.6.18105.11.16192.168.1.162worker节点
k8s-worker-166centos7.6.18105.11.16192.168.1.166worker节点
k8s-client-170centos7.6.18105.11.16192.168.1.170client节点

说明:共有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集群运维实战

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东城绝神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值