Kubernetes 部署 Nebula 图数据库集群

Kubernetes 是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes 的目标是让部署容器化的应用简单并且高效,Kubernetes 提供了应用部署,规划,更新,维护的一种机制。<br />Kubernetes 在设计结构上定义了一系列的构建模块,其目的是为了提供一个可以部署、维护和扩展应用程序的机制,组成 Kubernetes 的组件设计概念为松耦合和可扩展的,这样可以使之满足多种不同的工作负载。可扩展性在很大程度上由 Kubernetes API 提供,此 API 主要被作为扩展的内部组件以及 Kubernetes 上运行的容器来使用。

 Kubernetes 主要由以下几个核心组件组成:

  • etcd  保存了整个集群的状态

  • apiserver 提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制

  • controller manager 负责维护集群的状态,比如故障检测、自动扩展、滚动更新等

  • scheduler 负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上

  • kubelet 负责维护容器的生命周期,同时也负责 Volume和网络的管理

  • Container runtime 负责镜像管理以及 Pod 和容器的真正运行(CRI)

  • kube-proxy 负责为 Service 提供 cluster 内部的服务发现和负载均衡

除了核心组件,还有一些推荐的 Add-ons:

  • kube-dns 负责为整个集群提供 DNS 服务

  • Ingress Controller 为服务提供外网入口

  • Heapster 提供资源监控

  • Dashboard 提供 GUI

  • Federation 提供跨可用区的集群

  • Fluentd-elasticsearch 提供集群日志采集、存储与查询

Kubernetes 和数据库

数据库容器化是最近的一大热点,那么 Kubernetes 能为数据库带来什么好处呢?

  • 故障恢复: Kubernetes 提供故障恢复的功能,数据库应用如果宕掉,Kubernetes 可以将其自动重启,或者将数据库实例迁移到集群中其他节点上

  • 存储管理: Kubernetes 提供了丰富的存储接入方案,数据库应用能透明地使用不同类型的存储系统

  • 负载均衡: Kubernetes Service 提供负载均衡功能,能将外部访问平摊给不同的数据库实例副本上

  • 水平拓展: Kubernetes 可以根据当前数据库集群的资源利用率情况,缩放副本数目,从而提升资源的利用率

目前很多数据库,如:MySQL,MongoDB 和 TiDB 在 Kubernetes 集群中都能运行很良好。

Nebula Graph在Kubernetes中的实践

Nebula Graph 是一个分布式的开源图数据库,主要组件有:Query Engine 的 graphd,数据存储的 storaged,和元数据的 meted。在 Kubernetes 实践过程中,它主要给图数据库 Nebula Graph 带来了以下的好处:

  • Kubernetes 能分摊 nebula graphd,metad 和 storaged 不副本之间的负载。graphd,metad 和 storaged 可以通过 Kubernetes 的域名服务自动发现彼此。

  • 通过 storageclass,pvc 和 pv 可以屏蔽底层存储细节,无论使用本地卷还是云盘,Kubernetes 均可以屏蔽这些细节。

  • 通过 Kubernetes 可以在几秒内成功部署一套 Nebula 集群,Kubernetes 也可以无感知地实现 Nebula 集群的升级。

  • Nebula 集群通过 Kubernetes 可以做到自我恢复,单体副本 crash,Kubernetes 可以重新将其拉起,无需运维人员介入。

  • Kubernetes 可以根据当前 Nebula 集群的资源利用率情况水平伸缩 Nebula 集群,从而提供集群的性能。

下面来讲解下具体的实践内容。

集群部署

硬件和软件要求

这里主要罗列下本文部署涉及到的机器、操作系统参数

  • 操作系统使用的 CentOS-7.6.1810 x86_64

  • 虚拟机配置

    • 4 CPU

    • 8G 内存

    • 50G 系统盘

    • 50G 数据盘A

    • 50G 数据盘B

  • Kubernetes 集群版本 v1.16

  • Nebula 版本为 v1.0.0-rc3

  • 使用本地 PV 作为数据存储

kubernetes 集群规划

以下为集群清单

服务器 IP

nebula 实例

role

192.168.0.1

k8s-master

192.168.0.2

graphd, metad-0, storaged-0

k8s-slave

192.168.0.3

graphd, metad-1, storaged-1

k8s-slave

192.168.0.4

graphd, metad-2, storaged-2

k8s-slave

Kubernetes 待部署组件

  • 安装 Helm

  • 准备本地磁盘,并安装本地卷插件

  • 安装 nebula 集群

  • 安装 ingress-controller

