Linux多节点使用KubeKey部署KubeSphere

Posted 爱上口袋的天空

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux多节点使用KubeKey部署KubeSphere相关的知识,希望对你有一定的参考价值。

1、简介

        在上两篇,讲解了基于Kubernetes部署和基于Linux单节点部署KubeSphere。在生产环境中,由于单节点集群资源有限、计算能力不足,无法满足大部分需求,因此不建议在处理大规模数据时使用单节点集群。此外,单节点集群只有一个节点,因此也不具有高可用性。相比之下,在应用程序部署和分发方面,多节点架构是最常见的首选架构。
概念
        多节点集群由至少一个主节点和一个工作节点组成。您可以使用任何节点作为任务机来执行安装任务,也可以在安装之前或之后根据需要新增节点(例如,为了实现高可用性)。

Master:主节点,通常托管控制平面,控制和管理整个系统。
Worker:工作节点,运行部署在工作节点上的实际应用程序。

官方部署文档:https://kubesphere.com.cn/docs/installing-on-linux/introduction/multioverview/


2、环境说明

CentOS7.9
每台机器:4VCPU+4G
使用华为云的服务器

2.1、配置前置环境(在所有节点做操作)

1、修改主机名,一台叫master、另外两台叫做node1、node2

hostnamectl set-hostname xxx

 2、关闭防火墙,Selinux,iptables

systemctl stop firewalld
systemctl enable firewalld
setenforce 0
sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config
iptables -F

3、下载KubeKey文件(在master节点执行)

[root@master ~]# export KKZONE=cn            #导入个环境变量

[root@master ~]# curl -sfL https://get-kk.kubesphere.io | VERSION=v2.0.0 sh -       #下载kk(KubeKey)文件

[root@master ~]# chmod +x kk        #赋予kk文件可执行权限

4、创建集群(在master节点执行)

注意,和单节点部署不同的是,对于多节点安装,我们需要通过指定配置文件来创建集群。
先创建示例配置文件,之后修改相关配置,然后根据此配置文件创建集群

1、创建示例配置文件

./kk create config --with-kubernetes v1.21.5 --with-kubesphere v3.2.1          #指定Kubernetes版本,指定KubeSphere版本
[root@master ~]# ll
total 68480
-rw-r--r-- 1 root root     4777 Apr  8 20:35 config-sample.yaml            #运行此命令之后,会产生个config-sample.yaml文件,它就是集群的配置文件。
-rwxr-xr-x 1 1001  121 53764096 Mar  8 13:05 kk
-rw-r--r-- 1 root root 16348932 Apr  8 20:24 kubekey-v2.0.0-linux-amd64.tar.gz

当然如果你想,你还可以通过自己写的配置文件创建集群,这个方法复杂此处采用第一种方法

./kk create config [-f ~/myfolder/abc.yaml]

2、编辑配置文件
以下是多节点集群(具有一个主节点)配置文件的示例:
我们必须修改的有两处,其余的看情况:

[root@master ~]# cat config-sample.yaml 

apiVersion: kubekey.kubesphere.io/v1alpha2
kind: Cluster
metadata:
  name: sample
spec:
  hosts:                #下面的有几台机器,就写几条信息,其中:name:节点的主机名。address:任务机和其他实例通过 SSH 相互连接所使用的 IP 地址,就填写自己节点的内网IP。internalAddress:填写节点的内网IP,user:指定Linux操作系统的用户,这里我的是root用户。password:root用户的密码。
  - name: master, address: 192.168.0.223, internalAddress: 192.168.0.223, user: root, password: "Zbzr0823"
  - name: node1, address: 192.168.0.108, internalAddress: 192.168.0.108, user: root, password: "Zbzr0823"
  - name: node2, address: 192.168.0.14, internalAddress: 192.168.0.14, user: root, password: "Zbzr0823"
  roleGroups:
    etcd:                #指定etcd安装在那个节点
    - master             #安装在master节点
    control-plane:       #指定控制平面的节点
    - master             #指定master控制平面是master节点
    worker:              #指定有哪几个work节点,如果也想要master节点加入work节点,也可以如下格式进行填写。
    - node1
    - node2
  controlPlaneEndpoint:
    ## Internal loadbalancer for apiservers 
    # internalLoadbalancer: haproxy

    domain: lb.kubesphere.local
    address: ""
    port: 6443
  kubernetes:
    version: v1.21.5
    clusterName: cluster.local
  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:
    plainHTTP: false
    privateRegistry: ""
    namespaceOverride: ""
    registryMirrors: []
    insecureRegistries: []
  addons: []



