一、Helm

1、这一部分我强烈建议,大家可以看下官方的文档,可以看中文的,说的详细和明了,使用的方式说的也很明白清楚,而且helm也不难理解 helm官方中文文档

2、对于后续的helm里面的镜像都是国外的,我们使用起来十分麻烦,这里阿里又提供了,我们可以直接使用这个仓库下的,初探云原生应用管理(一): Helm 与 App Hub

1.1、什么是 Helm

在没使用 helm 之前,向 kubernetes 部署应用,我们要依次部署 deployment、svc 等,步骤较繁琐。况且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂,helm 通过打包的方式,支持发布的版本管理和控制,很大程度上简化了 Kubernetes 应用的部署和管理创建。

Helm 本质就是让 K8s 的应用管理(Deployment,Service 等 ) 可配置,能动态生成。通过动态生成 K8s 资源清单文件(deployment.yaml,service.yaml)。然后调用 Kubectl 自动执行 K8s 资源部署

Helm 是官方提供的类似于 centos 的 YUM 的包管理器,是部署环境的流程封装。Helm 有两个重要的概念:chart 和release

  • chart 是创建一个应用的信息集合,包括各种 Kubernetes 对象的配置模板、参数定义、依赖关系、文档说明等。chart 是应用部署的自包含逻辑单元。可以将 chart 想象成 apt、yum 中的软件安装包。

  • release 是 chart 的运行实例,代表了一个正在运行的应用。当 chart 被安装到 Kubernetes 集群,就生成一个 release。chart 能够多次安装到同一个集群,每次安装都是一个 release。

Helm 包含两个组件:Helm 客户端和 Tiller 服务器,如下图所示

在这里插入图片描述

Helm 客户端负责 chart 和 release 的创建和管理以及和 Tiller 的交互。Tiller 服务器运行在Kubernetes 集群中,它会处理 Helm 客户端的请求,与 Kubernetes API Server 交互。

1.2、Helm 部署

越来越多的公司和团队开始使用 Helm 这个 Kubernetes 的包管理器,我们也将使用 Helm 安装 Kubernetes 的常用组件。 Helm 由客户端命 helm 令行工具和服务端 tiller 组成,Helm 的安装十分简单。

1.2.1、客户端安装

这里的安装需要注意的是helm和k8s是有版本关联关系的。 Helm版本支持策略
在这里插入图片描述
在这里插入图片描述

下载 helm 命令行工具到 /usr/local/bin 下,这样我们直接可以调用它的命令,这里下载的 2.13. 1版本(注意你的系统是不是amd的偶,可以使用 dpkg --print-architecture命令查看):

如果没有这个命令 执行下面命令安装即可
yum install -y epel-release
yum install dpkg -y

#ntpdate ntp1.aliyun.com
wget https://storage.googleapis.com/kubernetes-helm/helm-v2.13.1-linux-amd64.tar.gz
tar -zxvf helm-v2.13.1-linux-amd64.tar.gz
cd linux-amd64/
cp helm /usr/local/bin/