安装 Helm

Helm 是 Kubernetes 集群上的包管理工具,类似 CentOS 上的 yum,Ubuntu 上的 apt-get。使用 Helm 可以极大地降低使用 Kubernetes 部署应用的门槛。由于本篇文章不做 Helm 详细介绍,有兴趣的小伙伴可自行阅读《Helm 入门指南》

下载安装Helm

使用下面命令在终端执行即可安装 Helm

[root@nebula ~]# wget https://get.helm.sh/helm-v3.0.1-linux-amd64.tar.gz [root@nebula ~]# tar -zxvf helm/helm-v3.0.1-linux-amd64.tgz[root@nebula ~]# mv linux-amd64/helm /usr/bin/helm[root@nebula ~]# chmod +x /usr/bin/helm

查看 Helm 版本

执行 helm version 命令即可查看对应的 Helm 版本,以文本为例,以下为输出结果:

1version.BuildInfo{ 2    Version:"v3.0.1",  3    GitCommit:"7c22ef9ce89e0ebeb7125ba2ebf7d421f3e82ffa",  4    GitTreeState:"clean",  5    GoVersion:"go1.13.4"}

设置本地磁盘

在每台机器上做如下配置

创建 mount 目录

[root@nebula ~]# sudo mkdir -p /mnt/disks

格式化数据盘

[root@nebula ~]# sudo mkfs.ext4 /dev/diskA [root@nebula ~]# sudo mkfs.ext4 /dev/diskB

挂载数据盘

[root@nebula ~]# DISKA_UUID=$(blkid -s UUID -o value /dev/diskA) [root@nebula ~]# DISKB_UUID=$(blkid -s UUID -o value /dev/diskB) [root@nebula ~]# sudo mkdir /mnt/disks/$DISKA_UUID[root@nebula ~]# sudo mkdir /mnt/disks/$DISKB_UUID[root@nebula ~]# sudo mount -t ext4 /dev/diskA /mnt/disks/$DISKA_UUID[root@nebula ~]# sudo mount -t ext4 /dev/diskB /mnt/disks/$DISKB_UUID[root@nebula ~]# echo UUID=`sudo blkid -s UUID -o value /dev/diskA` /mnt/disks/$DISKA_UUID ext4 defaults 0 2 | sudo tee -a /etc/fstab[root@nebula ~]# echo UUID=`sudo blkid -s UUID -o value /dev/diskB` /mnt/disks/$DISKB_UUID ext4 defaults 0 2 | sudo tee -a /etc/fstab

部署本地卷插件

[root@nebula ~]# curl https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner/archive/v2.3.3.zip[root@nebula ~]# unzip v2.3.3.zip

修改 v2.3.3/helm/provisioner/values.yaml

