介绍
一个简单但功能强大的 Kubernetes中的 API 流量查看器,可以用来查看pod之间的所有 API 通信,以帮助调试和排除故障。可以理解为TCPDump 和 Chrome Dev Tools 的结合
安装
mac
1 | curl -Lo mizu \ |
linux
1 | curl -Lo mizu \ |
一个简单但功能强大的 Kubernetes中的 API 流量查看器,可以用来查看pod之间的所有 API 通信,以帮助调试和排除故障。可以理解为TCPDump 和 Chrome Dev Tools 的结合
mac
1 | curl -Lo mizu \ |
linux
1 | curl -Lo mizu \ |
集群中的longhorn组件异常重启后发现我们使用longhorn创建的pv无法正常挂载 报错如下
1 | Events: |
describe信息提示我们执行fsck,我们到pv所在的node节点上执行fsck如下
1 | [root@node-02 e2fsprogs-1.45.6]# fsck.ext4 -cvf /dev/longhorn/pvc-9784831a-3130-4377-9d44-7e7129473b90 |
提示e2fsck版本太低需要升级,我们这里先升级一下e2fsck
1 | [root@node-02 replicas]# wget https://distfiles.macports.org/e2fsprogs/e2fsprogs-1.45.6.tar.gz |
我们再使用fsck执行一下修复
1 | [root@node-02 e2fsck]# fsck.ext4 -cvf /dev/longhorn/pvc-9784831a-3130-4377-9d44-7e7129473b90 |
检查完成后我们使用descibe 查看之前报错的pod 发现如下
1 | Normal Scheduled 12m default-scheduler Successfully assigned devops/nexus3-5c9c5545d9-nmfjg to node-02 |
我们有时候会遇到开发提交的千奇百怪的commit信息,这样给代码更新追踪溯源增加了麻烦,并且我们使用的gitlab ci 会使用commit信息判断构建步骤,所以有必要为GitLab 增加自定义 Commit 提交格式检测
Git 支持在不同操作上执行的钩子。这些钩子在服务器上运行,可用于根据存储库的状态强制执行特定的提交策略或执行其他任务。
Git 支持以下钩子:
pre-receive
post-receive
update
服务器端 Git 钩子可以配置为:
这里需要注意服务器端的git钩子必须在 GitLab 服务器的文件系统上配置.
如果您没有使用 hashed storage,,则项目的存储库目录则应该是下面:
上一篇文章我们介绍了如何使用控制台和kubectl minio插件来部署minio租户,这里我们介绍一下使用配置文件去部署minio租户以及如何监控minio
在这里我们先看一下使用控制台和kubectl minio插件来部署minio租户存在哪些问题:
使用配置文件去创建我们就可以避免这些问题,我们可以快速的用同一个配置文件在多个namespace或者多个集群中创建同样的minio租户。当然 kubectl minio 插件和控制台实际上也是会
下面是一个配置文件的内容,我们首先创建了一个secret 保存了租户的凭据,然后再租户文件中使用这个secret。
注意:每个租户都可以单独开启控制台(默认开启)并对外暴露,我们使用operator console 中访问租户的console 无需再登陆,但是我们如果单独使用nodeport或者ingress 暴露租户的console 就需要使用这里的secret中配置的accesskey和secretkey 登陆。
1 | ## Secret to be used as MinIO Root Credentials |
我们就使用这个文件创建一个minio租户
1 | [root@master-01 demo]# kubectl apply -f demo.yaml -n test |
MinIO 是一种高性能对象存储解决方案,原生支持 Kubernetes 部署。MinIO 提供与 Amazon Web Services S3 兼容的 API,并支持所有核心 S3 功能。MinIO 是在GNU Affero 通用公共许可证 v3.0下发布的。
MinIO 的不同之处在于,它从一开始就被设计为私有/混合云对象存储。因MinIO 是专门为服务于对象而构建的,所以单层架构可以实现所有必要的功能。它是一个同时具有高性能、可扩展性和轻量级的云原生对象服务器。
MinIO 使用以汇编代码编写的每个对象内联擦除编码来保护数据,以提供尽可能高的性能。MinIO 使用 Reed-Solomon 代码将对象条带化为具有用户可配置冗余级别的数据和奇偶校验块。MinIO 的 Erasure Coding 在对象级别执行修复,可以独立修复多个对象。
在 N/2 的最大奇偶校验下,MinIO 的实现可以确保在部署中仅使用 ((N/2)+1) 个操作驱动器进行不间断的读写操作。例如,在 12 个驱动器的设置中,MinIO 将对象分片到 6 个数据和 6 个奇偶校验驱动器,并且可以可靠地写入新对象或重建现有对象,而部署中仅剩下 7 个驱动器。详细介绍可以参考 https://docs.min.io/minio/baremetal/concepts/erasure-coding.html
工作中在调试集群中未包含bash
sh
等工具的pod往往比较麻烦,k8s提供了一个临时容器供我们添加到要调试的pod中进行工作。
临时容器与其他容器的不同之处在于,它们缺少对资源或执行的保证,并且永远不会自动重启, 因此不适用于构建应用程序。 临时容器使用与常规容器相同的 ContainerSpec
节来描述,但许多字段是不兼容和不允许的。
ports
,livenessProbe
,readinessProbe
这样的字段是不允许的。resources
配置是不允许的。临时容器是使用 API 中的一种特殊的 ephemeralcontainers
处理器进行创建的, 而不是直接添加到 pod.spec
段,因此无法使用 kubectl edit
来添加一个临时容器。
与常规容器一样,将临时容器添加到 Pod 后,将不能更改或删除临时容器。
使用临时容器需要开启 EphemeralContainers
特性门控, kubectl
版本为 v1.18 或者更高。
我们能将 NFS (网络文件系统) 挂载到Pod 中,不像 emptyDir
那样会在删除 Pod 的同时也会被删除,nfs
卷的内容在删除 Pod 时会被保存,卷只是被卸载。 这意味着 nfs
卷可以被预先填充数据,并且这些数据可以在 Pod 之间共享,NFS 卷可以由多个pod同时挂载
注意: 在使用 NFS 卷之前,你必须运行自己的 NFS 服务器并将目标 share 导出备用。
虽然官方不是很推荐使用nfs存储作为pv,但是实际中我们有时候因为种种原因需要使用nfs类型的volume来存储数据。
下面介绍kubernetes中使用nfs作为存储卷的几种方式
deployment/statefulset
中直接使用我们事先在172.26.204.144
机器上配置好了nfs server端,并共享了如下目录。
1 | [root@node-02 ~]# showmount -e 172.26.204.144 |
deployment/statefulset
中直接使用如下示例我们为nginx使用nfs作为存储卷持久化/usr/share/nginx/html
目录
1 | apiVersion: apps/v1 |
很多时候我们在k8s上安装服务会遇到各种各样的权限问题,有时候为某个用户或者serviceaccount对象生成一个合适的role会比较头疼,这里推荐一个工具audit2rbac,它可以根据k8s的审计日志,为指定用户或者serviceaccount对象生成它们所需要的role.
audit2rbac下载地址: https://github.com/liggitt/audit2rbac/releases
1、集群已经开启审计日志,且日志格式为json格式,开启审计日志可以参考https://kubernetes.io/docs/tasks/debug-application-cluster/audit/#advanced-audit
2、建议日志级别设置为Metadata
,还可以减少日志大小
我们这里已经开启了审计日志,这里截取一小段日志内容如下:
1 | {"kind":"Event","apiVersion":"audit.k8s.io/v1","level":"Metadata","auditID":"571b8d06-aa30-4aec-87cb-7bef2ef88d18","stage":"ResponseComplete","requestURI":"/apis/coordination.k8s.io/v1/namespaces/longhorn-system/leases/external-resizer-driver-longhorn-io","verb":"update","user":{"username":"system:serviceaccount:longhorn-system:longhorn-service-account","uid":"cdb0a05f-170d-4f02-aeec-88af904e68f7","groups":["system:serviceaccounts","system:serviceaccounts:longhorn-system","system:authenticated"]},"sourceIPs":["172.20.166.16"],"userAgent":"csi-resizer/v0.0.0 (linux/amd64) kubernetes/$Format","objectRef":{"resource":"leases","namespace":"longhorn-system","name":"external-resizer-driver-longhorn-io","uid":"81766194-e2e3-4edd-83d7-788a07562b91","apiGroup":"coordination.k8s.io","apiVersion":"v1","resourceVersion":"18772044"},"responseStatus":{"metadata":{},"code":200},"requestReceivedTimestamp":"2021-01-06T03:02:52.709670Z","stageTimestamp":"2021-01-06T03:02:52.710917Z","annotations":{"authorization.k8s.io/decision":"allow","authorization.k8s.io/reason":"RBAC: allowed by ClusterRoleBinding \"longhorn-bind\" of ClusterRole \"longhorn-role\" to ServiceAccount \"longhorn-service-account/longhorn-system\""}} |
Permission manager是一个简单便捷的RBAC管理界面工具,支持通过web界面创建用户,分配Namespace权限,并可以生成kubeconfig文件
项目地址https://github.com/sighupio/permission-manager.git
1 | [root@master-01 k8s]# git clone https://github.com/sighupio/permission-manager.git |
1 | kubectl create namespace permission-manager |
1 |
|
参数解释:
RBAC Manager
是Fairwinds
公司开源的一个项目,旨在简化 Kubernetes
中的授权,它使用新的自定义资源来支持 RBAC 声明式配置的c rd。我们可以指定所需的状态,而不是直接管理role bindings
或 service accounts
,RBAC Manager
将进行必要的更改以实现该状态。
这个项目有三个主要目标:
安装我们可以使用helm安装或者使用直接使用yaml文件安装
1 | helm repo add fairwinds-stable https://charts.fairwinds.com/stable |
1 | [root@master-01 deploy]# git clone https://github.com/FairwindsOps/rbac-manager.git |