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.2,192.168.0.3,192.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.yaml\ 9 │ ├── 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/