1## Common options.#common: 2  # 3  # Defines whether to generate service account and role bindings. 4  # 5  rbac: true 6  # 7  # Defines the namespace where provisioner runs 8  # 9  namespace: default 10  # 11  # Defines whether to create provisioner namespace 12  # 13  createNamespace: false 14  # 15  # Beta PV.NodeAffinity field is used by default. If running against pre-1.10 16  # k8s version, the `useAlphaAPI` flag must be enabled in the configMap. 17  # 18  useAlphaAPI: false 19  # 20  # Indicates if PVs should be dependents of the owner Node. 21  # 22  setPVOwnerRef: false 23  # 24  # Provisioner clean volumes in process by default. If set to true, provisioner 25  # will use Jobs to clean. 26  # 27  useJobForCleaning: false 28  # 29  # Provisioner name contains Node.UID by default. If set to true, the provisioner 30  # name will only use Node.Name. 31  # 32  useNodeNameOnly: false 33  # 34  # Resync period in reflectors will be random between minResyncPeriod and 35  # 2*minResyncPeriod. Default: 5m0s. 36  # 37  #minResyncPeriod: 5m0s 38  # 39  # Defines the name of configmap used by Provisioner 40  # 41  configMapName: "local-provisioner-config" 42  # 43  # Enables or disables Pod Security Policy creation and binding 44  # 45  podSecurityPolicy: false## Configure storage classes.#classes:- name: fast-disks # Defines name of storage classe. 46  # Path on the host where local volumes of this storage class are mounted 47  # under. 48  hostDir: /mnt/fast-disks 49  # Optionally specify mount path of local volumes. By default, we use same 50  # path as hostDir in container. 51  # mountDir: /mnt/fast-disks 52  # The volume mode of created PersistentVolume object. Default to Filesystem 53  # if not specified. 54  volumeMode: Filesystem 55  # Filesystem type to mount. 56  # It applies only when the source path is a block device, 57  # and desire volume mode is Filesystem. 58  # Must be a filesystem type supported by the host operating system. 59  fsType: ext4 60  blockCleanerCommand: 61  #  Do a quick reset of the block device during its cleanup. 62  #  - "/scripts/quick_reset.sh" 63  #  or use dd to zero out block dev in two iterations by uncommenting these lines 64  #  - "/scripts/dd_zero.sh" 65  #  - "2" 66  # or run shred utility for 2 iteration.s 67     - "/scripts/shred.sh" 68     - "2" 69  # or blkdiscard utility by uncommenting the line below. 70  #  - "/scripts/blkdiscard.sh" 71  # Uncomment to create storage class object with default configuration. 72  # storageClass: true 73  # Uncomment to create storage class object and configure it. 74  # storageClass: 75    # reclaimPolicy: Delete # Available reclaim policies: Delete/Retain, defaults: Delete. 76    # isDefaultClass: true # set as default class## Configure DaemonSet for provisioner.#daemonset: 77  # 78  # Defines the name of a Provisioner 79  # 80  name: "local-volume-provisioner" 81  # 82  # Defines Provisioner's image name including container registry. 83  # 84  image: quay.io/external_storage/local-volume-provisioner:v2.3.3 85  # 86  # Defines Image download policy, see kubernetes documentation for available values. 87  # 88  #imagePullPolicy: Always 89  # 90  # Defines a name of the service account which Provisioner will use to communicate with API server. 91  # 92  serviceAccount: local-storage-admin 93  # 94  # Defines a name of the Pod Priority Class to use with the Provisioner DaemonSet 95  # 96  # Note that if you want to make it critical, specify "system-cluster-critical" 97  # or "system-node-critical" and deploy in kube-system namespace. 98  # Ref: https://k8s.io/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/#marking-pod-as-critical 99  # 100  #priorityClassName: system-node-critical 101  # If configured, nodeSelector will add a nodeSelector field to the DaemonSet PodSpec. 102  # 103  # NodeSelector constraint for local-volume-provisioner scheduling to nodes. 104  # Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector 105  nodeSelector: {} 106  # 107  # If configured KubeConfigEnv will (optionally) specify the location of kubeconfig file on the node. 108  #  kubeConfigEnv: KUBECONFIG 109  # 110  # List of node labels to be copied to the PVs created by the provisioner in a format: 111  # 112  #  nodeLabels: 113  #    - failure-domain.beta.kubernetes.io/zone 114  #    - failure-domain.beta.kubernetes.io/region 115  # 116  # If configured, tolerations will add a toleration field to the DaemonSet PodSpec. 117  # 118  # Node tolerations for local-volume-provisioner scheduling to nodes with taints. 119  # Ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ 120  tolerations: [] 121  # 122  # If configured, resources will set the requests/limits field to the Daemonset PodSpec. 123  # Ref: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ 124  resources: {}## Configure Prometheus monitoring#prometheus: 125  operator: 126    ## Are you using Prometheus Operator? 127    enabled: false 128 129    serviceMonitor: 130      ## Interval at which Prometheus scrapes the provisioner 131      interval: 10s 132 133      # Namespace Prometheus is installed in 134      namespace: monitoring 135 136      ## Defaults to whats used if you follow CoreOS [Prometheus Install Instructions](https://github.com/coreos/prometheus-operator/tree/master/helm#tldr) 137      ## [Prometheus Selector Label](https://github.com/coreos/prometheus-operator/blob/master/helm/prometheus/templates/prometheus.yaml#L65) 138      ## [Kube Prometheus Selector Label](https://github.com/coreos/prometheus-operator/blob/master/helm/kube-prometheus/values.yaml#L298) 139      selector: 140        prometheus: kube-prometheus

hostDir: /mnt/fast-disks 改成hostDir: /mnt/disks<br /># storageClass: true 改成 storageClass: true<br />然后执行:

#安装[root@nebula ~]# helm install local-static-provisioner v2.3.3/helm/provisioner#查看local-static-provisioner部署情况[root@nebula ~]# helm list

部署 nebula 集群

下载 nebula helm-chart 包

