- 通用 Kubernetes 命令
- GitLab 相关的 Kubernetes 信息
- KubeSOS 报告的快速统计
- 在 macOS 上通过 minikube 最小化配置安装极狐GitLab
- 给
toolbox
pod里的 Rails 代码打补丁
Kubernetes cheat sheet
这里是极狐GitLab 支持团队在排障时用到的关于 Kubernetes 的信息列表。极狐GitLab 公开了这部分内容,让任何人都可以使用支持团队收集的内容。
如果你是一个付费用户并且不确定怎么使用这些命令,最好是联系支持,然后他们会帮助你处理你遇到的问题。
通用 Kubernetes 命令
-
怎么授权给你的 GCP 项目(当你在不同的GCP账号下都有项目时尤其有用)
gcloud auth login
-
怎么访问 Kubernetes 面板
# for minikube minikube dashboard -url # 对于非本地安装,如果配置了通过kubectl访问 kubectl proxy
- 怎么 SSH 到一个Kubernetes 节点并以 root 身份进入容器 https://github.com/kubernetes/kubernetes/issues/30656:
- 对于 GCP,你可以找到节点名称并运行
gcloud compute ssh node-name
. - 使用
docker ps
列出容器 - 使用
docker exec --user root -ti container-id bash
进入容器
- 对于 GCP,你可以找到节点名称并运行
-
怎么从本地机器复制文件到 pod
kubectl cp file-name pod-name:./destination
- 怎么处理
CrashLoopBackoff
状态的 pods:- 通过 Kubernetes 面板检查日志
-
通过 Kubectl 检查日志
kubectl logs <webservice pod> -c dependencies
-
怎么实时跟踪所有 Kubenetes 集群事件:
kubectl get events -w --all-namespace
-
怎么获取前一个结束的 pod 实例日志
kubectl logs <pod-name> --previous
容器/pod 自身不会保留任何日志,所有内容都被写入
stdout
,这是 Kubernetes 的原则,更多细节查看Twelve-factor app。 -
怎么获取集群里配置的定时作业
kubectl get cronjobs
但配置了基于定时的备份,你可以看到新调度的作业。关于新调度的更多细节可以在使用 CronJob 运行自动化任务里找到.
GitLab 相关的 Kubernetes 信息
-
追踪单独 pod 的日志,
webservice
pod 示例:kubectl logs gitlab-webservice-54fbf6698b-hpckq -c webservice
-
查看和跟踪所有共享同一个标记的pod(这个例子里是
webservice
)# webservice pod 里的所有容器 kubectl logs -f -l app=webserivce --all-containers=true --max-log-requests=50 # 所有 webservice pod 里的 webservice 容器 kubectl logs -f -l app=webservice -c webservice --max-log-requests=50
-
同时从所有容器中流式传输日志,类似于 Linux 包安装中的命令
gitlab-ctl tail
:kubectl logs -f -l release=gitlab --all-containers=true --max-log-requests=100
-
检查
gitlab
命名空间(当你使用Helm Chart部署时如果你指定了不同的命名空间名称,这里的名称可以不一样)里的所有事件:kubectl get events -w --namespace=gitlab
-
大部分有用的 极狐GitLab 工具(控制台、Rake 任务等)可以在 toolbox pod里找到,你可以进入 Pod 直接执行执行命令,或者在外部执行:
# 找到pod kubectl --namespace gitlab get pods -lapp=toolbox # 打开 Rails 控制台 kubectl --namespace gitlab exec -it -c toolbox <toolbox-pod-name> -- gitlab-rails console # 运行极狐GitLab 检查,因为通过helm chart安装的极狐GitLab 的特定结构,输出可能是混乱、不合法的。 gitlab-rake gitlab:check # 打开控制台不需要进入 pod kubectl exec -it <toolbox-pod-name> -- gitlab-rails console # 检查数据库迁移状态 kubectl exec -it <toolbox-pod-name> -- gitlab-rake db:migrate:status
- 排查 架构 > Kubernetes 集群 集成
- 检查
kubectl get events -w --all-namespace
的输出 - 检查在
gitlab-managed-apps
名称空间里的 pods 的日志
- 检查
-
怎么获取初始管理员密码 https://gitlab.cn/docs/charts/installation/deployment.html#initial-login:
# 找到包含密码的 secret 名称 kubectl get secrets | grep initial-root # 解码 kubectl get secret <secret-name> -ojsonpath={.data.password} | base64 --decode ; echo
-
怎么连接到一个极狐GitLab PostgreSQL 数据库:
kubectl exec -it <toolbox-pod-name> -- gitlab-rails dbconsole --include-password --database main
-
怎么获取Helm安装状态的信息
helm status <release name></release>
-
怎么更新使用Helm Chart 安装的极狐GitLab
helm repo update # 获取当前值并重定向到yaml文件(类似 gitlab.rb 的值) helm get values <release name> > gitlab.yaml # 运行升级 helm upgrade <release name> <chart path> -f gitlab.yaml
- 怎么应用变更到极狐GitLab 配置:
- 修改
gitlab.yaml
文件 -
运行下面的命令应用变更:
helm upgrade <release name> <chart path> -f gitlab.yaml
- 修改
-
怎么获取发行版的清单信息,它很有用,因为它包含所有Kubernetes 资源和依赖 chart的信息:
helm get manifest <release name>
KubeSOS 报告的快速统计
KubeSOS 是一个从极狐GitLab云原生部署里收集极狐GitLab 集群配置和日志的工具,你可以使用 fast-stats,这是一个低内存占用的小工具,用来从极狐GitLab 日志或在极狐GitLab 日志之间快速创建和对比性能分析数据。
-
运行
fast-stats
:cut -d ' ' -f2- <file-name> | grep ^{ | fast-stats
-
列出报错:
cut -d ' ' -f2- <file-name> | grep ^{ | fast-stats errors
-
运行
fast-stats
top:cut -d ' ' -f2- <file-name> | grep ^{ | fast-stats top
-
修改打印的行数,默认打印10行:
cut -d ' ' -f2- <file-name> | grep ^{ | fast-stats -l <number of rows>
在 macOS 上通过 minikube 最小化配置安装极狐GitLab
这部分的内容是基于使用minikube在Kubernetes上开发和Helm,参考这些文档里的细节。
-
通过 Homebrew 安装 Kubectl
brew install kubernetes-cli
-
通过 Homebrew 安装 minikube
brew cask install minikube
-
启动 minikube 并配置,如果 minikube 不能启动,尝试运行
minikube delete && minikube start
并重复下面的步骤:minikube start --cpu 3 --memory 8192 # GitLab工作所需的最低资源 minikube addons enable ingress
-
通过 Homebrew 安装 Helm 并初始化:
brew install helm
-
复制 minikube 最小值YAML文件到你的工作站:
curl --output values.yaml "https://gitlab.com/gitlab-org/charts/gitlab/raw/master/examples/values-minikube-minimum.yaml"
- 找到
minikube ip
命令输出里的IP地址,并使用这个IP地址更新YAML文件 -
安装极狐GitLab Helm Chart
helm repo add gitlab https://charts.gitlab.io helm install gitlab -f <path-to-yaml-file> gitlab/gitlab
如果你想修改一些极狐GitLab 设置,你可以使用上面提到的配置作为基础,然后创建你自己的YAML文件。
- 通过
helm status gitlab
和minikube dashboard
监控安装过程。安装可能需要花费20-30分钟的时间,具体取决于你的工作站的资源配置。 - 当所有的pod 显示
Running
或Completed
状态,根据上面初始登录里描述的方式获取极狐GitLab 密码,然后通过 UI 登录极狐GitLab。可以通过https://gitlab.domain
来访问,domain
的是 YAML 文件里的值。
给toolbox
pod里的 Rails 代码打补丁
给正在工作的极狐GitLab 服务pod打补丁需要构建新的镜像,其中包含修改后的源码。因此无法直接打补丁。toolbox / task-runner
pod拥有基于Raisl运行的Pod所需的所有东西,不会干扰其他正常的服务操作。你可以使用它来运行独立的任务,以及临时修改源码来执行一些任务。
toolbox
pod来做一些修改,如果Pod重启了,那么这些修改不会被保留。他们只在容器的正常工作生命周期里可用。要给toolbox
pod 里的源码打补丁:
1. 获取要应用的.path
文件:
- 直接下载合并请求的 diff 作为补丁文件
- 或者使用curl
获取 diff 文件,使用合并请求的IID替换下面的<mr_iid>
,或者修改 URL 指向原始代码片段:
```shell
curl --output ~/<mr_iid>.patch "https://gitlab.com/gitlab-org/gitlab/-/merge_requests/<mr_iid>.patch"
```
-
给
toolbox
pod 里的本地文件打补丁:cd /src/gitlab busybox patch -p1 -f < ~/<mr_iid>.patch