杭州倍世康 做网站,泸州市网站建设,北京公司名称及地址大全,做外贸仿牌网站第三章 Kubernetes监控与日志
1、查看集群资源状态
在 Kubernetes 集群中#xff0c;查看集群资源状态和组件状态是非常重要的操作。以下是一些常用的命令和解释#xff0c;帮助你更好地管理和监控 Kubernetes 集群。
1.1 查看master组件状态
Kubernetes 的 Master 组件包…第三章 Kubernetes监控与日志
1、查看集群资源状态
在 Kubernetes 集群中查看集群资源状态和组件状态是非常重要的操作。以下是一些常用的命令和解释帮助你更好地管理和监控 Kubernetes 集群。
1.1 查看master组件状态
Kubernetes 的 Master 组件包括 API Server、Controller Manager 和 Scheduler。可以使用 kubectl get cs cscomponentstatuses命令来查看这些组件的状态。
命令kubectl get cs
[rootk8s-master-1-71 ~]# kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19
NAME STATUS MESSAGE ERROR
etcd-0 Healthy {health:true,reason:}
controller-manager Healthy ok
scheduler Healthy ok ComponentStatus 在 Kubernetes 1.19 及以上版本中已被弃用建议使用其他方式监控 Master 组件的状态没有显示 API Server 的状态因为查看 Master 组件状态的请求本身就是通过 API Server 进行的 1.2 查看所有的node状态
使用 kubectl get node 命令可以查看集群中所有节点的状态。
命令kubectl get node
[rootk8s-master-1-71 ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-master-1-71 Ready control-plane 72m v1.26.0
k8s-node1-1-72 Ready none 58m v1.26.0
k8s-node2-1-73 Ready none 58m v1.26.0 该命令获取的是 kubelet 的信息显示节点的状态、角色、年龄和版本 1.3 查看资源的详细信息
使用 kubectl describe 命令可以查看特定资源的详细信息包括 Events 相关事件。
命令kubectl describe 资源类型 资源名称
kubectl describe node k8s-master-1-71该命令会输出节点的详细信息包括 CPU、内存、存储等资源的使用情况以及最近的事件Events 1.4 查看资源信息
使用 kubectl get 命令可以查看资源的简要信息通过添加 -o wide 或 -o yaml 参数可以输出更详细的信息或导出 YAML 文件。
命令kubectl get 资源类型 资源名称 //-o wide、-o yaml -o wide 输出详细信息 -o yaml 导出YAML文件 kubectl get pod my-pod
NAME READY STATUS RESTARTS AGE
my-pod 1/1 Running 0 5mkubectl get pod my-pod -o wide ## 详细信息
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
my-pod 1/1 Running 0 5m 10.244.1.2 k8s-node1-1-72 none nonekubectl get pod my-pod -o yaml ## 导出 YAML 文件
apiVersion: v1
kind: Pod
metadata:name: my-podnamespace: default...
spec:containers:- name: my-containerimage: my-image:latest...
status:phase: Running...1.5 查看集群组件命令的缩写
通过使用 kubectl api-resources 命令可以查看 Kubernetes 中所有资源的缩写和详细信息。
kubectl api-resources
NAME SHORTNAMES APIVERSION NAMESPACED KIND
bindings v1 true Binding
componentstatuses cs v1 false ComponentStatus
configmaps cm v1 true ConfigMap
endpoints ep v1 true Endpoints
events ev v1 true Event
limitranges limits v1 true LimitRange
namespaces ns v1 false Namespace
nodes no v1 false Node
persistentvolumeclaims pvc v1 true PersistentVolumeClaim
persistentvolumes pv v1 false PersistentVolume
pods po v1 true Pod
...该命令列出所有 Kubernetes 资源的名称、缩写、API 版本、是否命名空间化以及资源类型 2、监控集群资源利用率
在 Kubernetes 集群中监控集群资源利用率是非常重要的可以帮助你了解集群中各个节点和 Pod 的资源消耗情况。kubectl top 命令是一个非常有用的工具但默认情况下Kubernetes 集群并不会自动安装 Metrics Server因此需要手动部署。 2.1 查看 Node 和 Pod 资源消耗
① 查看Node资源消耗
命令kubectl top node node name
② 查看Pod资源消耗
命令kubectl top pod pod name 注意执行时会提示错误 ” error: Metrics API not available “因该命令需要由metric-server服务提供数据而这个服务默认没 有安装还需要手动部署下。 2.2 metric-server
Metrics Server 是一个集群范围的资源使用情况的数据聚合器作为一 个应用部署在集群中。Metric Server从每个节点上Kubelet API收集指 标通过Kubernetes聚合器注册在Master APIServer中为集群提供Node、Pods资源利用率指标。 项目地址https://github.com/kubernetes-sigs/metrics-server 1Metrics Server工作流程
kubectl top - apiserver - metric-serverpod - kubelet(cadvisor) 备注实质上采集数据的是由kubelet上的内嵌的(cadvisor)进行收集而容器化部署的metric-server主要负责数据聚合metric-server携带CA证书通过内网访问kubelet的cadvisor采集需要声明取消证书验证 2Metrics Server部署
增加 kubelet-insecure-tls 参数作用是告诉metrics-server不验证kubelet提供的https证书
下载 Metrics Server 的 YAML 文件
[rootk8s-master-1-71 ~]# wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.7/components.yaml编辑 YAML 文件添加 kubelet-insecure-tls 参数
[rootk8s-master-1-71 ~]# vi components.yaml
...containers:- args:- --cert-dir/tmp- --secure-port4443- --kubelet-preferred-address-typesInternalIP,ExternalIP,Hostname- --kubelet-use-node-status-port- --metric-resolution15s- --kubelet-insecure-tls //不验证kubelet提供的https证书image: lizhenliang/metrics-server:v0.6.1 //转存国内镜像地址
...应用 YAML 文件
[rootk8s-master-1-71 ~]# kubectl apply -f metrics-server.yaml检查是否部署成功
[rootk8s-master-1-71 ~]# kubectl get apiservices |grep metrics
v1beta1.metrics.k8s.io kube-system/metrics-server True 4m13s[rootk8s-master-1-71 ~]# kubectl get --raw /apis/metrics.k8s.io/v1beta1/nodes
{kind: NodeMetricsList,apiVersion: metrics.k8s.io/v1beta1,metadata: {},items: [{metadata: {name: k8s-master,creationTimestamp: 2023-04-03T06:30:53Z,labels: {beta.kubernetes.io/arch: amd64,beta.kubernetes.io/os: linux,kubernetes.io/arch: amd64,kubernetes.io/hostname: k8s-master,kubernetes.io/os: linux,node-role.kubernetes.io/control-plane: ,node.kubernetes.io/exclude-from-external-load-balancers: }},timestamp: 2023-04-03T06:30:45Z,window: 11.07s,usage: {cpu: 230752793n,memory: 1218328Ki}},{metadata: {name: k8s-node1,creationTimestamp: 2023-04-03T06:30:53Z,labels: {beta.kubernetes.io/arch: amd64,beta.kubernetes.io/os: linux,kubernetes.io/arch: amd64,kubernetes.io/hostname: k8s-node1,kubernetes.io/os: linux}},timestamp: 2023-04-03T06:30:45Z,window: 11.059s,usage: {cpu: 131423522n,memory: 960948Ki}},{metadata: {name: k8s-node2,creationTimestamp: 2023-04-03T06:30:53Z,labels: {beta.kubernetes.io/arch: amd64,beta.kubernetes.io/os: linux,kubernetes.io/arch: amd64,kubernetes.io/hostname: k8s-node2,kubernetes.io/os: linux}},timestamp: 2023-04-03T06:30:46Z,window: 21.871s,usage: {cpu: 150204652n,memory: 975844Ki}}]
}
如果状态True并能返回数据说明Metrics Server服务工作正常。 3、管理K8s组件日志
在 Kubernetes 集群中管理和查看组件日志是非常重要的这有助于诊断和解决集群中的问题。以下是一些常见的日志管理方法和命令。
3.1 K8S 系统的组件日志
Kubernetes 系统的组件日志包括 Master 节点上的组件如 API Server、Controller Manager、Scheduler和 Worker 节点上的组件如 kubelet、kube-proxy。
1systemd 守护进程管理的组件 查看相关日志
对于由 systemd 守护进程管理的组件如 kubelet可以使用 journalctl 命令查看相关日志
journalctl -u kubelet
journalctl -u kubelet -f //-f实时查看
# kublete 如果有问题可以重启kubelete服务
systemctl restart kubelet
2Pod部署的组件 查看相关日志
对于以 Pod 形式部署的组件如 kube-proxy、etcd 等可以使用 kubectl logs 命令查看相关日志
kubectl logs kube-proxy-btz4p -n kube-systemkube-proxy-btz4p 是 kube-proxy 的 Pod 名称。 -n kube-system 指定命名空间为 kube-system。 3系统日志 查看相关日志
系统日志通常存储在 /var/log/messages 文件中
/var/log/messages 3.2 K8S Cluster 里面部署的应用程序日志
Kubernetes 集群中部署的应用程序日志可以分为两种类型标准输出stdout和日志文件。
1标准输出stdout日志
应用程序的标准输出日志可以通过 kubectl logs 命令查看
查看 Pod 的标准输出日志kubectl logs pod-name
kubectl logs my-app-pod
2日志文件
如果应用程序将日志写入文件可以通过挂载 Volume 的方式将日志文件存储到宿主机或共享存储中然后通过 kubectl exec 命令进入容器查看日志文件。
挂载 Volume 示例
apiVersion: v1
kind: Pod
metadata:name: my-app-pod
spec:containers:- name: my-appimage: my-app-imagevolumeMounts:- name: log-volumemountPath: /var/log/my-appvolumes:- name: log-volumehostPath:path: /var/log/my-apptype: DirectoryOrCreate查看日志文件
kubectl exec -it my-app-pod -- cat /var/log/my-app/app.log 4、管理K8s应用日志
在 Kubernetes 集群中管理和查看应用程序日志是非常重要的这有助于监控应用程序的运行状态和排查问题。以下是一些常见的日志管理方法和命令。
1查看容器标准输出日志
命令kubectl logs Pod名称命令kubectl logs -f Pod名称 //实时查看容器标准输出日志
kubectl logs my-pod
kubectl logs -f my-pod 2标准输出在宿主机的路径
标准输出日志在宿主机上的路径通常是 /var/lib/docker/containers/container-id/container-id-json.log。你可以通过 kubectl describe 命令查看容器的 ID。
命令kubectl describe pod Pod名称cat /var/lib/docker/containers/container-id/container-id-json.log
kubectl describe pod my-pod //在输出中找到 Container ID
Containers:my-container:Container ID: docker://abcdef123456...## 查看标准输出日志文件
cat /var/lib/docker/containers/abcdef123456/abcdef123456-json.log
3查看日志文件进入到终端日志目录查看
如果你的应用程序将日志写入到文件中可通过 kubectl exec 命令进入容器的终端然后查看日志文件。
命令kubectl exec -it Pod名称 -- bashcat /var/log/myapp.log
kubectl exec -it my-pod -- bash
cat /var/log/myapp.log 4使用日志收集工具
在生产环境中通常会使用日志收集工具如 Fluentd、Fluent Bit、ELK Stack 等来集中管理和分析日志。这些工具可以将日志从各个节点和容器中收集起来并存储到中央日志存储系统中方便查询和分析。
Fluentd: 一个开源的数据收集器可以收集、处理和转发日志数据。Fluent Bit: Fluentd 的轻量级版本适用于资源受限的环境。ELK Stack: 由 Elasticsearch、Logstash 和 Kibana 组成的日志分析平台。 5、收集K8s日志思路
收集 Kubernetes 日志的思路包括确定日志源、选择合适的日志收集工具、配置日志收集、选择日志存储和分析平台、配置日志监控和报警机制以及制定日志保留和清理策略。通过这些步骤可以有效地收集、存储、分析和监控 Kubernetes 集群中的日志确保系统的稳定性和可维护性。
需要明确收集的日志类型和来源Kubernetes 中的日志主要分为以下几类
容器日志每个容器的标准输出stdout和标准错误stderr日志。Pod 日志Pod 级别的日志通常是容器日志的集合。节点日志Kubernetes 节点Node上的系统日志包括 kubelet、kube-proxy 等组件的日志。API 服务器日志Kubernetes API 服务器的日志记录 API 请求和响应。控制器管理器日志Kubernetes 控制器管理器的日志记录控制器的行为。调度器日志Kubernetes 调度器的日志记录 Pod 的调度决策。应用程序日志应用程序自定义的日志通常通过文件或网络输出。 扩展实践
1、查看pod日志并将日志中Error的行记录到指定文件
pod名称web文件/opt/web
2、查看指定标签使用cpu最高的pod并记录到到指定文件
标签appweb文件/opt/cpu 小结
本篇为 【Kubernetes CKA认证 Day2】的学习笔记希望这篇笔记可以让您初步了解到 K8s内部监控与日志课后还有扩展实践不妨跟着我的笔记步伐亲自实践一下吧 Tip毕竟两个人的智慧大于一个人的智慧如果你不理解本章节的内容或需要相关笔记、视频可私信小安请不要害羞和回避可以向他人请教花点时间直到你真正的理解。