# 下载nebula[root@nebula ~]# wget https://github.com/vesoft-inc/nebula/archive/master.zip # 解压[root@nebula ~]# unzip master.zip

设置 Kubernetes slave 节点

下面是 Kubernetes 节点列表,我们需要设置 slave 节点的调度标签。可以将 192.168.0.2192.168.0.3192.168.0.4 打上 nebula: "yes" 的标签。

服务器 IP

kubernetes roles

nodeName

192.168.0.1

master

192.168.0.1

192.168.0.2

worker

192.168.0.2

192.168.0.3

worker

192.168.0.3

192.168.0.4

worker

192.168.0.4

具体操作如下:

[root@nebula ~]# kubectl  label node 192.168.0.2 nebula="yes" --overwrite [root@nebula ~]# kubectl  label node 192.168.0.3 nebula="yes" --overwrite[root@nebula ~]# kubectl  label node 192.168.0.4 nebula="yes" --overwrite

调整 nebula helm chart 默认的 values 值

nebula helm-chart 包目录如下:

1master/kubernetes/ 2└── helm 3    ├── Chart.yaml 4    ├── templates 5    │   ├── configmap.yaml 6    │   ├── deployment.yaml 7    │   ├── _helpers.tpl 8    │   ├── ingress-configmap.yaml9    │   ├── NOTES.txt 10    │   ├── pdb.yaml 11    │   ├── service.yaml 12    │   └── statefulset.yaml 13    └── values.yaml 14 152 directories, 10 files

我们需要调整 master/kubernetes/values.yaml  里面的 MetadHosts 的值,将这个 IP List 替换本环境的 3 个 k8s worker 的 ip。

1MetadHosts: 2  - 192.168.0.2:44500 3  - 192.168.0.3:44500 4  - 192.168.0.4:44500

通过 helm 安装 nebula

1# 安装[root@nebula ~]# helm install nebula master/kubernetes/helm # 查看[root@nebula ~]# helm status nebula# 查看k8s集群上nebula部署情况[root@nebula ~]# kubectl get pod  | grep nebulanebula-graphd-579d89c958-g2j2c                   1/1     Running            0          1m 2nebula-graphd-579d89c958-p7829                   1/1     Running            0          1m 3nebula-graphd-579d89c958-q74zx                   1/1     Running            0          1m 4nebula-metad-0                                   1/1     Running            0          1m 5nebula-metad-1                                   1/1     Running            0          1m 6nebula-metad-2                                   1/1     Running            0          1m 7nebula-storaged-0                                1/1     Running            0          1m 8nebula-storaged-1                                1/1     Running            0          1m 9nebula-storaged-2                                1/1     Running            0          1m

部署 Ingress-controller

Ingress-controller 是 Kubernetes 的一个 Add-Ons。Kubernetes 通过 ingress-controller 将 Kubernetes 内部署的服务暴露给外部用户访问。Ingress-controller 还提供负载均衡的功能,可以将外部访问流量平摊给 k8s 中应用的不同的副本。郑州好的不孕不育医院有哪些:http://www.xbzztj.com/

选择一个节点部署 Ingress-controller

1[root@nebula ~]# kubectl get node NAME              STATUS     ROLES    AGE   VERSION 2192.168.0.1       Ready      master   82d   v1.16.1 3192.168.0.2       Ready      <none>   82d   v1.16.1 4192.168.0.3       Ready      <none>   82d   v1.16.1 5192.168.0.4       Ready      <none>   82d   v1.16.1 6[root@nebula ~]# kubectl label node 192.168.0.4 ingress=yes

编写 ingress-nginx.yaml 部署文件