1.2.2、服务端 tiller 安装(好像高版本的helm不需要安装,目前我安装3.5.1 是没有安装这个的

这个服务端好像高版本可以不用安装,或者说这个服务端另有其他作用,目前我安装3.5.1 是没有安装这个的,使用是没有问题的

为了安装服务端 tiller,还需要在这台机器上配置好 kubectl 工具和 kubeconfig 文件,确保 kubectl 工具可以在这台机器上访问 apiserver 且正常使用。

因为 Kubernetes APIServer 开启了 RBAC 访问控制,所以需要创建 tiller 使用的 service account:tiller 并分配合适的角色给它。 详细内容可以查看helm文档中的 Role-based Access Control。 这里简单起见直接分配 cluster- admin 这个集群内置的 ClusterRole 给它。创建 rbac.yaml 文件

apiVersion: v1
kind: ServiceAccount  # 先创建一个sa,这里也是可以创建用户
metadata:
  name: tiller
  namespace: kube-system  # 注意名称空间
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: tiller
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: tiller   # 将 cluster-admin 权限赋予给 tiller这个sa
    namespace: kube-system

创建 ,赋予cluterm-admin的权限

kubectl create -f rbac.yaml

在这里插入图片描述

执行初始化(这个heml命令为啥可以使用,是因为前面我们下载的那个文件里面有这个命令)

# 使用我们前面创建的 tiller 的sa
helm init --service-account tiller --skip-refresh

执行完上面的 init 命令后会出现后会出现,注意名称空间,tiller 默认被部署在 k8s 集群中的 kube-system 这个 namespace 下
在这里插入图片描述可以查看 版本,这样helm的服务端和客户端都安装好了,只不过都在一台服务器上面的。
在这里插入图片描述

1.3、使用helm

1.3.1、helm 安装redis

# 和yum 设置源一样,从哪里下载
helm repo add bitnaml https
# 开始安装
helm install ....

在这里插入图片描述

1.3.2、相关参数命令使用

注意这个 delete 不使用参数 --purge 是会保留历史的,后续可以用下面的 rollback 回滚,而且这样后续你创建新release的时候,就不能创建和已经删除的release相同的名称(因为它还在删除的历史版本里面,会冲突),你要是不想保存的话,删除的时候就必须要用上参数 --purge

# 列出已经部署的 Release
$ helm ls
# 查询一个特定的 Release 的状态
$ helm status RELEASE_NAME
# 移除所有与这个 Release 相关的 Kubernetes 资源
$ helm delete RELEASE_NAME  
# helm rollback RELEASE_NAME REVISION_NUMBER
$ helm rollback RELEASE_NAME 1
# 使用 helm delete --purge RELEASE_NAME 移除所有与指定 Release 相关的 Kubernetes 资源和所有这个
Release 的记录
$ helm delete --purge RELEASE_NAME
$ helm ls --deleted

1.4、helm 自定义组件

1.4.1、简单创建

# 创建文件夹
$ mkdir ./test
$ cd ./test

# 创建自描述文件 Chart.yaml , 这个文件必须有 name 和 version 定义
$ cat <<'EOF' > ./Chart.yaml
name: hello-world
version: 1.0.0
EOF

# 创建模板文件, 用于生成 Kubernetes 资源清单(manifests)
$ mkdir ./templates  # 注意这个目录必须是这个,不能随意更改
$ cat <<'EOF' > ./templates/deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: hello-world
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: hello-world
    spec:
      containers:
        - name: hello-world
          image: hub.atguigu.com/library/myapp:v1
          ports:
            - containerPort: 80
              protocol: TCP
EOF

$ cat <<'EOF' > ./templates/service.yaml
apiVersion: v1
kind: Service
metadata:
  name: hello-world
spec:
  type: NodePort
  ports:
    - port: 80
      targetPort: 80
      protocol: TCP
    selector:
      app: hello-world
EOF

图示上面流程(./templates后面的没有截图了)
在这里插入图片描述
test目录下
在这里插入图片描述
安装

# 使用命令 helm install RELATIVE_PATH_TO_CHART 创建一次Release (注意这个目录这个命令就是在 test目录下执行的)
$ helm install .

创建成功
在这里插入图片描述

我们也可以通过helm list 查看,nobby-eel 这个是随机生成的(当然我们可以在创建的时候通过–name 参数来指定),后面可以使用这个名称来更新
在这里插入图片描述至于更新,我们只需要在修改templates/deploment.yaml文件后,执行

hel upgrade ***(前面helm list 中的你的对应随机生成的那个名称)

在这里插入图片描述
更新完成后,版本也会加一,并且我们还可以通过history命令查看之前的更新历史情况。
在这里插入图片描述
当然最总我们的目的还是 deployment,如下,可以看到是创建成功的
在这里插入图片描述

1.4.2、使用外部参数配置来创建

1、创建配置文件 values.yaml

# 配置体现在配置文件 values.yaml
$ cat <<'EOF' > ./values.yaml
image:
  repository: gcr.io/google-samples/node-hello
  tag: '1.0'
EOF

2、使用配置文件

$ cat <<'EOF' > ./templates/deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: hello-world
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: hello-world
    spec:
      containers:
        - name: hello-world
          image: {{ .Values.image.repository }}:{{ .Values.image.tag }}  # 这里就是使用那个配置文件的内容了
          ports:
            - containerPort: 80
              protocol: TCP
EOF

然后则使用upgrate 命令,更新

helm upgrade .

在这里插入图片描述

1.5、Debug

只是预执行,看看能不能成功而已,不会真正的执行创建容器等等。

# 使用模板动态生成K8s资源清单,非常需要能提前预览生成的结果。
# 使用--dry-run --debug 选项来打印出生成的清单文件内容,而不执行部署
helm install . --dry-run --debug 

二、helm 安装 kubernetes-dashboard 以及使用

2.1、下载安装

这里使用 helm 下载安装

helm fetch stable/kubernetes-dashboard
# 如果提示错误 让你尝试 helm repo update 你就照做即可,效果等同于 yum update 更新源
# helm repo update
# 查看仓库地址
helm repo list 

在这里插入图片描述
下载之后就是我们熟悉的helm的模板格式了
在这里插入图片描述
进入 kubernetes-dashboard 目录,我们创建一个 deployment 文件 kubernetes-dashboard.yaml
在这里插入图片描述

image:
  repository: k8s.gcr.io/kubernetes-dashboard-amd64
  tag: v1.10.1
ingress:
  enabled: true
  hosts:
    - k8s.frognew.com
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
  tls:
    - secretName: frognew-com-tls-secret
      hosts:
      - k8s.frognew.com
rbac:
  clusterAdminRole: true

执行安装

# helm install {目录位置} {-n 名称}  {--namespace 名称空间} {-f 文件名称}
helm install . \
-n kubernetes-dashboard \
--namespace kube-system \
-f kubernetes-dashboard.yaml

再 get pod 就可以查看到我们的容器了
在这里插入图片描述

2.2、访问

如果访问的话,就要知道svc,但是这里可以看到它为我们默认创建的是 ClusterIP 的,是没有提供外部的访问的
在这里插入图片描述
所以,我们为了在外部浏览器访问,有2中方式

  • 第一种直接修改这个svc为NodePort模式。
  • 第二种使用前面我们说过的 ingress的方案。

这里直接修改方式为 nodePort ,机找到 type 的位置将 clusterIP 改为nodePort 即可。
在这里插入图片描述
在这里插入图片描述
此时,我们就再查看svc就可以看到外部的访问端口了
在这里插入图片描述
访问 (注意可能是 https 偶),但是chrome 会提示你无法链接,这里你可以使用火狐浏览器选择强制访问访问
在这里插入图片描述
使用火狐后可以看到,登录方式有两种

  • 第一种就是导入我们服务器家目录下的 ./kube 下的config 配置文件内容
  • 输入token(是一个k8s的secret 在我们前面创建好dashboard之后会自动创建)
    在这里插入图片描述
    对于token的获取如下
    1、找到token的名称
kubectl -n kube-system get secret | grep kubernetes-dashboard-token

在这里插入图片描述

获取到token 内容

kubectl descirbe secret kubernetes-dashboard-token-797gr -n kebe-system

在这里插入图片描述

最后页面效果
在这里插入图片描述

三、Helm部署metrics-server

metrics-server的作用是获取k8s的节点资源情况,为之前我们学习的 HPA 根据节点资源动态调整控制器(deployment等等)的副本数量来提供基础。因为HPA是必须要metrics-server 的

注意这个组件和 promethes 不能同时安装,因为 prometheus 里面就已经包含了这个组件,所以我们一般直接安装prometheus即可。

从 Heapster 的 github https://github.com/kubernetes/heapster 中可以看到已经,heapster 已经DEPRECATED。这里是 heapster 的deprecation timeline。 可以看出 heapster 从 Kubernetes 1.12 开始将从 Kubernetes 各种安装脚本中移除

如果我们没有安装,则可以发现无法获取每个node 的资源,所以我们就需要安装,而 Kubernetes 推荐使用 metrics-server。
在这里插入图片描述

3.1、安装

1、创建文件metrics-server.yaml

args:
- --logtostderr
- --kubelet-insecure-tls
- --kubelet-preferred-address-types=InternalIP

2、使用helm安装
-n 指名称

helm install stable/metrics-server \
-n metrics-server \
--namespace kube-system \
-f metrics-server.yaml

3、查看
使用下面的命令可以获取到关于集群节点基本的指标信息

将后面的资源名称,换掉就可以看不同的资源信息
比如: kubectl get pod 查看pod的资源信息

$ kubectl top node
NAME 	CPU(cores) 		CPU% 		MEMORY(bytes) 		MEMORY%
node1 	 650m 			32% 			1276Mi 				73%
node2 	 73m 			3% 				527Mi 				30%
$ kubectl top pod --all-namespaces
NAMESPACE 		NAME 												CPU(cores) 				MEMORY(bytes)
ingress-nginx 	nginx-ingress-controller-6f5687c58d-jdxzk 				3m 							142Mi
ingress-nginx 	nginx-ingress-controller-6f5687c58d-lxj5q 				5m 							146Mi
ingress-nginx 	nginx-ingress-default-backend-6dc6c46dcc-lf882 			1m 							4Mi
kube-system 	coredns-86c58d9df4-k5jkh 								2m 							15Mi
kube-system 	coredns-86c58d9df4-rw6tt 								3m 							23Mi
kube-system 	etcd-node1 												20m 						86Mi
kube-system 	kube-apiserver-node1 									33m 						468Mi
kube-system 	kube-controller-manager-node1 							29m 						89Mi
kube-system 	kube-flannel-ds-amd64-8nr5j 							2m 							13Mi
kube-system 	kube-flannel-ds-amd64-bmncz 							2m 							21Mi
kube-system 	kube-proxy-d5gxv 										2m 							18Mi
kube-system 	kube-proxy-zm29n 										2m 							16Mi
kube-system 	kube-scheduler-node1 									8m 							28Mi
kube-system 	kubernetes-dashboard-788c98d699-qd2cx 					2m 							16Mi
kube-system 	metrics-server-68785fbcb4-k4g9v 						3m 							12Mi
kube-system 	tiller-deploy-c4fd4cd68-dwkhv 							1m 							24Mi

四、Helm部署prometheus(第一种方式,需要外网)

注意 promethes 不能和 metrics-server 同时安装,因为 prometheus 里面就已经包含了这个组件,所以我们一般直接安装prometheus即可。

使用git下载模板文件,并进入其目录,可以看到很多的 yaml 文件,这些都是我们后面需要创建的。

1、(其实你不下载这些文件,直接是helm install ....命令安装也是可以的,因为那个命令使用的就是我们下面的这些的文件夹内容,只是他是封装到helm这个命令里面了,那我们为什么不直接用helm来安装呢,因为他内部使用的不是 NodePort,你即使使用helm安装完成,后面为了查看效果还是要修改,比如这篇文章 Helm安装Prometheus Operator),如果你不想按照本文的方式,可以参考下他的,我觉得还是不错的。
2、但是他那个文章中写的仓库地址是有问题的,因为,官方已经说了那个名称已经被该名称了。改动名称说明
在这里插入图片描述
所以,你得改成下面这样 改动名称之后的地址
在这里插入图片描述

git clone https://github.com/coreos/kube-prometheus.git
cd  ./kube-prometheus/manifests

在这里插入图片描述

4.1、修改 grafana-service.yaml 文件

使用 nodepode 方式访问 grafana:

vim grafana-service.yaml

修改后如下

apiVersion: v1
kind: Service
metadata:
  name: grafana
  namespace: monitoring
spec:
  type: NodePort #添加内容
  ports:
  - name: http
    port: 3000
    targetPort: http
    nodePort: 30100 #添加内容
  selector:
    app: grafana

在这里插入图片描述

4.2、修改 prometheus-service.yaml

改为 nodepode,对应的yaml文件我就不再写了,增加就是图片中的两个
在这里插入图片描述

4.3、修改 alertmanager-service.yaml

改为 nodepode,对应的yaml文件我就不再写了,增加就是图片中的两个
在这里插入图片描述

4.4、创建

1、因为要用的镜像很多,这里先把资料里的镜像压缩白先手动导入下,使用那个sh脚本即可导入到docker中,记得所有的节点都需要导入,因为你不确定等下会从那个节点去下载镜像

如果你可以使用外网,或者使用你使用阿里云的镜像,那这里你不用做,直接下一步根据文件apply 即可

对于使用阿里云的镜像,你先在阿里云的k8s的仓库找到需要的,你可以根据上面的那些yaml文件,只要用到镜像的都改成阿里云的即可。

在这里插入图片描述

2、先创建名称需要的名称空间monitoring,因为创建的那些文件中都是在这个名称空间下,你可以去看下yaml文件就知道了。
在这里插入图片描述

2、创建的时候不需要你一个文件一个文件创建,你直接指定文件夹即可,下面的yaml文件就会挨个创建,当然那删除的时候也是直接指定这些文件即可。
在这里插入图片描述
3、如果发现报错,就再运行一遍上面的创建命名,因为它们这些组件可能需要互相链接,我们第一次创建,可能依赖的组件还没有启动或者创建,所以我们再多运行几次即可。

4、查看,默认再monitoring空间,你也可以查看yaml文件内容看下最新版本的是在那个命名空间下。
在这里插入图片描述
5、让prometheus运行一会收集数据后,我们就可以查看了
在这里插入图片描述

4.5、页面访问

1、prometheus 对应的 nodeport 端口为 30200,访问 http://MasterIP:30200

在这里插入图片描述

2、通过访问 http://MasterIP:30200/target 可以看到 prometheus 已经成功连接上了 k8s 的 apiserver

在这里插入图片描述

3、查看 service-discovery
在这里插入图片描述

4、Prometheus 自己的指标
在这里插入图片描述

5、prometheus 的 WEB 界面上提供了基本的查询 K8S 集群中每个 POD 的 CPU 使用情况,查询条件如下

sum by (pod_name)( rate(container_cpu_usage_seconds_total{image!="", pod_name!=""}[1m] ) )

在这里插入图片描述

上述的查询有出现数据,说明 node-exporter 往 prometheus 中写入数据正常,接下来我们就可以部署
grafana 组件,实现更友好的 webui 展示数据了

6、访问 grafana

查看 grafana 服务暴露的端口号:

$ kubectl get service -n monitoring | grep grafana
grafana NodePort 10.107.56.143 <none> 3000:30100/TCP 20

如上可以看到 grafana 的端口号是 30100,浏览器访问 http://MasterIP:30100 用户名密码默认 admin/admin

在这里插入图片描述

修改密码并登陆

在这里插入图片描述

添加数据源 grafana 默认已经添加了 Prometheus 数据源,grafana 支持多种时序数据源,每种数据源都有各自的查询编辑器

在这里插入图片描述
Prometheus 数据源的相关参数
在这里插入图片描述
目前官方支持了如下几种数据源
在这里插入图片描述

4.5、HPA测试

1、既然上面安装好了 prometheus ,那么就相当于安装好了 metrics-server ,那我们就可以使用HPA了。Horizontal Pod Autoscaling 可以根据 CPU 利用率自动伸缩一个 Replication Controller、Deployment 或者Replica Set 中的 Pod 数量

HPA 需要 metrics-server 组件来提供节点相关资源信息。

2、使用shell 命令来 创建一个叫做 php-apache 实例,并设置初始 cpu为200M,暴露端口为80

kubectl run php-apache --image=gcr.io/google_containers/hpa-example --requests=cpu=200m --expose  --port=80

创建完成后默认是一个实例。
在这里插入图片描述
3、查看我们刚刚创建的那个非常消耗的pod的资源情况
在这里插入图片描述
4、我们再创建一个HPA来管理 php-apache 这个 deploment,设置cpu占比最高为50%,超过50%后就开始自动扩容,但是不超过10个,低于50后开始自动缩容,但是不低于1个。

kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10

在这里插入图片描述
5、创建完成后,查看HPA(如果有显示unknown 则可能需要等一会),直到TARGETS 不再是 unkonwn,这个50%就是前面我们创建的HPA设置的最大值。
在这里插入图片描述
6、再创建一个 buybox的pod,进入它内部我们无线访问前面那个 pha-apache的pod,这样就可以消耗它的cpu使用率,方便我们查看它超过50%的情况。

$ kubectl run -i --tty load-generator --image=busybox /bin/sh
$ while true; do wget -q -O- http://php-apache.default.svc.cluster.local; done

在这里插入图片描述
7、那我们再开一个窗口监控HPA的状态,再一段时间过后,会发现,飙升到了419。
在这里插入图片描述

而且此时HPA会将php-apache的pod 实例增加到4个,如果你上面的buybox一直在发送,你会发现这个pod实例会一直增加(只需要cpu的使用率超过50%),只不过最多只有10个实例,因为我们上面的HPA设置的自动扩容的最大就是10个。而如果你把buybox关掉(cpu下降到50%以下)就会发现,这个10个实例又会自动删除,下降下来,最少减少到1个实例。
在这里插入图片描述

4.6、资源限制 - (作用于Pod)

我们可以再创建pod的时候,指定初始化内存和大小,以及最大的内存和cpu等等。

Kubernetes 对资源的限制实际上是通过 cgroup 来控制的,cgroup 是容器的一组用来控制内核如何运行进程的相关属性集合。针对内存、CPU 和各种设备都有对应的 cgroup ,而默认情况下,Pod 运行没有 CPU 和内存的限额。 这意味着系统中的任何 Pod 将能够像执行该 Pod 所在的节点一样,消耗足够多的 CPU 和内存 。一般会针对某些应用的 pod 资源进行资源限制,这个资源限制是通过 resources 的 requests 和 limits 来实现。

spec:
containers:
  - image: xxxx
    imagePullPolicy: Always
    name: auth
    ports:
    - containerPort: 8080
      protocol: TCP
    resources:
      limits:
        cpu: "4"
        memory: 2Gi
      requests:
        cpu: 250m
        memory: 250Mi

requests 要分分配的资源,limits 为最高请求的资源值。可以简单理解为初始值和最大值

4.7、资源限制 - (作用于名称空间)

1、计算资源配额

apiVersion: v1
kind: ResourceQuota
metadata:
  name: compute-resources
  namespace: spark-cluster
spec:
  hard:
    pods: "20"
    requests.cpu: "20"
    requests.memory: 100Gi
    limits.cpu: "40"
    limits.memory: 200Gi

2、置对象数量配额限制

apiVersion: v1
kind: LimitRange
metadata:
  name: mem-limit-range
spec:
  limits:
  - default:
      memory: 50Gi
      cpu: 5
    defaultRequest:
      memory: 1Gi
      cpu: 1
    type: Container
  • default 即 limit 的值
  • defaultRequest 即 request 的值

五、Helm部署prometheus(第二种方式,不需要外网)

1、参考方式: helm v3 部署prometheus 与 grafana,使用阿里云的 App Hub

2、我第一开始使用第一种方式,但是找不到镜像,测试环境不能链接国外网络,所以,使用阿里云的 App Hub

3、但是其实这个版本的app hub一直在维护,很久都没有更新了,如果能链接外网的话,建议使用第一种方式。项目的github地址
在这里插入图片描述

六、Helm部署prometheus(第三种方式,建议)

1、这个最简单,直接使用 kuboard页面化安装,相关镜像拉取的是他的仓库的,就不会有问题,而且,提供的界面的操作,十分简单

2、这个是安装完成后的样子
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

七、Helm部署 EFK

因为k8s其内部还是使用docker,所以每一个 pod 的日志的路径其实就是 docker 的启动容器的日志,默认docker的容器日志存放目录是在

/var/log/containers

这里顺便说一个正式环境部署docker的严重问题,你一定要指定docker 的容器的日志大小,因为 Docker 在不重建容器的情况下,日志文件默认会一直追加,时间一长会逐渐占满服务器的硬盘的空间,内存消耗也会一直增加,所以你最好在安装docker的时候指定配置文件 /etc/docker/daemon.json,解决方案可以参考 解决 Docker 日志文件太大的问题,网上很多这样的文章不过解决方案都一样。

在这里插入图片描述

7.1、安装elasticSeach

7.1.1、下载 elasticsearch 对应的 helm 模板

下载 EFK 的 helm 模板,这里命令不懂的可以参考前面 helm 的 1.3.1节的 helm 安装redis,里面有解释这两条命令。

helm repo add ****
helm fetch ****

在这里插入图片描述

helm repo add incubator http://storage.googleapis.com/kubernetes-charts-incubator
# 创建 efk 命名空间,后续 efk 这个三个组件放放在这个名称空间下
kubectl create namespace efk
# 下载模板文件
helm fetch incubator/elasticsearch

7.1.2、修改资源(values.yaml)

解压上面下载的文件

tar -zxvf elasticsearch-1.10.2.tgz
cd elasticsearch

这里因为机器资源的问题,采用最简单方式,部署单节点 elasticSearch ,下面的这些修改都是修改文件 values.yaml

1、修改 elasticsearch 的启动节点为1个,以及客户副本数也为1个
在这里插入图片描述

2、master 节点改为1个,以及关闭pv
在这里插入图片描述
3、data 节点改为1个,以及关闭pv
在这里插入图片描述

7.1.3、安装

# 记得进入解压后的那个目录就是 有values.yaml 为文件的目录,然后用 . 代替即可
cd elasticsearch
helm install --name els1 --namespace=efk -f values.yaml . 

查看是否启动成功,一个master,一个data,以及一个client。
在这里插入图片描述

7.1.4、查看

查看 elasticsearch k8s内部 暴露的端口(没有配置node-port模式,所以浏览器还不能访问),一个9200(页面访问),一个9300(客户端访问如java等)。
在这里插入图片描述
我们启动一个叫做 cirror-随机数 的pod,curl 下elasticSearch 试一下

kubectl run cirror-$RANDOM --rm -it --image=cirros -- /bin/sh
# 这里的换成你对应的ip和端口
curl Elasticsearch:Port/_cat/nodes

在这里插入图片描述

7.2、安装Fluted

7.2.1、下载 elasticsearch 对应的 helm 模板

这里就不用 add ** 的命令了,因为efk 是一套都在一个仓库里面,当然如果不行你再用下 add 命令

helm fetch stable/fluentd-elasticsearch

下载对应的 helm 的模板,并解压进入目录
在这里插入图片描述

7.2.2、修改elasticsearch 地址(values.yaml)

在values文件中修改 elasticSearch 的地址,前面已经通过 svc 查看到了
在这里插入图片描述

7.2.3、安装

cd  fluentd-elasticsearch
helm install --name flu1 --namespace=efk -f values.yaml .

7.2.4、查看

查看 fluentd 是否成功
在这里插入图片描述

注意这里为什么是2个,因为我们一共有3个节点,但是其中一个是master节点,上面是有污点的,不允许调度pod,所以我们后续创建的pod只会在 node1,node2上运行,而 fluentd 是收集容器运行的日志的,所以只要会运行pod的节点,都需要运行这个 fluentd

这个value.yaml 中的 个数我没有改过配置,我估计这个会在 模板文件里面自动判断,自动安装节点,到时候你可以看看。

7.3、安装 kibana

7.3.1、下载 kibana 对应的 helm 模板

这里就不用 add ** 的命令了,因为efk 是一套都在一个仓库里面,当然如果不行你再用下 add 命令

# 注意这里指定了版本,我们在搭建 elk 或者 efk 的时候
# 这个版本是需要规划好的,不是所有的版本都可以配合使用的。
helm fetch stable/kibana --version 0.14.8

下载对应的 helm 的模板,并解压进入目录在这里插入图片描述

7.3.2、修改其 value.yaml 文件中的 elasticSearch 的地址

在这里插入图片描述

7.3.3、安装

cd  kibana
helm install --name kib1 --namespace=efk -f values.yaml . --version 0.14.8

查看是否安装成功
在这里插入图片描述

7.3.4、查看

查看 kibana 的svc
在这里插入图片描述
将 kibana的访问访问从 cluster-ip 改为外部浏览器可以访问的 nodePort 模式,这里为了方便,选择直接修改文件,你也可以安装前面说 nodePort的文章中,重新建立一个nodePort然后修改也行

kubectl edit svc kib1-kibana -n efk

在这里插入图片描述
再次查看,是否修改成功
在这里插入图片描述
浏览器访问
在这里插入图片描述

Logo

开源、云原生的融合云平台

更多推荐