一.准备 Linux 主机
主机 IP | 主机名 | 系统 |
192.168.1.2 | master | centos7 |
192.168.1.3 | node1 | centos7 |
192.168.1.4 | node2 | centos7 |
二.安装docker、docker-compose
具体docker安装教程可自行百度
注:三台主机都需安装docker、docker-compose
以下是我个人安装的docker、docker-compose版本
三.下载 KubeKey
先执行以下命令以确保您从正确的区域下载 KubeKey。
export KKZONE=cn
执行以下命令下载 KubeKey:
curl -sfL https://get-kk.kubesphere.io | VERSION=v3.0.7 sh -
为 kk
添加可执行权限:
chmod +x kk
1. 创建示例配置文件
命令如下:
./kk create config [--with-kubernetes version] [--with-kubesphere version] [(-f | --file) path]
指定要安装的版本号
kubernetes v1.21.5
kubespherev3.3.2
./kk create config --with-kubernetes v1.21.5 --with-kubesphere v3.3.2
官方备注:
安装 KubeSphere 3.3 的建议 Kubernetes 版本:v1.20.x、v1.21.x、* v1.22.x、* v1.23.x 和 * v1.24.x。带星号的版本可能出现边缘节点部分功能不可用的情况。因此,如需使用边缘节点,推荐安装 v1.21.x。如果不指定 Kubernetes 版本,KubeKey 将默认安装 Kubernetes v1.23.10。有关受支持的 Kubernetes 版本的更多信息,请参见支持矩阵。
如果您在此步骤的命令中不添加标志
--with-kubesphere
,则不会部署 KubeSphere,只能使用配置文件中的addons
字段安装,或者在您后续使用./kk create cluster
命令时再次添加这个标志。如果您添加标志
--with-kubesphere
时不指定 KubeSphere 版本,则会安装最新版本的 KubeSphere。
以下是我的config-sample.yaml
apiVersion: kubekey.kubesphere.io/v1alpha2
kind: Cluster
metadata:
name: sample
spec:
hosts:
- {name: master, address: 192.168.66.2, internalAddress: 192.168.66.2, privateKeyPath: "~/.ssh/id_rsa"}
- {name: node1, address: 192.168.66.3, internalAddress: 192.168.66.3, privateKeyPath: "~/.ssh/id_rsa"}
- {name: node2, address: 192.168.66.4, internalAddress: 192.168.66.4, privateKeyPath: "~/.ssh/id_rsa"}
roleGroups:
etcd:
- master
control-plane:
- master
worker:
- node1
- node2
controlPlaneEndpoint:
## Internal loadbalancer for apiservers
# internalLoadbalancer: haproxy
domain: lb.kubesphere.local
address: ""
port: 6443
kubernetes:
version: v1.21.5
clusterName: cluster.local
autoRenewCerts: true
containerManager: docker
etcd:
type: kubekey
network:
plugin: calico
kubePodsCIDR: 10.233.64.0/18
kubeServiceCIDR: 10.233.0.0/18
## multus support. https://github.com/k8snetworkplumbingwg/multus-cni
multusCNI:
enabled: false
registry:
privateRegistry: "registry.cn-beijing.aliyuncs.com"
namespaceOverride: "kubesphereio"
registryMirrors: []
insecureRegistries: []
addons: []
---
apiVersion: installer.kubesphere.io/v1alpha1
kind: ClusterConfiguration
metadata:
name: ks-installer
namespace: kubesphere-system
labels:
version: v3.3.2
spec:
persistence:
storageClass: ""
authentication:
jwtSecret: ""
zone: ""
local_registry: ""
namespace_override: ""
# dev_tag: ""
etcd:
monitoring: false
endpointIps: localhost
port: 2379
tlsEnable: true
common:
core:
console:
enableMultiLogin: true
port: 30880
type: NodePort
# apiserver:
# resources: {}
# controllerManager:
# resources: {}
redis:
enabled: false
volumeSize: 2Gi
openldap:
enabled: false
volumeSize: 2Gi
minio:
volumeSize: 20Gi
monitoring:
# type: external
endpoint: http://prometheus-operated.kubesphere-monitoring-system.svc:9090
GPUMonitoring:
enabled: false
gpu:
kinds:
- resourceName: "nvidia.com/gpu"
resourceType: "GPU"
default: true
es:
# master:
# volumeSize: 4Gi
# replicas: 1
# resources: {}
# data:
# volumeSize: 20Gi
# replicas: 1
# resources: {}
logMaxAge: 7
elkPrefix: logstash
basicAuth:
enabled: false
username: ""
password: ""
externalElasticsearchHost: ""
externalElasticsearchPort: ""
alerting:
enabled: false
# thanosruler:
# replicas: 1
# resources: {}
auditing:
enabled: false
# operator:
# resources: {}
# webhook:
# resources: {}
devops:
enabled: false
# resources: {}
jenkinsMemoryLim: 8Gi
jenkinsMemoryReq: 4Gi
jenkinsVolumeSize: 8Gi
events:
enabled: false
# operator:
# resources: {}
# exporter:
# resources: {}
# ruler:
# enabled: true
# replicas: 2
# resources: {}
logging:
enabled: false
logsidecar:
enabled: true
replicas: 2
# resources: {}
metrics_server:
enabled: false
monitoring:
storageClass: ""
node_exporter:
port: 9100
# resources: {}
# kube_rbac_proxy:
# resources: {}
# kube_state_metrics:
# resources: {}
# prometheus:
# replicas: 1
# volumeSize: 20Gi
# resources: {}
# operator:
# resources: {}
# alertmanager:
# replicas: 1
# resources: {}
# notification_manager:
# resources: {}
# operator:
# resources: {}
# proxy:
# resources: {}
gpu:
nvidia_dcgm_exporter:
enabled: false
# resources: {}
multicluster:
clusterRole: none
network:
networkpolicy:
enabled: false
ippool:
type: none
topology:
type: none
openpitrix:
store:
enabled: false
servicemesh:
enabled: false
istio:
components:
ingressGateways:
- name: istio-ingressgateway
enabled: false
cni:
enabled: false
edgeruntime:
enabled: false
kubeedge:
enabled: false
cloudCore:
cloudHub:
advertiseAddress:
- ""
service:
cloudhubNodePort: "30000"
cloudhubQuicNodePort: "30001"
cloudhubHttpsNodePort: "30002"
cloudstreamNodePort: "30003"
tunnelNodePort: "30004"
# resources: {}
# hostNetWork: false
iptables-manager:
enabled: true
mode: "external"
# resources: {}
# edgeService:
# resources: {}
terminal:
timeout: 600
这里有一小坑:
官方提供的阿里云镜像地址为:
registry.cn-beijing.aliyuncs.com/kubesphereio/镜像名称:版本号
需要在config-sample.yaml修改以下内容:
registry:
privateRegistry: "registry.cn-beijing.aliyuncs.com"
namespaceOverride: "kubesphereio"
registryMirrors: []
insecureRegistries: []
注:个别kubernetes版本官方提供的阿里云镜像会不存在,则下载会失败。我使用的kubernetes版本是1.25.5则没出现此问题。
四:创建集群
./kk create cluster -f config-sample.yaml
如果使用其他名称,则需要将上面的 config-sample.yaml 更改为您自己的文件。
整个安装过程可能需要 10 到 20 分钟,具体取决于您的计算机和网络环境。
安装成功后如图可看到可视化控制台url以及登录账号密码
也可以使用以下命令获取
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l 'app in (ks-install, ks-installer)' -o jsonpath='{.items[0].metadata.name}') -f
登录成功:
五.报错问题
1.KubeSphere安装简单快捷,目前遇到的坑仅是镜像拉取问题,国内使用docker不太友好,很多镜像站已经使用不了了。如官方提供的阿里云镜像仓库使用不了后,建议使用自建harbor仓库。
官方也有提供版本需哪些镜像的文件
https://github.com/kubesphere/ks-installer/releases/download/v3.2.1/images-list.txt
将镜像都上传至仓库后需在config-sample.yaml文件修改以下内容:
registry:
# 如需使用 kk 部署 harbor, 可将该参数设置为 harbor,不设置该参数且需使用 kk 创建容器镜像仓库,将默认使用docker registry。
type: harbor
# 如使用 kk 部署的 harbor 或其他需要登录的仓库,可设置对应仓库的auths,如使用 kk 创建的 docker registry 仓库,则无需配置该参数。
# 注意:如使用 kk 部署 harbor,该参数请于 harbor 启动后设置。
#auths:
# "dockerhub.kubekey.local":
# username: admin
# password: Harbor12345
plainHTTP: false
# 设置集群部署时使用的私有仓库
privateRegistry: ""
namespaceOverride: ""
registryMirrors: []
insecureRegistries: []
2.等待补充...