1apiVersion: v1 2kind: Namespace 3metadata: 4  name: ingress-nginx 5  labels: 6    app.kubernetes.io/name: ingress-nginx 7    app.kubernetes.io/part-of: ingress-nginx 8--- 9kind: ConfigMap 10apiVersion: v1 11metadata: 12  name: nginx-configuration 13  namespace: ingress-nginx 14  labels: 15    app.kubernetes.io/name: ingress-nginx 16    app.kubernetes.io/part-of: ingress-nginx 17--- 18kind: ConfigMap 19apiVersion: v1 20metadata: 21  name: tcp-services 22  namespace: ingress-nginx 23  labels: 24    app.kubernetes.io/name: ingress-nginx 25    app.kubernetes.io/part-of: ingress-nginx 26--- 27kind: ConfigMap 28apiVersion: v1 29metadata: 30  name: udp-services 31  namespace: ingress-nginx 32  labels: 33    app.kubernetes.io/name: ingress-nginx 34    app.kubernetes.io/part-of: ingress-nginx 35--- 36apiVersion: v1 37kind: ServiceAccount 38metadata: 39  name: nginx-ingress-serviceaccount 40  namespace: ingress-nginx 41  labels: 42    app.kubernetes.io/name: ingress-nginx 43    app.kubernetes.io/part-of: ingress-nginx 44 45--- 46apiVersion: rbac.authorization.k8s.io/v1beta1 47kind: ClusterRole 48metadata: 49  name: nginx-ingress-clusterrole 50  labels: 51    app.kubernetes.io/name: ingress-nginx 52    app.kubernetes.io/part-of: ingress-nginx 53rules: 54  - apiGroups: 55      - "" 56    resources: 57      - configmaps 58      - endpoints 59      - nodes 60      - pods 61      - secrets 62    verbs: 63      - list 64      - watch 65  - apiGroups: 66      - "" 67    resources: 68      - nodes 69    verbs: 70      - get 71  - apiGroups: 72      - "" 73    resources: 74      - services 75    verbs: 76      - get 77      - list 78      - watch 79  - apiGroups: 80      - "extensions" 81      - "networking.k8s.io" 82    resources: 83      - ingresses 84    verbs: 85      - get 86      - list 87      - watch 88  - apiGroups: 89      - "" 90    resources: 91      - events 92    verbs: 93      - create 94      - patch 95  - apiGroups: 96      - "extensions" 97      - "networking.k8s.io" 98    resources: 99      - ingresses/status 100    verbs: 101      - update 102--- 103apiVersion: rbac.authorization.k8s.io/v1beta1 104kind: Role 105metadata: 106  name: nginx-ingress-role 107  namespace: ingress-nginx 108  labels: 109    app.kubernetes.io/name: ingress-nginx 110    app.kubernetes.io/part-of: ingress-nginx 111rules: 112  - apiGroups: 113      - "" 114    resources: 115      - configmaps 116      - pods 117      - secrets 118      - namespaces 119    verbs: 120      - get 121  - apiGroups: 122      - "" 123    resources: 124      - configmaps 125    resourceNames:      # Defaults to "<election-id>-<ingress-class>" 126      # Here: "<ingress-controller-leader>-<nginx>" 127      # This has to be adapted if you change either parameter 128      # when launching the nginx-ingress-controller. 129      - "ingress-controller-leader-nginx" 130    verbs: 131      - get 132      - update 133  - apiGroups: 134      - "" 135    resources: 136      - configmaps 137    verbs: 138      - create 139  - apiGroups: 140      - "" 141    resources: 142      - endpoints 143    verbs: 144      - get 145--- 146apiVersion: rbac.authorization.k8s.io/v1beta1 147kind: RoleBinding 148metadata: 149  name: nginx-ingress-role-nisa-binding 150  namespace: ingress-nginx 151  labels: 152    app.kubernetes.io/name: ingress-nginx 153    app.kubernetes.io/part-of: ingress-nginx 154roleRef: 155  apiGroup: rbac.authorization.k8s.io 156  kind: Role 157  name: nginx-ingress-role 158subjects: 159  - kind: ServiceAccount 160    name: nginx-ingress-serviceaccount 161    namespace: ingress-nginx 162 163--- 164apiVersion: rbac.authorization.k8s.io/v1beta1 165kind: ClusterRoleBinding 166metadata: 167  name: nginx-ingress-clusterrole-nisa-binding 168  labels: 169    app.kubernetes.io/name: ingress-nginx 170    app.kubernetes.io/part-of: ingress-nginx 171roleRef: 172  apiGroup: rbac.authorization.k8s.io 173  kind: ClusterRole 174  name: nginx-ingress-clusterrole 175subjects: 176  - kind: ServiceAccount 177    name: nginx-ingress-serviceaccount 178    namespace: ingress-nginx 179 180--- 181apiVersion: apps/v1 182kind: DaemonSet 183metadata: 184  name: nginx-ingress-controller 185  namespace: ingress-nginx 186  labels: 187    app.kubernetes.io/name: ingress-nginx 188    app.kubernetes.io/part-of: ingress-nginx 189spec: 190  selector: 191    matchLabels: 192      app.kubernetes.io/name: ingress-nginx 193      app.kubernetes.io/part-of: ingress-nginx 194  template: 195    metadata: 196      labels: 197        app.kubernetes.io/name: ingress-nginx 198        app.kubernetes.io/part-of: ingress-nginx 199      annotations: 200        prometheus.io/port: "10254" 201        prometheus.io/scrape: "true" 202    spec: 203      hostNetwork: true 204      tolerations: 205        - key: "node-role.kubernetes.io/master" 206          operator: "Exists" 207          effect: "NoSchedule" 208      affinity: 209        podAntiAffinity: 210          requiredDuringSchedulingIgnoredDuringExecution: 211            - labelSelector: 212                matchExpressions: 213                  - key: app.kubernetes.io/name 214                    operator: In 215                    values: 216                      - ingress-nginx 217              topologyKey: "ingress-nginx.kubernetes.io/master" 218      nodeSelector: 219        ingress: "yes" 220      serviceAccountName: nginx-ingress-serviceaccount 221      containers: 222        - name: nginx-ingress-controller 223          image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller-amd64:0.26.1 224          args: 225            - /nginx-ingress-controller 226            - --configmap=$(POD_NAMESPACE)/nginx-configuration 227            - --tcp-services-configmap=default/graphd-services 228            - --udp-services-configmap=$(POD_NAMESPACE)/udp-services 229            - --publish-service=$(POD_NAMESPACE)/ingress-nginx 230            - --annotations-prefix=nginx.ingress.kubernetes.io 231            - --http-port=8000 232          securityContext: 233            allowPrivilegeEscalation: true 234            capabilities: 235              drop: 236                - ALL 237              add: 238                - NET_BIND_SERVICE            # www-data -> 33 239            runAsUser: 33 240          env: 241            - name: POD_NAME 242              valueFrom: 243                fieldRef: 244                  fieldPath: metadata.name 245            - name: POD_NAMESPACE 246              valueFrom: 247                fieldRef: 248                  fieldPath: metadata.namespace 249          ports: 250            - name: http 251              containerPort: 80 252            - name: https 253              containerPort: 443 254          livenessProbe: 255            failureThreshold: 3 256            httpGet: 257              path: /healthz 258              port: 10254 259              scheme: HTTP 260            initialDelaySeconds: 10 261            periodSeconds: 10 262            successThreshold: 1 263            timeoutSeconds: 10 264          readinessProbe: 265            failureThreshold: 3 266            httpGet: 267              path: /healthz 268              port: 10254 269              scheme: HTTP 270            periodSeconds: 10 271            successThreshold: 1 272            timeoutSeconds: 10