---
#以下部分是可选的修改,就是关于开启插件的配置,我在基于Kubernetes平台安装KubeSphere那篇文章有详细说明,如果你的集群配置性能非常好,那你可以选择性的开启插件,如果不做修改,默认是最小化安装KubeSphere。(就是将false--->true)
apiVersion: installer.kubesphere.io/v1alpha1
kind: ClusterConfiguration
metadata:
  name: ks-installer
  namespace: kubesphere-system
  labels:
    version: v3.2.1
spec:
  persistence:
    storageClass: ""
  authentication:
    jwtSecret: ""
  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
    jenkinsMemoryLim: 2Gi
    jenkinsMemoryReq: 1500Mi
    jenkinsVolumeSize: 8Gi
    jenkinsJavaOpts_Xms: 512m
    jenkinsJavaOpts_Xmx: 512m
    jenkinsJavaOpts_MaxRAM: 2g
  events:
    enabled: false
    # operator:
    #   resources: 
    # exporter:
    #   resources: 
    # ruler:
    #   enabled: true
    #   replicas: 2
    #   resources: 
  logging:
    enabled: false
    containerruntime: docker
    logsidecar:
      enabled: true
      replicas: 2
      # resources: 
  metrics_server:
    enabled: false
  monitoring:
    storageClass: ""
    # kube_rbac_proxy:
    #   resources: 
    # kube_state_metrics:
    #   resources: 
    # prometheus:
    #   replicas: 1
    #   volumeSize: 20Gi
    #   resources: 
    #   operator:
    #     resources: 
    #   adapter:
    #     resources: 
    # node_exporter:
    #   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
  kubeedge:
    enabled: false   
    cloudCore:
      nodeSelector: "node-role.kubernetes.io/worker": ""
      tolerations: []
      cloudhubPort: "10000"
      cloudhubQuicPort: "10001"
      cloudhubHttpsPort: "10002"
      cloudstreamPort: "10003"
      tunnelPort: "10004"
      cloudHub:
        advertiseAddress:
          - ""
        nodeLimit: "100"
      service:
        cloudhubNodePort: "30000"
        cloudhubQuicNodePort: "30001"
        cloudhubHttpsNodePort: "30002"
        cloudstreamNodePort: "30003"
        tunnelNodePort: "30004"
    edgeWatcher:
      nodeSelector: "node-role.kubernetes.io/worker": ""
      tolerations: []
      edgeWatcherAgent:
        nodeSelector: "node-role.kubernetes.io/worker": ""
        tolerations: []

3、 使用配置文件创建集群

安装前置包(在所有节点上操作)

yum install -y conntrack

然后执行如下命令:

./kk create cluster -f config-sample.yaml
(Continue this installation? [yes/no]: yes  )        #就会自动安装了。
#剩下就是15分钟的等待

4、查看进度

kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='.items[0].metadata.name') -f
Collecting installation results ...
#####################################################
###              Welcome to KubeSphere!           ###
#####################################################

Console: http://192.168.0.223:30880
Account: admin
Password: P@88w0rd

NOTES:
  1. After you log into the console, please check the
     monitoring status of service components in
     "Cluster Management". If any service is not
     ready, please wait patiently until all components 
     are up and running.
  2. Please change the default password after login.

#####################################################
https://kubesphere.io             2022-04-08 21:25:49
#####################################################

到这里就代表安装行了

5、访问KubeSphere

节点IP:30880
用户:root
初始密码:P@88w0rd

之后设置新的密码,然后就进入KubeSphere的主界面了:

 

以上是关于Linux多节点使用KubeKey部署KubeSphere的主要内容,如果未能解决你的问题,请参考以下文章

Kubesphere容器平台

使用 KubeKey 快速离线部署 K8s 与 KubeSphere

kubekey安装k8s集群详细手册

kubekey快速安装高可用k8s集群

(四)从零开始搭建k8s集群—— 使用KubeKey一键式搭建高可用k8s集群

azkaban配置多节点集群模式部署