
ð Kubernetesã¯ã©ã¹ã¿ãªãœãŒã¹ãµãã¿ã€ã¶
ã³ãã¥ããã£ã§æã䜿ãããŠããããŒã«ãèŠã€ããŸãããã
ãã¹ãŠã®ããŒã«ãæ¢çŽ¢
ããŒã«ã³ã¬ã¯ã·ã§ã³ãé²èЧ
ãã¹ãŠã®ããŒã«ãèŠã â
Popeye ã¯ãã©ã€ãã® Kubernetes ã¯ã©ã¹ã¿ãŒãã¹ãã£ã³ãããããã€ããããªãœãŒã¹ãèšå®ã«é¢ããæœåšçãªåé¡ãå ±åãããŠãŒãã£ãªãã£ã§ãã Kubernetes ã®ç¶æ³ãæ¡å€§ããã«ã€ããã¯ã©ã¹ã¿ãŒã調æŽãã倿°ã®ãããã§ã¹ããããªã·ãŒã人éã远跡ããããšã¯èª²é¡ã«ãªãã€ã€ãããŸãã Popeye ã¯ããã£ã¹ã¯äžã«ãããã®ã§ã¯ãªãããããã€ãããŠãããã®ã«åºã¥ããŠã¯ã©ã¹ã¿ãŒãã¹ãã£ã³ããŸããã¯ã©ã¹ã¿ãŒã lint ããããšã§ãèšå®ãã¹ãå€ããªãœãŒã¹ãæ€åºãããã¹ããã©ã¯ãã£ã¹ãé©çšãããŠããããšã確èªããŠãå°æ¥ã®é çãé²ãã®ã«åœ¹ç«ã¡ãŸãã ããã¯ãå®éã® Kubernetes ã¯ã©ã¹ã¿ãŒãéçšããéã«çŽé¢ããèªç¥çéè² è·ã軜æžããããšãç®çãšããŠããŸãã ããã«ãã¯ã©ã¹ã¿ãŒãã¡ããªã¯ã¹ãµãŒããŒãæ¡çšããŠããå ŽåããªãœãŒã¹ã®éå°/äžè¶³å²ãåœãŠãå ±åãã容éäžè¶³ã«é¥ãå¯èœæ§ãããå Žåã«èŠåã詊ã¿ãŸãã
Popeye ã¯èªã¿åãå°çšããŒã«ã§ããããããªãæ¹æ³ã§ã Kubernetes ãªãœãŒã¹ã倿ŽããŸããã
ã¹ãã£ã³ã¬ããŒãã HTML ã«åºåã§ããŸãã
Popeye 㯠Prometheus ã¡ããªã¯ã¹ãå ¬éããŸãã ãã®ãªããžããªã«ã¯ãããã«äœ¿ãå§ãããããµã³ãã«ã® Popeye ããã·ã¥ããŒããçšæããŠããŸãã
Popeye 㯠LinuxãOSXãWindows ãã©ãããã©ãŒã ã§å©çšå¯èœã§ãã
LinuxãWindowsãMac çšã®ãã€ããªã¯ããªãªãŒã¹ ããŒãžã§ tarball ãšããŠå ¥æã§ããŸãã
OSX/Unit ã§ Homebrew/LinuxBrew ã䜿çšããå Žå ```shell brew install derailed/popeye/popeye
go install ã®äœ¿çš
go install github.com/derailed/popeye@latest
ãœãŒã¹ããã®ãã«ã Popeye 㯠go 1.21+ ã§ãã«ããããŸããããœãŒã¹ãã Popeye ããã«ãããã«ã¯ã以äžãå¿ èŠã§ãïŒ
ãªããžããªãã¯ããŒã³ãã
go.mod ãã¡ã€ã«ã«æ¬¡ã®ã³ãã³ãã远å ãã
replace (
github.com/derailed/popeye => MY_POPEYE_CLONED_GIT_REPO
)
å®è¡å¯èœãã¡ã€ã«ããã«ãããŠå®è¡ãã
go run main.go
ãã£ãã¡ãªäººã®ããã®ã¯ã€ãã¯ã¬ã·ãïŒ ```shell
git clone https://github.com/derailed/popeye cd popeye
make build
popeye
Popeye ã¯256è²ã¿ãŒããã«ã¢ãŒãã䜿çšããŸãã`Nix ã·ã¹ãã ã§ã¯ãTERM ãé©åã«èšå®ãããŠããããšã確èªããŠãã ããã
export TERM=xterm-256color
Popeye ã¯ãèªç±ã«äœ¿çšããããšããspinach yaml èšå®ãã¡ã€ã«ã䜿çšããŠãªã³ã¿ãŒã調æŽããããšãã§ããŸããPopeye èšå®ãã¡ã€ã«ã®è©³çްã¯ä»¥äžãã芧ãã ããã```shell
popeye version
popeye
fred namespacepopeye -n fred
popeye -A
popeye -f spinach.yaml
popeye --context olive
popeye -n ns1 -s pod,svc --logs none
popeye -n ns1 --logs /tmp/fred.log -v4
popeye help
---
## Linters
Popeye ã¯ããã¹ããã©ã¯ãã£ã¹ãšæœåšçãªåé¡ã«ã€ããŠã¯ã©ã¹ã¿ãŒãã¹ãã£ã³ããŸããçŸåšãPopeye ã¯ç¹å®ã®ãã¥ã¬ãŒã·ã§ã³ããã Kubernetes ãªãœãŒã¹ã®ã»ããã®ã¿ããã§ãã¯ããŸããä»åŸããã«è¿œå ãããäºå®ã§ãïŒKubernetes ã³ãã¥ããã£ã®çããã Popeye ãããã«è¯ãããããã«ååããŠãããããšãæåŸ
ããŠããŸãã
ãªã³ã¿ãŒã®ç®çã¯ãããŒãã®äžäžèŽã䜿çšãããŠããªããªãœãŒã¹ãã¡ããªã¯ã¹ã®äœ¿çšçããããŒããã³ã³ããã€ã¡ãŒãžãRBAC ã«ãŒã«ããã¢ãªãœãŒã¹ãªã©ã誀ã£ãèšå®ãæ€åºããããšã§ãã
Popeye ã¯å¥ã®éçè§£æããŒã«ã§ã¯ãããŸãããå®éã®ã¯ã©ã¹ã¿ãŒäžã§å®è¡ãããKubernetes ãªãœãŒã¹ãæ€æ»ãããªãœãŒã¹ããã®ãŸãŸã®ç¶æ
ã§ãªã³ãããŸãïŒ
以äžã¯ãå©çšå¯èœãªãªã³ã¿ãŒã®äžéšã®ãªã¹ãã§ãã
| | Resource | Linters | Aliases |
|----|-------------------------|-------------------------------------------------------------------------|------------|
| ð | Node | | no |
| | | ç¶æ
ïŒNotReadyãã¡ã¢ãª/ãã£ã¹ã¯äžè¶³ããããã¯ãŒã¯ãPID ãªã©ïŒ | |
| | | ããŒãã®ãã€ã³ããåç
§ãã Pod ã®èæ§ | |
| | | CPU/ã¡ã¢ãªäœ¿çšçã¡ããªã¯ã¹ãå¶éïŒããã©ã«ã 80% CPU/ã¡ã¢ãªïŒãè¶
ãããšããªãã | |
| ð | Namespace | | ns |
| | | éã¢ã¯ãã£ã | |
| | | ãããããŒã ã¹ããŒã¹ | |
| ð | Pod | | po |
| | | Pod ã®ç¶æ
| |
| | | ã³ã³ããã®ç¶æ
| |
| | | ServiceAccount ã®æç¡ | |
| | | èšå®ããã CPU/ã¡ã¢ãªå¶éïŒããã©ã«ã 80% CPU/ã¡ã¢ãªïŒãè¶
ããã³ã³ããã® CPU/ã¡ã¢ãª | |
| | | ã¿ã°ãªãã®ã³ã³ããã€ã¡ãŒãž | |
| | | `latest` ã¿ã°ã䜿çšããŠããã³ã³ããã€ã¡ãŒãž | |
| | | ãªãœãŒã¹èŠæ±/å¶éã®æç¡ | |
| | | çåãããŒã/æºåãããŒãã®æç¡ | |
| | | ååä»ãããŒããšãã®åç
§ | |
| ð | Service | | svc |
| | | Endpoints ã®æç¡ | |
| | | äžèŽãã Pod ã®ã©ãã« | |
| | | ååä»ãããŒããšãã®åç
§ | |
| ð | ServiceAccount | | sa |
| | | æªäœ¿çšãæœåšçã«æªäœ¿çšã® SA ãæ€åº | |
| ð | Secrets | | sec |
| | | æªäœ¿çšãæœåšçã«æªäœ¿çšã®ã·ãŒã¯ã¬ãããŸãã¯é¢é£ããŒãæ€åº | |
| ð | ConfigMap | | cm |
| | | æªäœ¿çšãæœåšçã«æªäœ¿çšã® CM ãŸãã¯é¢é£ããŒãæ€åº | |
| ð | Deployment | | dp, deploy |
| | | æªäœ¿çšãPod ãã³ãã¬ãŒãã®æ€èšŒããªãœãŒã¹äœ¿çšç | |
| ð | StatefulSet | | sts |
| | | æªäœ¿çšãPod ãã³ãã¬ãŒãã®æ€èšŒããªãœãŒã¹äœ¿çšç | |
| ð | DaemonSet | | ds |
| | | æªäœ¿çšãPod ãã³ãã¬ãŒãã®æ€èšŒããªãœãŒã¹äœ¿çšç | |
| ð | PersistentVolume | | pv |
| | | æªäœ¿çšãããªã¥ãŒã ã®ãã€ã³ãç¶æ
ãŸãã¯ããªã¥ãŒã ãšã©ãŒã®ãã§ã㯠| |
| ð | PersistentVolumeClaim | | pvc |
| | | æªäœ¿çšããã€ã³ãç¶æ
ãŸãã¯ããªã¥ãŒã ããŠã³ããšã©ãŒã®ãã§ã㯠| |
| ð | HorizontalPodAutoscaler | | hpa |
| | | æªäœ¿çšã䜿çšçãæå€§ããŒã¹ããã§ã㯠| |
| ð | PodDisruptionBudget | | |
| | | æªäœ¿çšãminAvailable èšå®ã®ãã§ã㯠| pdb |
| ð | ClusterRole | | |
| | | æªäœ¿çš | cr |
| ð | ClusterRoleBinding | | |
| | | æªäœ¿çš | crb |
| ð | Role | | |
| | | æªäœ¿çš | ro |
| ð | RoleBinding | | |
| | | æªäœ¿çš | rb |
| ð | Ingress | | |
| | | æå¹æ§ | ing |
| ð | NetworkPolicy | | |
| | | æå¹æ§ãå€ããã¬ãŒã | np |
| ð | PodSecurityPolicy | | |
| | | æå¹æ§ | psp |
| ð | Cronjob | | |
| | | æå¹æ§ãäžæåæ¢ãå®è¡ | cj |
| ð | Job | | |
| | | Pod ãã§ã㯠| job |
| ð | GatewayClass | | |
| | | æå¹æ§ãæªäœ¿çš | gwc |
| ð | Gateway | | |
| | | æå¹æ§ãæªäœ¿çš | gw |
| ð | HTTPRoute | | |
| | | æå¹æ§ãæªäœ¿çš | gwr |
ã³ãŒãã®å®å
šãªãªã¹ã㯠[ãã¡ã](https://github.com/derailed/popeye/blob/master/docs/codes.md) ãã芧ãã ããã
---
## ã¹ãã£ã³çµæã®ä¿å
Popeye ã®ã¬ããŒãããã¡ã€ã«ã«ä¿åããã«ã¯ãã³ãã³ãã« `--save` ãã©ã°ãæå®ããŸããããã©ã«ãã§ã¯äžæãã£ã¬ã¯ããªãäœæãããã¹ãã£ã³ã¬ããŒããããã«ä¿åãããŸããäžæãã£ã¬ã¯ããªã®ãã¹ã¯æšæºåºåã«è¡šç€ºãããŸããã¬ããŒãã®åºåãã£ã¬ã¯ããªãæå®ãããå Žåã¯ãç°å¢å€æ° `POPEYE_REPORT_DIR` ã䜿çšã§ããŸããæçµçãªãã¹ã¯ `<POPEYE_REPORT_DIR>/<cluster>/<context>` ã«ãªããŸããããã©ã«ãã§ã¯ãåºåãã¡ã€ã«ã®ååã¯æ¬¡ã®åœ¢åŒã«åŸããŸã: `lint_<cluster-name>_<time-UnixNano>.<output-extension>` ïŒäŸ: `lint-mycluster-1594019782530851873.html`ïŒãã¬ããŒãã®åºåãã¡ã€ã«åãæå®ãããå Žåã¯ã`--output-file` ãã©ã°ã«åžæã®ãã¡ã€ã«åããã©ã¡ãŒã¿ãšããŠæå®ã§ããŸãã
ã¬ããŒããäœæ¥ãã£ã¬ã¯ããªã«ä¿åããäŸ:```shell
POPEYE_REPORT_DIR=$(pwd) popeye --save
ã¯ãŒãã³ã°ãã£ã¬ã¯ããªã«HTML圢åŒã§ã¬ããŒãã "report.html" ãšããååã§ä¿åããäŸ :```shell POPEYE_REPORT_DIR=$(pwd) popeye --save --out html --output-file report.html
### S3ãªããžã§ã¯ãã¹ãã¢ã«ä¿åãã
ãŸãã¯ã`--s3-bucket` ãã©ã°ãæå®ããããšã§ãçæãããã¬ããŒããAWS S3ãŸãã¯Minioãªããžã§ã¯ãã¹ãã¢ã«ã¢ããããŒãã§ããŸãã
ãã©ã¡ãŒã¿ã«ã¯ãã¬ããŒããä¿åããS3ãã±ããã®ååãæå®ããå¿
èŠããããŸãã
ã¬ããŒãããã±ããã®ãµããã£ã¬ã¯ããªã«ä¿åããã«ã¯ããã±ãããã©ã¡ãŒã¿ã `bucket/path/to/report` ã®ããã«æå®ããŸãã
S3ã«ã¬ããŒããä¿åããäŸ:```shell
# AWS S3
# NOTE: You must provide env vars for AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY
# This will create bucket my-popeye if not present and upload a popeye json report to /fred/scan.json
popeye --s3-bucket s3://my-popeye/fred --s3-region us-west-2 --out json --save --output-file scan.json
# Minio Object Store
# NOTE: You must provide env vars for AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY and a minio server URI
# This will create bucket my-popeye if not present and upload a popeye json report to /fred/scan.json
popeye --s3-bucket minio://my-popeye/fred --s3-region us-east --s3-endpoint localhost:9000 --out json --save --output-file scan.json
ãŸããQuayã®å
¬åŒDockerãªããžããªããçŽæ¥å®è¡ããŠãã³ã³ããã§Popeyeãå®è¡ããããšãã§ããŸãã
Dockerã³ã³ãããå®è¡ãããšãã®ããã©ã«ãã®ã³ãã³ãã¯popeyeã§ãããã®ããããµããŒããããŠããCLIãã©ã°ã䜿çšããŠã¹ãã£ã³ãã«ã¹ã¿ãã€ãºã§ããŸãã
ã¯ã©ã¹ã¿ã«ã¢ã¯ã»ã¹ããã«ã¯ã-vã䜿çšããŠããŒã«ã«ã®kubeconfigãã£ã¬ã¯ããªãã³ã³ããã«ãããã³ã°ããŸã :```shell
docker run --rm -it -v $HOME/.kube:/root/.kube quay.io/derailed/popeye --context foo -n bar
äžèšã®dockerã³ãã³ãã`--rm`ä»ãã§å®è¡ãããšãPopeyeãçµäºããæç¹ã§ã³ã³ãããåé€ãããŸãã
`--save`ã䜿çšããå Žåãã³ã³ããå
ã®/tmpã«åºåãæžã蟌ãŸããpopeyeçµäºæã«ã³ã³ãããåé€ããããããåºåã倱ãããšã«ãªããŸã;(;
ãããåé¿ããã«ã¯ã/tmpãã³ã³ããã®/tmpã«ãããã³ã°ããŸãã
> 泚: `POPEYE_REPORT_DIR`ç°å¢å€æ°ãèšå®ããããšã§ãããã©ã«ãã®åºåãã£ã¬ã¯ããªã®å Žæãäžæžãã§ããŸãã```shell
docker run --rm -it \
-v $HOME/.kube:/root/.kube \
-e POPEYE_REPORT_DIR=/tmp/popeye \
-v /tmp:/tmp \
quay.io/derailed/popeye --context foo -n bar --save --output-file my_report.txt
# Docker has exited, and the container has been deleted, but the file
# is in your /tmp directory because you mapped it into the container
cat /tmp/popeye/my_report.txt
<snip>
Popeyeã¯ããŸããŸãªåœ¢åŒã§ãªã³ã¿ãŒã¬ããŒããçæã§ããŸãã -o cliãªãã·ã§ã³ã䜿çšããŠã奜ã¿ã®åœ¢åŒãéžã¹ãŸãã
Popeyeã¯ã¹ãã£ã³ããçŽæ¥Prometheusã¡ããªã¯ã¹ãå ¬éã§ããŸãã prometheus pushgatewayãšèªèšŒæ å ±ãžã®ã¢ã¯ã»ã¹ãå¿ èŠã§ãã
泚æïŒãããã¯ãŠãŒã¶ãŒã®ãã£ãŒãããã¯ãšäœ¿çšç¶æ³ã«åºã¥ããŠå€æŽãããå¯èœæ§ããããŸã!!
ã¡ããªã¯ã¹ãå ¬éããã«ã¯ã远å ã®cliåŒæ°ãå¿ èŠã§ãã```shell
popeye --push-gtwy-url http://localhost:9091
popeye -o html --save --push-gtwy-url http://localhost:9091
### PopProm ã¡ããªã¯ã¹
以äžã® Popeye prometheus ã¡ããªã¯ã¹ãå
¬éãããŠããŸã:
* `popeye_severity_total` [gauge] ã¯éèŠåºŠã«åºã¥ããæ§ã
ãªã«ãŠã³ãã远跡ããŸãã
* `popeye_code_total` [gauge] 㯠Popeye ã®ãªã³ã¿ãŒã³ãŒãå¥ã®ã«ãŠã³ãã远跡ããŸãã
* `popeye_linter_tally_total` [gauge] ã¯ãªã³ã¿ãŒããšã®ã«ãŠã³ãã远跡ããŸãã
* `popeye_report_errors_total` [gauge] ã¯ã¹ãã£ã³ãšã©ãŒã®åèšã远跡ããŸãã
* `popeye_cluster_score` [gauge] ã¯ã¹ãã£ã³ã¬ããŒãã®ã¹ã³ã¢ã远跡ããŸãã
### PopGraf
ãã®ãªããžããªã«ã¯ãéå§ã«åœ¹ç«ã€ãµã³ãã«ã® [Grafana](https://grafana.com) ããã·ã¥ããŒããå«ãŸããŠããŸãã
> 泚æ! äœæ¥äžã§ããUX/grafana/promql ã®ã¹ãã«ããæã¡ã®æ¹ã¯ããã²ãååãã ããã
---
## SpinachYAML
`-f` ãªãã·ã§ã³ã§ spinach YAML èšå®ãã¡ã€ã«ãæå®ãããšããªã³ã¿ãŒãããã«èšå®ã§ããŸãããã®ãã¡ã€ã«ã§ã¯ãã³ã³ããã®äœ¿çšçãããå€ãç¹å®ã®ãªã³ã¿ãŒèšå®ãããã«ãªã³ã¿ãŒããé€å€ãããªãœãŒã¹ãã³ãŒããæå®ã§ããŸãã
> 泚æ! ãã®ãã¡ã€ã«ã¯ Popeye ã®æé·ã«åãããŠå€æŽãããŸãã
`excludes` ããŒã®äžã§ãç¹å®ã®ãªãœãŒã¹ãŸãã¯ãªã³ã¿ãŒã³ãŒããã¹ãããããããã«èšå®ã§ããŸãã
Popeye ã®ãªã³ã¿ãŒã¯ãk8s ãªãœãŒã¹åã«ã¡ãªãã§åä»ããããŠããŸãã
äŸãã°ãPodDisruptionBudget ãªã³ã¿ãŒã¯ `poddisruptionbudgets` ãšããååã§ã`policy/v1/poddisruptionbudgets` ãã¹ãã£ã³ããŸãã
> 泚æ! ãªã³ã¿ãŒã¯è€æ°åœ¢ã®ãªãœãŒã¹ `kind` 圢åŒã䜿çšãããã¹ãŠå°æåã§ç¶ŽãããŸãã
spinach ãã¡ã€ã«ã§ã¯ããªãœãŒã¹ã®å®å
šä¿®é£Ÿå (FQN) ããªãœãŒã¹åãèå¥ããããã«äœ¿çšãããŸããã€ãŸãã`namespace/resource_name` ã§ãã
äŸãã°ãåå空é `blee` å
ã®ããã `fred-1234` ã® FQN 㯠`blee/fred-1234` ãšãªããŸããããã«ããã`fred/p1` ãš `blee/p1` ãåºå¥ã§ããŸãã
ã¯ã©ã¹ã¿å
šäœã®ãªãœãŒã¹ã®å ŽåãFQN ã¯ååãšåçã§ãã
é€å€ã«ãŒã«ã¯ãåçŽãªæååäžèŽãŸãã¯æ£èŠè¡šçŸã®ããããã§ããåŸè
ã®å Žåãæ£èŠè¡šçŸã¯ `rx:` ãã¬ãã£ãã¯ã¹ã§æå®ããå¿
èŠããããŸãã
> 泚æ! æ£èŠè¡šçŸã«ã¯æ³šæããŠãã ããã*ç·©ã* æ£èŠè¡šçŸã«ãŒã«ã䜿çšãããšãäºæ³ãããå€ãã®ãªãœãŒã¹ãã¬ããŒãããé€å€ãããå¯èœæ§ããããŸãã
> ã¯ã©ã¹ã¿ãŒã®ãªãœãŒã¹ã倿Žããããšãããã«ããæé©ã§ã¯ãªãã¹ãã£ã³ãçºçããå¯èœæ§ããããŸãã
> ãããã£ãŠãæã
Popeye ã `å
šé` ã§å®è¡ããŠãã¯ã©ã¹ã¿ãŒã§çºçããå¯èœæ§ã®ããæ°ããåé¡ã確å®ã«ææ¡ããããšããå§ãããŸãâŠ
以äžã¯ããã®ãªãªãŒã¹æç¹ã§ã®ãµã³ãã« spinach ãã¡ã€ã«ã§ãã
ãã®ãªããžããªã® `spinach` ãã£ã¬ã¯ããªã«ã¯ãããå
å®ãã eks ããã³ aks ããŒã¹ã® spinach ãã¡ã€ã«ããããŸãã
(ã¡ãªã¿ã«: ãããžã§ã¯ãã«æ°ããåå ãããæ¹ã«ãšã£ãŠã¯ãã¯ã©ã¹ã¿ãŒåºæã® spinach ãã¡ã€ã«ã® PR ã远å ããããšã§è²¢ç®ããçŽ æŽãããæ¹æ³ãããããŸããâŠ)```yaml
# spinach.yaml
# A Popeye sample configuration file
popeye:
# Checks resources against reported metrics usage.
# If over/under these thresholds a linter warning will be issued.
# Your cluster must run a metrics-server for these to take place!
allocations:
cpu:
underPercUtilization: 200 # Checks if cpu is under allocated by more than 200% at current load.
overPercUtilization: 50 # Checks if cpu is over allocated by more than 50% at current load.
memory:
underPercUtilization: 200 # Checks if mem is under allocated by more than 200% at current load.
overPercUtilization: 50 # Checks if mem is over allocated by more than 50% usage at current load.
# Excludes excludes certain resources from Popeye scans
excludes:
# [NEW!] Global exclude resources and codes globally of any linters.
global:
fqns: [rx:^kube-] # => excludes all resources in kube-system, kube-public, etc..
# [NEW!] Exclude resources for all linters matching these labels
labels:
app: [bozo, bono] #=> exclude any resources with labels matching either app=bozo or app=bono
# [NEW!] Exclude resources for all linters matching these annotations
annotations:
fred: [blee, duh] # => exclude any resources with annotations matching either fred=blee or fred=duh
# [NEW!] Exclude scan codes globally via straight codes or regex!
codes: ["300", "206", "rx:^41"] # => exclude issue codes 300, 206, 410, 415 (Note: regex match!)
# [NEW!] Configure individual resource linters
linters:
# Configure the namespaces linter for v1/namespaces
namespaces:
# [NEW!] Exclude these codes for all namespace resources straight up or via regex.
codes: ["100", "rx:^22"] # => exclude codes 100, 220, 225, ...
# [NEW!] Excludes specific namespaces from the scan
instances:
- fqns: [kube-public, kube-system] # => skip ns kube-pulbic and kube-system
- fqns: [blee-ns]
codes: [106] # => skip code 106 for namespace blee-ns
# Skip secrets in namespace bozo.
secrets:
instances:
- fqns: [rx:^bozo]
# Configure the pods linter for v1/pods.
pods:
instances:
# [NEW!] exclude all pods matching these labels.
- labels:
app: [fred,blee] # Exclude codes 102, 105 for any pods with labels app=fred or app=blee
codes: [102, 105]
resources:
# Configure node resources.
node:
# Limits set a cpu/mem threshold in % ie if cpu|mem > limit a lint warning is triggered.
limits:
# CPU checks if current CPU utilization on a node is greater than 90%.
cpu: 90
# Memory checks if current Memory utilization on a node is greater than 80%.
memory: 80
# Configure pod resources
pod:
# Restarts check the restarts count and triggers a lint warning if above threshold.
restarts: 3
# Check container resource utilization in percent.
# Issues a lint warning if about these threshold.
limits:
cpu: 80
memory: 75
# [New!] overrides code severity
overrides:
# Code specifies a custom severity level ie critical=3, warn=2, info=1
- code: 206
severity: 1
# Configure a list of allowed registries to pull images from.
# Any resources not using the following registries will be flagged!
registries:
- quay.io
- docker.io
Popeye ã¯ã³ã³ããåãããŠãããKubernetes ã¯ã©ã¹ã¿å ã§ã¯ã³ãªããŸã㯠CronJob ãšããŠçŽæ¥å®è¡ã§ããŸãã
以äžã¯ãµã³ãã«èšå®ã§ããå¿ èŠã«å¿ããŠå€æŽããŠãã ãããããã«é¢ãããããã§ã¹ãã¯ãã®ãªããžããªã® k8s ãã£ã¬ã¯ããªã«ãããŸãã```shell kubectl apply -f k8s/popeye
Please provide the Markdown content to translate.```yaml
---
apiVersion: v1
kind: Namespace
metadata:
name: popeye
---
apiVersion: batch/v1
kind: CronJob
metadata:
name: popeye
namespace: popeye
spec:
schedule: "* */1 * * *" # Fire off Popeye once an hour
concurrencyPolicy: Forbid
jobTemplate:
spec:
template:
spec:
serviceAccountName: popeye
restartPolicy: Never
containers:
- name: popeye
image: derailed/popeye:vX.Y.Z
imagePullPolicy: IfNotPresent
args:
- -o
- yaml
- --force-exit-zero
resources:
limits:
cpu: 500m
memory: 100Mi
--force-exit-zero ãèšå®ããå¿
èŠããããŸããèšå®ããªãå ŽåãPod ã¯ãšã©ãŒç¶æ
ã«ãªããŸãã
泚æïŒPopeye ã¯lintãšã©ãŒãæ€åºãããšããŒã以å€ã®çµäºã³ãŒãã§çµäºããŸãã
Popeye ãä»äºãããããã«ã¯ããµã€ã³ã€ã³ãããŠãŒã¶ãŒãäžèšã®ãªãœãŒã¹ãååŸ/äžèŠ§è¡šç€ºããã®ã«ååãªRBACã®æš©éãæã£ãŠããå¿ èŠããããŸãã
Popeyeã®RBACã«ãŒã«ã®ãµã³ãã«ïŒãããã¯å€æŽãããå¯èœæ§ããããŸããïŒ
泚æïŒãèªèº«ã®ã¯ã©ã¹ã¿ãŒããªã·ãŒã«åãããŠç¢ºèªãã調æŽããŠãã ããã```yaml
apiVersion: v1 kind: ServiceAccount metadata: name: popeye namespace: popeye
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: popeye rules:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: popeye subjects:
---
## ã¬ããŒãã®åœ¢æ
lintã¬ããŒãã¯ãã¹ãã£ã³ãããåãªãœãŒã¹ã°ã«ãŒããšãã®æœåšçãªåé¡ãåºåããŸãã
ã¬ããŒãã¯ããªã³ã¿ãŒã®é倧床ã¬ãã«ã«å¿ããŠè²/çµµæåã§ã³ãŒãåãããŠããŸãïŒ
| ã¬ãã« | ã¢ã€ã³ã³ | ãžã¥ã©ã·ã㯠| è² | 説æ |
|--------|----------|--------------|----------|--------------------|
| OK | â
| OK | ç· | ããããŒïŒ |
| æ
å ± | ð | I | éç· | åèæ
å ± |
| èŠå | ð± | W | é»è² | æœåšçãªåé¡ |
| ãšã©ãŒ | ð¥ | E | èµ€ | ã¢ã¯ã·ã§ã³ãå¿
èŠ |
ã¹ãã£ã³ãããåKubernetesãªãœãŒã¹ã®èŠåºãéšåã¯ãäžèšã®åã«ããŽãªã®æŠèŠã«ãŠã³ããæäŸããŸãã
ãµããªãŒã»ã¯ã·ã§ã³ã¯ãæå®ãããã¯ã©ã¹ã¿ãŒã§ã®ãªã³ã¿ãŒãã¹ã«åºã¥ã**Popeyeã¹ã³ã¢**ãæäŸããŸãã
---
## æ¢ç¥ã®åé¡
ãã®åæãªãªãŒã¹ã¯äžå®å®ã§ããPopeyeã¯ä»¥äžã®å Žåã«ã»ãŒç¢ºå®ã«ççºããŸãâŠ
* å€ãããŒãžã§ã³ã®Kubernetesãå®è¡ããŠããå ŽåãPopeyeã¯Kubernetes 1.25.Xã§æé©ã«åäœããŸãã
* ã¯ã©ã¹ã¿ãŒã管çããã®ã«ååãªRBACã®æš©éããªãå ŽåïŒRBACã»ã¯ã·ã§ã³ãåç
§ïŒ
---
## å
責äºé
ããã¯é²è¡äžã®äœæ¥ã§ãïŒKubernetesã³ãã¥ããã£ã§ååãªé¢å¿ãããã°ãçæ§ã®æšå¥šãè²¢ç®ã«å¿ããŠæ©èœåŒ·åãè¡ããŸãã
ãŸãããã®åãçµã¿ãæ°ã«å
¥ã£ãŠããã ããŸãããããã®æšããç¥ãããã ããïŒ
---
## ATTA ã¬ãŒã«ãº/ããŒã€ãºïŒ
Popeyeã¯å€ãã®ãªãŒãã³ãœãŒã¹ãããžã§ã¯ããã©ã€ãã©ãªã®äžã«æãç«ã£ãŠããŸãããã®ãããžã§ã¯ããçŸå®ã®ãã®ã«ããããã«å€éã鱿«ã«åããã¹ãŠã®OSSã³ã³ããªãã¥ãŒã¿ãŒã«å¿ããã®æè¬ãæ§ããŸãã
### é£çµ¡å
æ
å ±
1. **ã¡ãŒã«**: [email protected]
2. **Twitter**: [@kitesurfer](https://twitter.com/kitesurfer?lang=en)
---
<img src="https://raw.githubusercontent.com/derailed/popeye/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2025 Imhotep Software LLC.
å
šçŽ æã¯ [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0) ã®äžã§ã©ã€ã»ã³ã¹ãããŠããŸãã
| ãã©ãŒããã | 説æ | ããã©ã«ã | ã¯ã¬ãžãã |
|---|
| standard | ã¢ã€ã³ã³ãšã«ã©ãŒè¡šç€ºã®å®å šçåºå | ã¯ã | |
| jurassic | 1979幎ã®ããã«ã¢ã€ã³ã³ãã«ã©ãŒããªã | ||
| yaml | YAMLåœ¢åŒ | ||
| html | HTMLåœ¢åŒ | ||
| json | JSONåœ¢åŒ | ||
| junit | Javaã«æããããæããæ¹åã | ||
| prometheus | Prometheusã¡ããªã¯ã¹ãšããŠã¬ããŒãããã³ã | dardanel | |
| score | ã¯ã©ã¹ã¿ã®ãªã³ã¿ãŒã¹ã³ã¢å€ïŒ0-100ïŒãè¿ã | kabute |