部署 ingress-nginx

1# 部署[root@nebula ~]# kubectl create -f ingress-nginx.yaml# 查看部署情况[root@nebula ~]# kubectl get pod -n ingress-nginx NAME                             READY   STATUS    RESTARTS   AGE 2nginx-ingress-controller-mmms7   1/1     Running   2          1m

访问 nebula 集群

查看 ingress-nginx 所在的节点:

1[root@nebula ~]# kubectl get node -l ingress=yes -owide NAME            STATUS   ROLES    AGE   VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION          CONTAINER-RUNTIME 2192.168.0.4     Ready    <none>   1d   v1.16.1    192.168.0.4    <none>        CentOS Linux 7 (Core)   7.6.1810.el7.x86_64     docker://19.3.3

访问 nebula 集群:

[root@nebula ~]# docker run --rm -ti --net=host vesoft/nebula-console:nightly --addr=192.168.0.4 --port=3699

FAQ

如何搭建一套 Kubernetes 集群?

搭建高可用的 Kubernetes 可以参考社区文档:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/<br /> 你也可以通过 minikube 搭建本地的 Kubernetes 集群,参考文档:https://kubernetes.io/docs/setup/learning-environment/minikube/

如何调整 nebula 集群的部署参数?

在使用 helm install 时,使用 --set 可以设置部署参数,从而覆盖掉 helm chart 中 values.yaml 中的变量。参考文档:https://helm.sh/docs/intro/using_helm/

如何查看 nebula 集群状况?

使用kubectl get pod | grep nebula命令,或者直接在 Kubernetes dashboard 上查看 nebula 集群的运行状况。郑州好的不孕不育医院有哪些:http://www.xasgnk.com/

如何使用其他类型的存储?

参考文档:https://kubernetes.io/zh/docs/concepts/storage/storage-classes/

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

Kubernetes(k8s)中文文档 Kubernetes概述

简介Kubernetes(https://www.kubernetes.org.cn/)是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。Kubernetes一个核心的特点就是能够自主的管理容