开局一张图,谷歌大神Kelsey Hightower说:一个好汉三个帮!Kubernetss是一个好平台,完善需要周边工具链来帮忙。TKG通过Tanzu Packages集成发布经过验证的组件工具,实现TKG平台生产就绪!
文接上篇,上篇文章《Tanzu学习系列之TKGm 1.4 for vSphere 组件集成(一)》(以下简称《组件集成(一》)。通过安装配置Tanzu Packages 管理中的User-Managed Packages清单cert-manager、contour、external-dns、prometheus、grafana组件实现Kubernetss证书管理,Ingress 控制器南北向七层流量,DNS自动化更新,TKG系统监控等。
在生产环境中,日志对于排查问题至关重要,我们需要有一个日志管理系统,如EFK就是目前最受欢迎的日志管理系统。
本篇主要完成TKG日志平台组件的安装配置。
开始之前说一下Cavel的一个小工具的基础用法,《组件集成(一)》中介绍了Tanzu package 和Carvel工具集:ytt,kapp,kbld,imgpkg,kapp-controller,vendir,本篇简单介绍一下imgpkg
imgpkg:通过 镜像仓库来打包和迁移应用程序的容器镜像及其配置文件
imgpkg可以用来获取Tanzu User-Managed Packages包默认配置的模板
image_url=$(kubectl -n tanzu-package-repo-global get packages fluent-bit.tanzu.vmware.com.1.7.5+vmware.1-tkg.1 -o jsonpath='{.spec.template.spec.fetch[0].imgpkgBundle.image}')imgpkg pull -b $image_url -o /tmp/fluent-bit
Pulling bundle 'projects.registry.vmware.com/tkg/packages/standard/fluent-bit@sha256:c83d038c57f244aae2819dd77dc5184bb3e1ec96524d3f6a09fe8a244b7bc9e4'Extracting layer 'sha256:48456e4452a35786ed148a3f1a9ede1427f8fccb0079a0eb0904820211b6cebd' (1/1)Locating image lock file images...
One or more images not found in bundle repo; skipping lock file update[workload02-admin@workload02|default] [root@bootstrap config]# pwd
/tmp/fluent-bit/config
[workload02-admin@workload02|default] [root@bootstrap config]# ls
fluent-bit.yaml values.yaml _ytt_lib
测试内容:
测试拓扑:
备注:为了测试方便,便于理解,管理网、业务网、节点网络都使用同一个网络mgmt (生产部署需要分开);新部署了一个VMware vRealize Log Insight日志平台。
1. 安装配置EFK
EFK是 Elasticsearch,Fluentbit,Kibana的缩写,是k8s集群常用的日志解决方案,EFK不是一个软件,而是一套解决方案,开源软件之间的互相配合使用,高效的满足了很多场合的应用,是目前主流的一种日志系统。EFK是三个开源软件的缩写,分别表示:Elasticsearch , Fluentbit, Kibana , 其中ELasticsearch负责日志保存和搜索,Fluentbit负责收集日志。
如果是正式生产系统,建议增加kafka做日志缓存和Logstash做日志过滤、格式化,参考部署模式如下
备注:当前Tanzu User-Managed Packages,只包含Fluentbit;Elasticsearch和Kibana安装配置模式详细可以参考官方文档。
1.helm 方式安装Elasticsearch,通过修改value.yaml配置文件可以调整pod副本数量,存储容量、暴露端口等
[workload02-admin@workload02|default] [root@bootstrap elasticsearch]# kubectl create ns efk
namespace/efk created
[workload02-admin@workload02|default] [root@bootstrap elasticsearch]# k get ns
NAME STATUS AGE
avi-system Active 3h50m
default Active 3h55m
efk Active 4s
kube-node-lease Active 3h55m
kube-public Active 3h55m
kube-system Active 3h55m
tanzu-package-repo-global Active 3h54m
tkg-system Active 3h55m
tkg-system-public Active 3h55m
[workload02-admin@workload02|default] [root@bootstrap efk]# helm install elasticsearch --namespace efk ./elasticsearch
W1216 20:04:03.901964 1071106 warnings.go:70] policy/v1beta1 PodDisruptionBudget is deprecated in v1.21+, unavailable in v1.25+; use policy/v1 PodDisruptionBudget
W1216 20:04:03.990282 1071106 warnings.go:70] policy/v1beta1 PodDisruptionBudget is deprecated in v1.21+, unavailable in v1.25+; use policy/v1 PodDisruptionBudget
NAME: elasticsearch
LAST DEPLOYED: Thu Dec 16 20:04:03 2021
NAMESPACE: efk
STATUS: deployed
REVISION: 1
NOTES:
1. Watch all cluster members come up.$ kubectl get pods --namespace=efk -l app=elasticsearch-master -w
2. Test cluster health using Helm test.$ helm test elasticsearch
2.查看Elasticsearch pod运行状态
[workload02-admin@workload02|default] [root@bootstrap efk]# kubectl get pods,svc --namespace=efk
NAME READY STATUS RESTARTS AGE
pod/elasticsearch-master-0 1/1 Running 0 87sNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/elasticsearch-master ClusterIP 100.64.238.64 <none> 9200/TCP,9300/TCP 88s
service/elasticsearch-master-headless ClusterIP None <none> 9200/TCP,9300/TCP 88s
3.helm方式安装Kibana,通过修改value.yaml配置文件对接(同一个集群,可以采用服务名字方式对接)
[workload02-admin@workload02|default] [root@bootstrap efk]# helm install kibana --namespace efk ./kibana
NAME: kibana
LAST DEPLOYED: Thu Dec 16 20:11:55 2021
NAMESPACE: efk
STATUS: deployed
REVISION: 1
TEST SUITE: None
4.确定pod和服务运行正常采用LoadBalancer 暴露服务(本次测试采用)也可采用ingress方式暴露
访问IP http://192.168.110.56:5601
[workload02-admin@workload02|efk] [root@bootstrap kibana]# k get pod,svc -n efk
NAME READY STATUS RESTARTS AGE
pod/elasticsearch-master-0 1/1 Running 0 3m12s
pod/kibana-kibana-5d9d6b5bd4-hbh9t 1/1 Running 0 24mNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/elasticsearch-master ClusterIP 100.67.50.87 <none> 9200/TCP,9300/TCP 3m12s
service/elasticsearch-master-headless ClusterIP None <none> 9200/TCP,9300/TCP 3m13s
service/kibana-kibana LoadBalancer 100.66.40.219 192.168.110.56 5601:30760/TCP 24m
5.查看User-Managed Packages中Fluentbit版本信息
[workload02-admin@workload02|default] [root@bootstrap ~]# tanzu package available list fluent-bit.tanzu.vmware.com
\ Retrieving package versions for fluent-bit.tanzu.vmware.com...NAME VERSION RELEASED-ATfluent-bit.tanzu.vmware.com 1.7.5+vmware.1-tkg.1 2021-05-13T18:00:00Z
6.使用imgpkg的工具导出value.yaml 配置文件
image_url=$(kubectl -n tanzu-package-repo-global get packages fluent-bit.tanzu.vmware.com.1.7.5+vmware.1-tkg.1 -o jsonpath='{.spec.template.spec.fetch[0].imgpkgBundle.image}')
imgpkg pull -b $image_url -o /tmp/fluent-bit
Pulling bundle 'projects.registry.vmware.com/tkg/packages/standard/fluent-bit@sha256:c83d038c57f244aae2819dd77dc5184bb3e1ec96524d3f6a09fe8a244b7bc9e4'Extracting layer 'sha256:48456e4452a35786ed148a3f1a9ede1427f8fccb0079a0eb0904820211b6cebd' (1/1)Locating image lock file images...
One or more images not found in bundle repo; skipping lock file updateSucceeded
cp /tmp/fluent-bit/config/values.yaml ./fluent-bit-data-values.yaml
7.修改value.yaml ,进行日志转发到ES设置(Cluster地址100.67.50.87,端口9200)注意删除最上面两行 '#@'开头的,否则会报错
fluent_bit:config:#! https://docs.fluentbit.io/manual/administration/configuring-fluent-bit/variablesservice: |[Service]Flush 5 Log_Level infoDaemon offParsers_File parsers.confHTTP_Server OnHTTP_Listen 0.0.0.0HTTP_Port 2020outputs: |[OUTPUT]Name esMatch *Host 100.67.50.87 Port 9200
8.安装fluent-bit,并确定pod正常运行
[workload02-admin@workload02|efk] [root@bootstrap ~]# tanzu package install fluent-bit --package-name fluent-bit.tanzu.vmware.com --version 1.7.5+vmware.1-tkg.1 --values-file fluent-bit-data-values.yaml --namespace efk
- Installing package 'fluent-bit.tanzu.vmware.com'
| Getting namespace 'efk'
| Getting package metadata for 'fluent-bit.tanzu.vmware.com'
| Creating service account 'fluent-bit-efk-sa'
| Creating cluster admin role 'fluent-bit-efk-cluster-role'
| Creating cluster role binding 'fluent-bit-efk-cluster-rolebinding'
| Creating secret 'fluent-bit-efk-values'
- Creating package resource
/ Package install status: ReconcilingPlease consider using 'tanzu package installed update' to update the installed package with correct settings[workload02-admin@workload02|efk] [root@bootstrap ~]# k get pod,svc -n tanzu-system-logging
NAME READY STATUS RESTARTS AGE
pod/fluent-bit-f6md2 1/1 Running 0 4m14s
pod/fluent-bit-g4rck 1/1 Running 0 4m14s
pod/fluent-bit-htfqt 1/1 Running 0 4m14s
pod/fluent-bit-vzgz4 1/1 Running 0 4m14s
备注:如果后续修改参数参考以下更新参数方法
[workload02-admin@workload02|efk] [root@bootstrap ~]# tanzu package installed update fluent-bit --package-name fluent-bit.tanzu.vmware.com --version 1.7.5+vmware.1-tkg.1 --values-file fluent-bit-data-values.yaml
| Updating package 'fluent-bit'
- Getting package install for 'fluent-bit'
| Updating secret 'fluent-bit-default-values'
| Updating package install for 'fluent-bit'Updated package install 'fluent-bit' in namespace 'default'
9.使用第4 步骤服务暴露IP,登陆查看
10.创建简单Index pattern
11.查看转发到ELasticsearch日志
2. 配置日志转发到vRealize Log Insight
对于Tanzu TKG解决方案,包含底层采用的vSphere虚拟化,存储(可以使用VSAN),网络(可以使用NSX),负载均衡和服务发布采用的AVI,以及应用其他组件,而且原有生产环境可能大量存在物理、虚拟和云环境扩展基础架构和应用部署,日志对于排查问题至关重要,统一的日志解决方案很有必要。
VMware vRealize Log Insight 就是这样一个解决方案,vRealize Log lnsight提供高度可扩展的异构日志管理功能,具备直观且切实可行的仪表盘、完善的分析功能和广泛的第三方可延展性,内置的软硬件支持列表,提供开箱即用的日志分析能力可以提供深入的运维洞察信息并 加快故障排除速度。
TKG 可以采用部署VMware Fluentd vRealize Log Insight插件(支持多种发行版K8s)方式与vRealize Log Insight进行对接。
1.登陆到vRealize Log Insight ,日志源容器菜单下,查看VMware Fluentd vRealize Log Insight插件部署步骤
2.按照部署步骤进行部署VMware Fluentd vRealize Log Insight,查看部署后的pod状态
[workload02-admin@workload02|efk] [root@bootstrap kibana]# k get pod -n kube-system|grep log-collector
log-collector-62j2m 1/1 Running 0 167m
log-collector-cbrt9 1/1 Running 0 167m
log-collector-htzhk 1/1 Running 0 167m
3.登陆vRealize Log Insight 交互式分析,可以查看日志转发到vRealize Log Insight。
4.通过原生的日志包,可以对接vsphere VC,和AVI 负载均衡器,对整个基础架构做全面的日志搜集
5.内容包商城,可以支持多种设备、主机、OS、中间件等日志采集器支持
结束本篇之前,给大家介绍一个小工具彩蛋:Octant
Octant是VMWare 开源的一款 Kubernetes Dashboard 的可视化工具,这是一款帮助开发人员了解应用程序在 Kubernetes 集群中如何运行的工具。它通过可视化的方式,呈现 Kubernetes 对象的依赖关系,可将本地端口请求转发到正在运行的 pod,查看 pod 日志,浏览不同的集群。此外,用户还可以通过安装或编写插件来扩展 Octant 的功能。可以作为 kubectl 的一个可视化补充。与Kubernetes自带的Dashboard相比,最大的亮点是可以自己编写插件来扩展 Octant 功能,给 Octant 提供了更多的可能。
github地址
https://github.com/vmware-tanzu/octant
Octant 最大的亮点和想象空间就是插件功能,下面测试下针对CNI antrea的plugin功能。
Octant 有多种部署方式,参考官方链接。本次测试采用的是直接部署在Kubernetes内部。
1.创建octant 使用的secret文件,文件记录admin kubeconfig信息
[workload02-admin@workload02|default] [root@bootstrap ~]# tanzu cluster kubeconfig get workload02 --admin --export-file workload02admin
Credentials of cluster 'workload02' have been saved
You can now access the cluster by running 'kubectl config use-context workload02-admin@workload02' under path 'workload02admin'[workload02-admin@workload02|default] [root@bootstrap ~]# kubectl create secret generic octant-kubeconfig --from-file=admin.conf=workload02admin -n kube-system
secret/octant-kubeconfig created
2. 直接应用yaml文件进行安装,注意修改service type 默认的NodePort模式为LoadBalancer ,部署完成查看服务暴露IP为http://192.168.110.47
yaml文件地址
https://github.com/antrea-io/antrea/blob/main/build/yamls/antrea-octant.yml
注意TKGm 1.4 当前支持的antrea 是v0.13.0,修改antrea-octant.yml镜像地址为
projects.registry.vmware.com/antrea/octant-antrea-ubuntu:v0.13.0
[workload02-admin@workload02|default] [root@bootstrap ~]# kubectl apply -f octant.yaml
service/antrea-octant created
deployment.apps/antrea-octant created
[workload02-admin@workload02|default] [root@bootstrap ~]# k get pod,svc -n kube-system |grep antrea-octant
pod/antrea-octant-77df764cb7-r7phc 1/1 Running 0 3m46s
service/antrea-octant LoadBalancer 100.67.203.232 192.168.110.46 80:31467/TCP 3m47
3.登陆http://192.168.110.46,设置成暗夜模式,可以查看正在运行的 pod,查看 pod 日志,浏览不同的ns等
4. 插件是Octant的一大特色,可以使用antrea 插件,Traceflow 网络流量跟踪
未完待续
要想了解云原生、机器学习和区块链等技术原理,请立即长按以下二维码,关注本公众号亨利笔记 ( henglibiji ),以免错过更新。