├── .gitignore ├── README.md ├── architecture └── 架构杂谈.md ├── config_dir └── airflow_1.2.4_values.yaml ├── docker ├── Dockerfile-最佳实践.md ├── Docker必修课程Dockerfile.md ├── Docker最简单管理方法之Portainer.md ├── Docker网络配置那些事.md ├── Java和Docker限制的那些事儿.md ├── RedHat开源企业镜像项目Quay.md ├── docker-exec失败问题排查之旅.md ├── docker-容器日志清理方案.md ├── docker与Containerd使用区别.md ├── docker镜像分析之dive.md ├── 一次构建多平台docker镜像.md ├── 如何修改容器时间而不改变宿主机时间.md ├── 推荐两个Docker配置检查与启动异常修复方法脚本.md ├── 比docker-stats命令好用工具ctop.md ├── 终于有人把Docker讲清楚了万字详解.md ├── 解密Docker挂载文件-宿主机修改后容器里文件没有修改.md └── 适用于CI容器漏洞扫描神器.md ├── grafana-template └── Aliyun-Grafana-SLb.json ├── img ├── 0001.png ├── 0002.png ├── 0003.png ├── 0004.png ├── 0005.png ├── 0006.png ├── 0806e2fb37bf7b39ac53f83018a4f47e.png ├── 0bd4bdab-2b42-4040-a245-66b9530aab8c.jpg ├── 0d0d1f5e0f7d261d7d4969f30538d794.png ├── 0fd57872320d46e7a2dd407e429cb181.jpeg ├── 10417188-4188919daf4002e5.png ├── 10417188-7aac14c237a0905c.png ├── 10417188-f14c03a7e47893cd.png ├── 10417188-fb41c9cdae90780b.png ├── 11553600-0a318a22dfc65ae9.png ├── 11553600-3f4af0caebb34065.png ├── 11553600-72221ff13b8324d9.png ├── 11553600-7aa919bf99956101.png ├── 11553600-a7253fbdcedd88dd.png ├── 11553600-bb4d5bd2fa186c0f.png ├── 11553600-d3acae7e6c8966e1.png ├── 11553600-dfb06006250df8da.png ├── 11553600-fde662554a54e915.png ├── 13523736-ad5203365295fc69.png ├── 1394b5e8-0d2f-4ba5-87cf-73b87424e700.png ├── 15519803-0f0dcb3dfba4ce8c.png ├── 15519803-376775e806efbaf4.png ├── 15519803-5162ccd8a8b96bd6.png ├── 15519803-9ab184ab5b8075f1.png ├── 15519803-dd2c430406b8505a.png ├── 15519803-f777eb6a200013cb.png ├── 1558062783657-92e4fc45-38a8-4c6e-84c0-1a7a890ef07c.png ├── 1558439296918-b969ce9c-32a1-4500-bb77-ae0496146822.png ├── 1558439341166-a01890a7-d933-4292-b1b1-2536d27ef52c.png ├── 1558489929900-b9afc3e5-c183-4622-93ca-a2c2a49b7a17.png ├── 15942217205747.jpg ├── 15942217704692.jpg ├── 16f3ba512f6f7932.png ├── 16f3ba51346e2058.png ├── 16f3ba5134848f66.png ├── 16f3ba51352a5f23.png ├── 16f3ba513549e25c.png ├── 16f3ba517517c309.png ├── 16f3ba51f3974432.png ├── 16f3ba525cc83dfe.png ├── 16f3ba52a5452082.png ├── 16f3ba532c16073b.png ├── 16f3ba5424dd8f13.png ├── 18885539-d5d52769d1469bfe.png ├── 1889435-18a0464e11887334.jpg ├── 1889435-999d351beafab3c6.jpg ├── 1889435-a9827a7373dbb2df.jpg ├── 1889435-af09c18b8bbeb5fc.jpg ├── 1889435-b3999fc79b19157f.jpg ├── 1889435-c429ec61d5a88cf9.jpg ├── 1889435-f534f0674cfc87f2.jpg ├── 1967b016-6b0e-4876-98b7-b5c8228c4654.jpg ├── 19895418-0f820d7b1324d4d5.png ├── 19895418-122efbeed6fc2c66.jpeg ├── 19895418-163d1c853ebaa281.jpeg ├── 19895418-1bfc620d700a2eff.jpeg ├── 19895418-2a43ae2fc81719ee.jpeg ├── 19895418-356ad515e6dc7cb3.jpeg ├── 19895418-3cbee1b5956e86d0.jpeg ├── 19895418-432443d65800ac60.png ├── 19895418-4440b9f5f65ac072.jpeg ├── 19895418-4d9152c2f111f45b.jpeg ├── 19895418-6f8e472245ffd2d2.jpeg ├── 19895418-8b5df8099a9361c7.jpeg ├── 19895418-92abb79a2787fde3.jpeg ├── 19895418-9da50f56a2c74436.jpeg ├── 19895418-c776f5804b23349d.jpeg ├── 19895418-e67793bcbd4b426d.jpeg ├── 19895418-eee3acabe83b2a09.jpeg ├── 19895418-f52524b7702c1805.jpeg ├── 19895418-f7bbce5099d97e6f.jpeg ├── 1_6qQCQLV8cIBkMY7K4GKrig.png ├── 1_CrG3p2FUcjiHhwLyGQzQ2Q.png ├── 1_F2wfrW5zO6Y36Yr_jL014g.png ├── 1_FEufKCJPNrCwkrJkwtjQWQ.png ├── 1_QDhBk9xFa77T4n3-5lHIsg.png ├── 1_c80mIDN0Wz7b2xb5Qfxerw.png ├── 1_eHVk7p4I2LuSnVwvYaHbyw.png ├── 1_lus49PaFI90rVMd23fV86A.png ├── 1_oAF5BE2RplGHtGmcC0L5Ew.png ├── 1_qgogo7I03e5kyNWKVWtFYg.png ├── 1_sHmUG1htz-brFTGPz3HXXQ.png ├── 1_xYujRQjcpd-mQbNTwEbukA.png ├── 1a19a346-e28d-481a-8cbc-6b73ca0a3038.png ├── 1fac1158-c452-4d5c-8989-f3161c9e4527.jpg ├── 20012016-35e3d1e35440b1c2.jpeg ├── 20012016-52ecc1118e65d90d.jpeg ├── 20012016-a542eb5e53e3383a.jpeg ├── 20012016-d233be057a1dc1fb.jpeg ├── 20012016-f4e4c9beef635a91.jpeg ├── 20012016-fd0b05b4c25fca4c.jpeg ├── 2019-12-11-11-04-03.png ├── 2019-12-11-11-19-11.png ├── 2019-12-11-11-26-10.png ├── 2019-12-11-11-33-52.png ├── 2019-12-11-17-13-11.png ├── 20200608132630839.jpeg ├── 20200608133126879.jpeg ├── 20200608133445261.jpeg ├── 20200608133514483.jpeg ├── 20289b7a-a47b-46f2-beda-2f6fef8a44ba.png ├── 2587ac57655cacc9e063082a3be4c714.png ├── 295529ab-e033-4893-9b0a-cb0a3e698b35.jpg ├── 2e415b33-c061-4dec-8433-777ba4edcb8c.jpg ├── 335c3cbc-a4cf-4e22-b492-b3b6f7c123d5.jpg ├── 36ada26f-9f2a-47c8-a021-5f6044007a67.png ├── 3944b217-12ba-48b3-8e7b-f3ff12d5d40b.png ├── 3b59cbcd-05c4-46ed-a129-2564472d8fd1.jpg ├── 4134fdb2-c8ee-468e-926b-33406d9f8651.png ├── 4394dbe0-79c0-4802-b23b-0d507b559ad4.png ├── 43d336bb62c35dc91cc35b88109a9148.png ├── 467d1419-1757-4130-810c-d00fe0b1169b.jpg ├── 4762cd674ddf15f8e74381565aca2b4f.png ├── 4f58b34c-d853-4ff5-bcdc-1d2b01ba32be.png ├── 4f7d7345-f275-40b4-88a7-c2dcd7895a13.png ├── 56b44830-006e-4d9a-be5b-50e92f5c08bd.jpg ├── 596f6d60-2e37-460a-8da5-9dfd07b7170d.jpg ├── 5a5ea166-f9df-49d1-ab79-02a925c11322.jpg ├── 64aed493-7c19-417b-8f08-79ee57258bcb.jpg ├── 6688932-0a729ba489cc3e8e.png ├── 6e57234f-cf0f-4b36-bea7-f98786bd7595.png ├── 70d1ff3e-551b-42fd-8f7b-cfb82a07aabb.png ├── 712e2738-7224-4333-8673-b4dabdf39f64.png ├── 73631734-1d5e-4af7-88a6-25eb3162e375.png ├── 768944cd150abe5628f7caef098d638e.png ├── 76e844e7-5f04-475a-8fc9-004194e89180.png ├── 84f4f78b-b7fc-48ee-8fb0-e9fe57e8d3b6.jpg ├── 8bc46409f5b244e289b7bc31305e1514.jpeg ├── 8ccf5b9fb07c5f6857bce77c0af73686.png ├── 8ffcbd14-8242-4a99-b3e7-73f90345890e.png ├── 9088c8536c984b67b84c56c9a9fdb686.jpeg ├── 90a1fa9d-53d4-4447-9655-7519bac5bb2c.png ├── 95733375-04929680-0cbd-11eb-82f3-adbcfecf4a3e.png ├── 95733389-08beb400-0cbd-11eb-983b-cf5138277fe3.png ├── 95733403-0c523b00-0cbd-11eb-9ff9-abc5469e97ca.png ├── 9668d944-b7b7-425e-b86b-ae24c5aa2f0c.jpg ├── 9e1a84c1-139c-4d49-9070-d787e7144d00.png ├── Dejavu-1.png ├── Dejavu-2.gif ├── Dejavu-3.gif ├── Dejavu-4.gif ├── Descheduler.png ├── Elastic-HD-Dashboard-1.png ├── Elastic-HD-Dashboard-7.png ├── Kaniko-1.png ├── Lens-1.png ├── Lens-2.png ├── Lens-3.png ├── Lens-5.png ├── Lens-6.png ├── Lens-7.png ├── Lens-8.png ├── Lens-9.png ├── Naftis-dashboard.png ├── Naftis-istio.png ├── Naftis-service-1.png ├── Naftis-service.png ├── Naftis-taskcreate-1.png ├── Naftis-taskcreate-2.png ├── Naftis-taskcreate-3.png ├── Naftis-tasktpl-new.png ├── Naftis-tasktpl-view.png ├── Naftis-tasktpl.png ├── PrometheusAlert.png ├── a1fc81a6-d26b-4b43-ab49-ba05e0ff6eed.png ├── a24cc325720ed8be706f00b100e67782.png ├── a53db783-02b7-4038-9062-c4006a77b19d.jpg ├── accesshub-1.png ├── accesshub-2.png ├── accesshub-3.png ├── accesshub-4.png ├── accesshub-5.png ├── apiserver-1.png ├── arch.png ├── architecture.png ├── arthas-dashboard.png ├── b1afc5c8-b49f-44f8-bc06-086361c83024.jpg ├── b1b8247eb469b08920f7e4b01a6a619f.png ├── b5fc1888-c27a-4732-9df4-84805641c62a.png ├── b6b602a3-f579-4f5c-8d2b-c5d6a6e944bc.jpg ├── b7c3bd34-c120-46b1-8df5-c3ef08851d44.png ├── bc007789-6d9b-4da9-b32a-3c84df8aaa07.png ├── bf52b77fly1g0wkhtwdlij217c0si44d.jpg ├── bf52b77fly1g0wnfdxo9fj20hs0anmyb.jpg ├── bf52b77fly1g0ws7jziucj21hy0dmtb0.jpg ├── bf52b77fly1g0ws7vtgq2j21de0cmgmo.jpg ├── bf52b77fly1g0ws87espcj21ao0d00tz.jpg ├── bf52b77fly1g0ws8dqqsoj21am0d0q4q.jpg ├── bf52b77fly1g0ws90i7ttj21mq0d440r.jpg ├── blackbox-external-website.png ├── blackbox-http-post.png ├── blackbox-k8s-http-services-1.png ├── blackbox-k8s-http-services-2.png ├── blackbox-k8s-ingresses.png ├── blackbox-k8s-service-dns.png ├── bootstrap-1.png ├── c45386b8fe7d94860469e7ba96b4f6a5.png ├── c92c2fc3-f981-44a4-ad11-e10ccd84a29f.jpg ├── c98b1359-2c46-4e5f-9beb-f231b5c3ca9a.png ├── calico-1.png ├── calico-bgp-1.png ├── calico-ipip-1.png ├── calico-ipip-2.png ├── calico-ipip-3.png ├── calico-ipip-4.png ├── calico-ipip-5.png ├── calico-ipip-6.png ├── capabilities.png ├── car-repair.png ├── cb6ddb81-ba6f-44d9-8ebc-3ac4304c7808.png ├── coredns-img-1.png ├── coredns-img-2.png ├── coredns-img-3.png ├── coredns-img-4.png ├── cpu-mysql-crop-500.png ├── ctop.png ├── d835c979-9b69-40e2-9d05-0cb9271a1ef3.png ├── derrick.png ├── devops-1.png ├── dingtalk-token.png ├── dingtalk.jpeg ├── docker-add-capabilities.png ├── docker-call-path.png ├── docker-drop-capabilities.png ├── docker-k8s-logging-arch.png ├── docker-log-1.png ├── docker-log-2.png ├── docker-logging-arch.png ├── docker-network-route-1.png ├── docker-network-route-2.png ├── docker-systemd.png ├── e4351d72-3284-49ac-ba71-80d96f8d371e.png ├── e499ffd0-d3c2-495e-9c79-614f88f01d83.png ├── e52364d2-45e8-47b8-80d4-db2608fe6ec1.png ├── eb32c117-5b5a-42f4-9571-7a597e49a9ba.png ├── eddaa0ba-8fd0-40d3-846a-790c4e5424c7.jpg ├── eedead36-3aa5-4a1d-831d-dc53a80630b1.jpg ├── elasticsearch-head.png ├── elk-10.png ├── elk-12.png ├── elk-13.png ├── elk-architecture.jpg ├── elk-status.png ├── elk-template.png ├── ephemeral-storage-1.png ├── etcd-11.png ├── etcd-12.png ├── etcd-13.png ├── f480225fccfe4d65b53a508dd0c11ff4.jpeg ├── f8ba4d61-6b4f-4f4c-b900-7d11a3ecea79.png ├── f9d8a67b-add1-4bd6-9d32-f33b9b3bdac6.jpg ├── fc3cca4971781548f39573a2aed60b98.png ├── fc46531a-b6fa-408f-8577-9521c97f5fda.png ├── ff969719-cf57-4844-9bdd-e07cfb229347.png ├── first-page.png ├── flannel-host-gw-1.png ├── flannel-vxlan.png ├── free1.jpg ├── gitlab-ci-1.png ├── gitlab-ci-2.png ├── gitlab-ci-3.png ├── gitlab-ci-4.png ├── gitlab-k8s.png ├── goaccess-dashboard.png ├── goaccess-nginx.png ├── grafana-2.png ├── grafana-3.png ├── grafana-nginx-access-1.png ├── grafna-1.png ├── harbor-artifact-1.png ├── harbor-artifact-2.png ├── http-ssl-1.png ├── image-20191002073039330.png ├── image-20191002073210761.png ├── image-20191002073245932.png ├── image-20191003230417140.png ├── image-20191217133227879.png ├── image-20200201160933419.png ├── image-20200201180554307.png ├── image-20200201181823835.png ├── image-20200201215109659.png ├── image-20200201215213112.png ├── image-20200225204455933.png ├── image-20200225204706887.png ├── image-20200225205535033.png ├── image-20200225205712284.png ├── image-20200225212104752.png ├── image2020-10-16_14-1-27.png ├── ingress-controller.png ├── ingress-nginx-1.png ├── ingress-nginx-2.png ├── io.png ├── istio-1.png ├── istio-2.jpeg ├── istio-3.png ├── istio-4.png ├── juice.png ├── k8s-1.18.2-1.png ├── k8s-1.19-1.png ├── k8s-1.19-logo.png ├── k8s-1.20-1.png ├── k8s-1.20-2.png ├── k8s-arch1.png ├── k8s-cd-jenkins-pipeline.png ├── k8s-chahua-1.png ├── k8s-chahua-10.png ├── k8s-chahua-11.png ├── k8s-chahua-12.png ├── k8s-chahua-13.png ├── k8s-chahua-14.png ├── k8s-chahua-15.png ├── k8s-chahua-16.png ├── k8s-chahua-17.png ├── k8s-chahua-18.png ├── k8s-chahua-19.png ├── k8s-chahua-2.png ├── k8s-chahua-20.png ├── k8s-chahua-3.png ├── k8s-chahua-4.png ├── k8s-chahua-5.png ├── k8s-chahua-6.png ├── k8s-chahua-7.png ├── k8s-chahua-8.png ├── k8s-chahua-9.png ├── k8s-ci-jenkins-pipeline.png ├── k8s-cron.png ├── k8s-dashboard-1.png ├── k8s-dashboard-2.png ├── k8s-dashboard-login.png ├── k8s-devops-ci-cd.png ├── k8s-efk-arch.png ├── k8s-error-1.png ├── k8s-https.png ├── k8s-iac.png ├── k8s-logging-arch.png ├── k8s-logging-arch1.png ├── k8s-logging-arch2.png ├── k8s-logging-arch3.png ├── k8s-nsenter-1.png ├── k8s-nsenter-2.png ├── k8s-nsenter-3.png ├── k8s-rbac-1.png ├── k8s-rbac.png ├── k8s-secure.png ├── k8s-v1.18.png ├── k8s_pod_03.png ├── k8s_pod_04.png ├── k8s_pod_05.png ├── k8syaml-1.png ├── k9s-dp-yaml.png ├── k9s-dp.png ├── k9s-logs.png ├── k9s-pod.png ├── kdevtmpfsi-1.png ├── kdevtmpfsi-2.png ├── kdevtmpfsi-top.png ├── kind-create-cluster.png ├── kind-docker.png ├── kind-list-image.png ├── kind-pods-all.png ├── kubecm-switch.gif ├── kubernetes-1-1.png ├── kubernetes-1-2.png ├── kubernetes-1-3.png ├── kubernetes-1.png ├── kubernetes-2-1.png ├── kubernetes-2-2.png ├── kubernetes-2-3.png ├── kubernetes-2.png ├── kuboard-stars.png ├── kuboard.demo.eip.work.png ├── kui-deployment.png ├── kui-pods.png ├── linux-memory-1.png ├── linux-memory-2.png ├── localhost-ssl.png ├── lxcfs-1.png ├── mkcert-ca.png ├── ncdu-img-1.png ├── ncdu-img-2.png ├── ncdu-img-3.png ├── ncdu-img-4.png ├── nginx-conf.png ├── nginx-home.png ├── nginx-lisner.png ├── nginx-location.png ├── nginx-login.png ├── nginx-realip-2.png ├── nginx-upstream.png ├── ngtop-1.png ├── nmon.jpg ├── nmon1.jpg ├── o-1.png ├── oom-1.png ├── permission-manager-2.png ├── permission-manager-3.png ├── permission-manager-4.png ├── pod-conditions.png ├── pod-exit-code-1.png ├── pod-exit-code-2.png ├── pod-name-pid-1.png ├── pod-name-pid-2.png ├── pod-phase.png ├── portaine-02.png ├── portainer-01.png ├── portainer-03.png ├── preview.png ├── probe_success.png ├── proc-pid.png ├── prometheus-11.png ├── prometheus-arch.png ├── prometheus-erro.png ├── prometheus-operator-load.png ├── rdr.png ├── redis-shake-2.png ├── rolling-update-1.png ├── rolling-update-2.png ├── rolling-update-3.png ├── rolling-update-4.png ├── rp_dashboard.png ├── runc-detail.png ├── sealos.jpeg ├── slabtop.jpg ├── slb-monitoring.png ├── stat-file-1.png ├── stat-file-2.png ├── stat-file-3.png ├── studying-1.jpg ├── syn.png ├── tcp-syn.jpg ├── thread-monitor.png ├── top.jpg ├── trivy-3.png ├── trivy-json.png ├── trivy-usage1.png ├── trivy-usage2.png ├── uml.png ├── v-1.png ├── v2-62608a79bf7293ecc94560e5542d6032_720w.jpg ├── v2-7b478d893ac3c197cd0e14ac182e5d82_720w.jpg ├── velero-1.png ├── velero-2.png ├── velero-3.png ├── velero-4.png ├── vpc-switch-1.png ├── yp_wx.png ├── zabbix-dashboard.png └── zs.png ├── interview ├── IT运维面试问题总结-Linux基础.md ├── IT运维面试问题总结-基础服务-磁盘管理-虚拟平台-系统管理.md ├── IT运维面试问题总结-数据库-监控-网络管理.md ├── IT运维面试问题总结-简述etcd-kubernetes-lvs-haproxy.md └── IT运维面试问题总结-运维工具-开源应用ceph-docker-apache-nginx等.md ├── istio ├── Istio-1.5部署-回归单体.md ├── Istio自动注入sidecar不成功解决方案.md ├── istio-Helm-安装.md └── 小米开源Istio-dashboard-Naftis服务.md ├── kubernetes ├── 3分钟部署生产级k8s集群.md ├── 5个维度对Kubernetes集群优化.md ├── AlertManager-钉钉报警.md ├── CKA真题.md ├── CNCF宣布安全更新框架TUF正式毕业.md ├── Calico问题排障.md ├── Descheduler实现k8s-pod二次调度.md ├── GrafanaTanka:比K8S-YAML声明更简洁.md ├── IBM开源图形终端Kui框架.md ├── Ingress-Nginx常用规则使用.md ├── Ingress-Nginx故障排除.md ├── Ingress-Nginx日志配置.md ├── K8S-Configmap和Secret热更新之Reloader.md ├── K8S-Dashboard-2.0-部署并使用-Ingress-Nginx-提供访问入口.md ├── K8S备份-恢复-迁移神器-Velero.md ├── K8S部署分布式调度任务Airflow.md ├── K8S问题排查:cgroup内存泄露问题.md ├── Kind:一个容器创建K8S开发集群.md ├── Kubeadm证书说明.md ├── Kubeconfig文件自动合并-K8S多集群切换.md ├── Kubelet状态更新机制.md ├── Kubernetes-Authenticate安装向导.md ├── Kubernetes-Pod钩子.md ├── Kubernetes-node资源预留.md ├── Kubernetes-pod-生命周期.md ├── Kubernetes-v1.15.3升级到v1.18.5心得.md ├── Kubernetes-v1.19.0-正式发布.md ├── Kubernetes1.20版本开始不推荐使用Docker-你知道吗.md ├── Kubernetes升级填坑指南一.md ├── Kubernetes实用技巧.md ├── Kubernetes是否值得学习吗.md ├── Kubernetes节点频繁NotReady-处理和防范.md ├── Kubernetes集群安全机制详解.md ├── Kuboard-Proxy.md ├── Nginx-Ingress-Controller工作原理.md ├── PromQL-常用命令.md ├── Prometheus-Blackbox简单监控.md ├── PrometheusAlert多渠道告警通知神器.md ├── calico介绍-原理与使用.md ├── etcd-v3备份与恢复.md ├── etcd-问题-调优-监控.md ├── etcd使用命令.md ├── etcd存储满了如何处理.md ├── gitlab-ci-cd-部署应用到k8s演示.md ├── grafana展示精美的nginx访问日志图表.md ├── grafana采集阿里云SLB监控信息.md ├── helm-v3-新的功能.md ├── ingress-nginx传递用户真实ip问题.md ├── k8s-Deployment-YAML名词解释.md ├── k8s-cluster-autoscaler-集群自动伸缩.md ├── k8s-dashboard-v2.0.0-beta6部署.md ├── k8s-ingress-nginx支持socket.io.md ├── k8s-node-NotReady后如何保证服务可用.md ├── k8s-pod-command与容器镜像cmd启动优先级详解.md ├── k8s-pod保护之PodDisruptionBudget.md ├── k8s-pod内抓包快速定位网络问题.md ├── k8s之Headless浅谈.md ├── k8s之kubeadm安装.md ├── k8s可视化监控WeaveScope部署.md ├── k8s故障排查指南-Orphaned-pod-found-but-volume-paths-are-still-present-on-disk.md ├── k8s滚动更新如何优雅停止pod.md ├── k8s蓝绿部署之-service-label.md ├── k8s金丝雀部署之-Istio.md ├── k8s集群内pod如何与本地网络打通实现debug.md ├── kubectl-备忘录.md ├── kubectl常用命令大全.md ├── kubectl高亮输出.md ├── kubelet-证书自动续期.md ├── kubelet原理解析六:垃圾回收.md ├── kubernetes-node节点主机名修改.md ├── kubernetes-pod为什么需要pause容器.md ├── kubernetes-pod应用性能分析工具-kubectl-flame.md ├── kubernetes-pod故障归类与排查方法.md ├── kubernetes-v1.17.0正式发布.md ├── kubernetes-v1.18.2二进制一键添加Node节点.md ├── kubernetes-v1.18.2二进制高可用部署.md ├── kubernetes-v1.18正式发布之功能预览.md ├── kubernetes-yaml生成器.md ├── kubernetes-故障解决心得一.md ├── kubernetes中利用LXCFS控制容器资源可见性.md ├── kubernetes临时存储需要限制吗.md ├── kubernetes之Cronjob.md ├── kubernetes之容器数据写满磁盘解决方法.md ├── kubernetes亲和与反亲和实用示例.md ├── kubernetes北极星指标.md ├── kubernetes必须掌握技能之RBAC.md ├── kubernetes故障排除指南-分析容器退出状态码.md ├── kubernetes无法查看pods日志问题.md ├── kubernetes私有集群LoadBalancer解决方案.md ├── kubernetes管理虚拟机之kubevirt.md ├── kubernetes终端管理神器.md ├── kubernetes面试题一.md ├── metrics-Server-v0-3-2版本安装.md ├── prometheus-operator手动部署.md ├── prometheus-如何自动发现kubernetes-metrics接口.md ├── 一文入门ETCD.md ├── 业务日志告警如何做.md ├── 从-Docker-到-Kubernetes-日志管理机制详解.md ├── 使用Kubernetes正确的处理用户请求.md ├── 使用k8s集群调度GPU.md ├── 动画版Kubernetes相关名词解释.md ├── 十道Kubernetes面试题.md ├── 升级到Kubernetes-v1.16须知API问题总结.md ├── 图文了解Kubernetes.md ├── 在Kubernetes中配置-Container-Capabilities.md ├── 基于Kubernetes的微服务图形化管理界面-Kuboard.md ├── 容器监控实践—Prometheus基本架构.md ├── 容器监控实践—Prometheus存储机制.md ├── 小白都会设置的k8s-rbac.md ├── 探索Kubernetes的ServiceAccounts.md ├── 无需特权在Kubernetes中构建镜像之Kaniko.md ├── 根据PID获取K8S-Pod名称-反之POD名称获取PID.md ├── 比Kubernetes-Dashboard更好用的K8S管理工具-Kuboard.md ├── 比官方K8S-Dashboard好用的桌面客户端:Lens.md ├── 浅谈k8s-QoS(服务质量等级).md ├── 生产环境中helm-v2升级v3版本遇到的疑难杂症.md ├── 白话Kubernetes基础概念.md ├── 白话kubernetes网络组件flannel.md ├── 终于有人把Docker讲清楚了万字详解.md ├── 聊聊resolv.conf-search和ndots配置.md ├── 解决k8s无法通过svc访问其他节点pod的问题.md ├── 谈谈k8s-pod-eviction机制.md ├── 谈谈kubernetes-Runtime.md ├── 阿里k8s事件通知服务.md ├── 阿里云ACK多个Service绑定单个SLB实践.md └── 高可用Prometheus问题集锦.md ├── letsencrypt ├── acme.sh.log ├── letsencrypt-dns-alias.md └── letsencrypt-dns-alias.py ├── ops ├── ElasticSearch-提高篇.md ├── Elasticsearch可视化管理工具.md ├── Elasticsearch查询.md ├── Gitlab-Docker-Compose-启动配置.md ├── Harbor-v2.0镜像回收那些事.md ├── Harbor多实例高可用共享存储后端搭建.md ├── Linux-Used内存到底哪里去了.md ├── Linux整个系统权限玩坏了怎么办.md ├── Linux服务器上有挖矿病毒kdevtmpfsi如何处理.md ├── Linux系统日志报Possible-SYN-flooding处理方法.md ├── NGINX上的限流.md ├── Nginx必须知道哪些事.md ├── Nginx服务指标监测.md ├── Nginx配置可视化管理.md ├── OpeVpn服务端与客户端部署.md ├── PostgreSQL常用SQL语句.md ├── Redis如何删除数量过万以上Key而不影响业务.md ├── Redis数据同步和数据迁移如何做.md ├── docker-compose部署ELK.md ├── elasticsearch-RESTful-API-常用操作.md ├── es6自定义索引模板.md ├── gitlab-ci-helm-k8s.md ├── gitlab-ci-搭建持续集成环境.md ├── harbor-v1.7.0-自动镜像回收.md ├── java分析神器-Arthas.md ├── kubernetes中部署zabbix.md ├── mysqldump导入备份数据到阿里云RDS会报错吗.md ├── mysql存储微信Emoji表情问题.md ├── nginx-基于客户端IP分析.md ├── nginx-流量统计分析.md ├── nginx之realip模块使用详解.md ├── nginx配置location与rewrite规则教程.md ├── sentry9.1.2部署.md ├── sentry历史数据清理.md ├── zabbix简单监控elk实践.md ├── zignis-plugin-read.md ├── 一份快速实用的tcpdump命令参考手册.md ├── 一千行MySQL学习笔记.md ├── 不同云厂商实现内网互通解决方案.md ├── 互联网中台技术简介.md ├── 使用Nextcloud3分钟搭建个人网盘.md ├── 分享Linux内存占用几个案例.md ├── 前端本地缓存概况之浏览器缓存策略.md ├── 基于Kubernetes的7大DevOps关键实践.md ├── 大公司为什么都有API网关-聊聊API网关的作用.md ├── 如何实现rsync多并发同步.md ├── 容器部署ELK7.10-适用于生产.md ├── 批量创建阿里云ECS并初始化.md ├── 搭建harbor私有镜像仓库一.md ├── 搭建harbor私有镜像仓库二.md ├── 构建高大上的MySQL监控平台.md ├── 监控域名HTTPS证书过期时间.md ├── 磁盘空间分析神器-ncdu.md ├── 缓存穿透-缓存击穿-缓存雪崩.md ├── 聊聊Harbor架构.md ├── 聊聊TPS-QPS-CPS概念和区别.md ├── 聊聊alpine系统一些操作.md ├── 详解Nginx-proxy_pass使用.md └── 还在担心写的一手烂SQL-送你4款工具.md ├── podman └── podman会取代docker吗.md ├── python3 ├── apache_analysis_log3.py ├── io_analysis3.py ├── io_difference_analysis3.py ├── nginx_analysis_log3.py ├── nginx_flow_analysis3.py ├── nginx_large_file_flow_analysis3.py ├── qiniu_delete3_single.py ├── qip3.py ├── query_china_ip.py └── varnish_analysis_log3.py ├── script ├── aliyun_batch_create_ecs.py └── k8s-deploy.py └── tools ├── Linux-IO分析小神器.md ├── Redis内存分析神器.md ├── 创建本地LocalHost-SSL证书.md ├── 实时Web日志分析器.md ├── 容器化配置生成神器.md ├── 提高阅读代码效率神器-Sourcetrail.md └── 春运开始了-该抢火车票了.md /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .idea/ 3 | -------------------------------------------------------------------------------- /docker/Dockerfile-最佳实践.md: -------------------------------------------------------------------------------- 1 | ## Dockerfile 简介 2 | Docker通过读取Dockerfile文件中的指令自动构建镜像。Dockerfile文件为一个文本文件,里面包含构建镜像所需的所有的命令。Dockerfile文件遵循特定的格式和指令集 3 | Docker镜像由只读层组成,每个层都代表一个Dockerfile指令。这些层是堆叠的,每个层都是前一层变化的增量 4 | 5 | ## 遵守下面原则 6 | - 使用小基础镜像(例:alpine) 7 | - RUN指令中最好把所有shell命令都放在一起执行,减少`Docker层` 8 | - `ADD` 或者 `COPY` 指令时一定要使用`--chown=node:node`(node:node 分别为用户组和附属组)并且`Dockerfile中一定要有node用户`,Dockerfile切换用户时不需要使用`chown`命令修改权限而导致镜像变大 9 | - 分阶段构建 10 | - 最好声明Docker镜像签名 11 | - 使用`.dockerignore`排除不需要加入Docker镜像目录或者文件 12 | - 不介意使用root用户 13 | 14 | ## 最佳实践 15 | ``` 16 | # stage 1 17 | FROM node:13.1.0-alpine as builder 18 | 19 | LABEL "name"="YP小站" 20 | LABEL version="node 13.1.0" 21 | 22 | # 修改alpine源为阿里源,安装tzdata包并修改为北京时间 23 | RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \ 24 | && apk --update add --no-cache tzdata \ 25 | && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 26 | 27 | # 声明环境变量 28 | ENV NODE_ENV development 29 | 30 | # 声明使用node用户 31 | USER node 32 | 33 | # 首次只加入package.json文件,package.json一般不变,这样就可以充分利用Docker Cache,节约安装node包时间 34 | COPY --chown=node:node package.json /app && npm ci 35 | 36 | # 声明镜像默认位置 37 | WORKDIR /app 38 | 39 | # 加入node代码 40 | ADD --chown=node:node . /app 41 | 42 | # build代码 43 | RUN npm run build \ 44 | && mv dist public 45 | 46 | # stage 2 47 | # 加入nginx镜像 48 | FROM nginx:alpine 49 | 50 | # 拷贝上阶段build静态文件 51 | COPY --from=builder /app/public /app/public 52 | 53 | # 拷贝nginx配置文件 54 | COPY nginx.conf /etc/nginx/conf.d/default.conf 55 | 56 | # 声明容器端口 57 | EXPOSE 8080 58 | 59 | # 启动命令 60 | CMD ["nginx","-g","daemon off;"] 61 | ``` -------------------------------------------------------------------------------- /docker/Docker最简单管理方法之Portainer.md: -------------------------------------------------------------------------------- 1 | ## Portainer 简介 2 | `Portainer`:是用于 Docker `轻量级`,`跨平台`,`开源管理` 的UI工具。Portainer 提供了Docker详细概述,并允许您通过基于Web 简单仪表盘管理容器、镜像、网络和卷。 3 | 4 | ## Portainer 安装 5 | ```bash 6 | # 挂载 docker.sock 到Portainer容器中 7 | $ docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer 8 | ``` 9 | 10 | ## 使用方法 11 | - 访问 http://IP_Address:9000/ UI界面,设置管理员账号,如果容器启动后,`5分钟之内`没有设置管理员密码就会自动停止容器 12 | 13 | ![](/img/portainer-01.png) 14 | 15 | 16 | - 选择连接本地容器,容器启动时需要把 `/var/run/docker.sock` 挂载到容器中 17 | 18 | ![](/img/portaine-02.png) 19 | 20 | 21 | - Portainer 概览 22 | 23 | ![](/img/portainer-03.png) 24 | -------------------------------------------------------------------------------- /docker/docker-容器日志清理方案.md: -------------------------------------------------------------------------------- 1 | #### 一、docker 容器日志清理方案 2 | 3 | ``` 4 | # 设置一个容器服务的日志大小上限 5 | # 在启动容器的时候增加一个参数设置该容器的日志大小,及日志驱动 6 | 7 | --log-driver json-file #日志驱动 8 | --log-opt max-size=[0-9+][k|m|g] #文件的大小 9 | --log-opt max-file=[0-9+] #文件数量 10 | ``` 11 | 12 | ``` 13 | # 全局设置 14 | 编辑文件/etc/docker/daemon.json, 增加以下日志的配置 15 | 16 | "log-driver":"json-file", 17 | "log-opts": {"max-size":"500m", "max-file":"3"} 18 | 19 | max-size=500m,意味着一个容器日志大小上限是500M, 20 | max-file=3,意味着一个容器有三个日志,分别是id+.json、id+1.json、id+2.json。 21 | ``` 22 | 23 | ``` 24 | # 然后重启docker守护进程 25 | 26 | systemctl daemon-reload 27 | systemctl restart docker 28 | 29 | # 注意:设置的日志大小,只对新建的容器有效。 30 | ``` -------------------------------------------------------------------------------- /docker/docker与Containerd使用区别.md: -------------------------------------------------------------------------------- 1 | ## 前言 2 | 3 | `Kubernetes` 在 `1.24` 版本里弃用并移除 `docker shim`,这导致 `1.24` 版本开始不在支持 `docker` 运行时。大部分用户会选择使用 `Containerd` 做为Kubernetes运行时。 4 | 5 | > PS: `docker-ce` 底层就是 `Containerd` 6 | 7 | 使用 Containerd 时,kubelet 不需要通过 `docker shim` 调用,直接通过 `Container Runtime Interface (CRI)` 与容器运行时交互。减少调用层,并且也减少很多bug产生。 8 | 9 | 下面来讲讲 docker 与 Containerd 使用有那些方面不同。 10 | 11 | ## Docker 和 Containerd 常用命令比较 12 | 13 | 镜像相关操作 | Docker | Containerd 14 | --|--|-- 15 | 显示本地镜像列表 | docker images | crictl images 16 | 下载镜像 | docker pull | crictl pull 17 | 上传镜像 | docker push | 无 18 | 删除本地镜像 | docker rmi | crictl rmi 19 | 查看镜像详情 | docker inspect IMAGE-ID | crictl inspect IMAGE-ID 20 | 21 | 容器相关操作 | Docker | Containerd 22 | --|--|-- 23 | 显示容器列表 | docker ps | crictl ps 24 | 创建容器 | docker create | crictl create 25 | 启动容器 | docker start | crictl start 26 | 停止容器 | docker stop | crictl stop 27 | 删除容器 | docker rm | crictl rm 28 | 查看容器详情 | docker inspect | crictl inspect 29 | attach | docker attach | crictl attach 30 | exec | docker exec | crictl exec 31 | logs | docker logs | crictl logs 32 | stats | docker stats | crictl stats 33 | 34 | Pods相关操作 | Docker | Containerd 35 | --|--|-- 36 | 显示POD列表 | 无 | crictl pods 37 | 查看POD详情 | 无 | crictl inspectp 38 | 运行POD | 无 | crictl runp 39 | 停止POD | 无 | crictl stopp 40 | 41 | ## 容器日志和相关参数配置差异 42 | 43 | 功能 | Docker | Containerd 44 | --|--|-- 45 | 存储路径 | 如果 Docker 作为 K8S 容器运行时,容器日志的落盘将由 docker 来完成,保存在类似`/var/lib/docker/containers/$CONTAINERID` 目录下。Kubelet 会在 `/var/log/pods 和 /var/log/containers` 下面建立软链接,指向 `/var/lib/docker/containers/$CONTAINERID` 该目录下的容器日志文件。 | 如果 Containerd 作为 K8S 容器运行时, 容器日志的落盘由 Kubelet 来完成,保存至 `/var/log/pods/$CONTAINER_NAME` 目录下,同时在 `/var/log/containers` 目录下创建软链接,指向日志文件。 46 | 配置参数 | 在 docker 配置文件中指定:`"log-driver": "json-file", "log-opts": {"max-size": "100m","max-file": "5"}` | `方法一`:在 kubelet 参数中指定:`--container-log-max-files=5 --container-log-max-size="100Mi"` ;`方法二`:在 KubeletConfiguration 中指定:`"containerLogMaxSize": "100Mi", "containerLogMaxFiles": 5` 47 | 容器日志保存到数据盘 | 把数据盘挂载到 "data-root"(缺省是 `/var/lib/docker`)即可。| 创建一个软链接 `/var/log/pods` 指向数据盘挂载点下的某个目录 或者 通过挂载目录,把 `/var/log/pods` 目录挂载到数据盘上。 48 | 49 | ## CNI 网络 50 | 51 | 功能 | Docker | Containerd 52 | --|--|-- 53 | 谁负责调用 CNI | Kubelet 内部的 docker-shim | Containerd 内置的 cri-plugin(containerd 1.1 以后) 54 | 如何配置 CNI | Kubelet 参数 `--cni-bin-dir` 和 `--cni-conf-dir` | Containerd 配置文件(toml): `[plugins.cri.cni]` `bin_dir = "/opt/cni/bin"` `conf_dir = "/etc/cni/net.d"` 55 | 56 | ## 参考链接 57 | 58 | - https://cloud.tencent.com/document/product/457/35747 -------------------------------------------------------------------------------- /docker/如何修改容器时间而不改变宿主机时间.md: -------------------------------------------------------------------------------- 1 | ## 需求 2 | 有时候需要测试业务程序,把时间指定到一个特定的时间去测试,如何在`修改容器时间`而不影响`宿主机时间`? 3 | 4 | ## 解决方法 5 | 6 | GitHub 有一个开源的 `libfaketime` 项目,能解决这个问题。目前该项目有 `1.3k` Star。 7 | 8 | ## 项目地址 9 | 10 | - https://github.com/wolfcw/libfaketime 11 | 12 | ## 支持平台 13 | - Linux 14 | - MacOs 15 | 16 | ## 安装 17 | > `注意`: 必须 `sudo make install`,否则 `libfaketime.dylib.1` 没有运行权限,默认安装到 `/usr/local/bin/faketime` 和 `/usr/local/lib/faketime/` 18 | 19 | ```bash 20 | # 下载项目 21 | $ git clone https://github.com/wolfcw/libfaketime.git 22 | 23 | # 进入项目 24 | $ cd libfaketime 25 | 26 | # 编译安装 27 | $ sudo make && sudo make install 28 | ``` 29 | 30 | ## 使用 31 | 32 | - 指定动态链接库使用 33 | 34 | ```bash 35 | # 正常时间 36 | $ date 37 | 38 | Mon Mar 26 21:01:46 CST 2019 39 | 40 | # 设置成三天前时间 41 | $ LD_PRELOAD=/path/to/libfaketime.so.1 FAKETIME="-3d" date 42 | 43 | Sun Mar 23 21:01:48 CST 2019 44 | 45 | # 可以通过设置临时 LD_PRELOAD 环境变量 46 | $ export LD_PRELOAD=/path/to/libfaketime.so.1 47 | 48 | # 可以加入到 ~/.bashrc 目录中 49 | $ echo "LD_PRELOAD=/path/to/libfaketime.so.1" >> ~/.bashrc 50 | 51 | # Linux 系统,可以加入到 ld.so.conf 配置中 52 | $ echo "/path/to/libfaketime.so.1" >> /etc/ld.so.conf.d/local.conf 53 | 54 | # 使 local.conf 配置生效 55 | $ ldconfig 56 | ``` 57 | 58 | - faketime 命令 59 | 60 | ```bash 61 | # 正常时间 62 | $ date 63 | Mon Mar 26 21:04:42 CST 2019 64 | 65 | # 修改后时间 66 | $ faketime '2019-03-27 21:04:52' date 67 | 68 | Tue Mar 27 21:04:52 CST 2019 69 | ``` 70 | 71 | - 功能非常强大。更多用法可参考 `GitHub` 上的说明 `https://github.com/wolfcw/libfaketime` -------------------------------------------------------------------------------- /docker/比docker-stats命令好用工具ctop.md: -------------------------------------------------------------------------------- 1 | ## 什么是 ctop 2 | 3 | `ctop`:为多个容器提供了一个简洁凝练的实时指标概览。它是一个类似 `top` 的显示界面。 4 | 5 | ## ctop 展示如下容器指标 6 | - CPU 利用率 7 | 8 | - 内存利用率 9 | - CID 容器ID 10 | - 网络发送(TX - 服务器发送) 11 | - 网络接收(RX - 服务器接收) 12 | 13 | ## ctop 运行展示 14 | ![](/img/ctop.png) 15 | 16 | ## 安装 17 | - Linux 18 | 19 | ```bash 20 | $ sudo wget https://github.com/bcicen/ctop/releases/download/v0.7.2/ctop-0.7.2-linux-amd64 -O /usr/local/bin/ctop 21 | $ sudo chmod +x /usr/local/bin/ctop 22 | ``` 23 | 24 | - Mac OS X 25 | 26 | ```bash 27 | $ brew install ctop 28 | ``` 29 | 30 | or 31 | 32 | ```bash 33 | $ sudo curl -Lo /usr/local/bin/ctop https://github.com/bcicen/ctop/releases/download/v0.7.2/ctop-0.7.2-darwin-amd64 34 | $ sudo chmod +x /usr/local/bin/ctop 35 | ``` 36 | 37 | - Docker 38 | 39 | ```bash 40 | $ docker run --rm -ti \ 41 | --name=ctop \ 42 | --volume /var/run/docker.sock:/var/run/docker.sock:ro \ 43 | quay.io/vektorlab/ctop:latest 44 | ``` 45 | 46 | ## 键绑定 47 | 48 | 键 | 解释 49 | ---|--- 50 | \ | 打开容器菜单 51 | a | 切换所有(运行和非运行)容器的显示 52 | f | 过滤显示的容器(esc 清除过滤) 53 | H | 切换ctop标头 54 | h | 帮助 55 | s | 选择容器排序字段 56 | r | 反向容器排序顺序 57 | o | 打开单一视图 58 | l | 查看容器日志(t 打开切换时间戳) 59 | e | 退出 Shell 60 | S | 保存当前配置文件 61 | q | 退出 ctop 62 | 63 | ## 参考链接 64 | - https://github.com/bcicen/ctop/blob/master/README.md 65 | 66 | ## 项目地址 67 | - https://github.com/bcicen/ctop -------------------------------------------------------------------------------- /docker/解密Docker挂载文件-宿主机修改后容器里文件没有修改.md: -------------------------------------------------------------------------------- 1 | ## 问题 2 | 3 | 使用 `Docker Volumes` 时,有时需要挂载一个宿主机目录或者文件,提供数据可持续或者容器内部服务配置文件。 4 | 5 | 使用命令 `docker run -it --rm -v /root/test.txt:/root/test.txt debian:10 bash` 挂载文件(test.txt 默认权限 644)时,通过 `vim` 修改宿主 `test.txt` 文件,但是容器中 `test.txt` 没有修改。这是为什么? 6 | 7 | 8 | ## 问题分析 9 | 10 | Docker 中,mount volume 的原理是借用了 `Linux Namespace` 中的 `Mount NameSpace`,隔离系统中不同进程的挂载点视图,实际文件是没有变化。比如上面的例子,在container中,bash 实际就是一个运行在宿主机上的进程,被Docker用Linux分别隔离了 `Mount Namespace`、`UTS Namespace`、`IPC Namespace`、`PID Namespace`、`Network Namespace`和`User Namespace`,使得它看上去好像运行在了一个`独立的`、`相对隔离的`系统上,但实际它的一切资源都是宿主机在不同Namespace中的一个投影,文件也不例外。 11 | 12 | 为什么宿主机上修改 `test.txt` 文件,而容器中 `test.txt` 文件没有变化? 13 | 14 | Linux中,`证明文件是否相同的根本途径是`,判断其 `inode`,如果两个文件的inode相同,两个文件必定为同一文件,从而两个文件的内容也必然相同。 15 | 16 | ## 验证问题 17 | 18 | 1、在宿主机上创建一个 `/root/test.txt` 文件,使用命令 `stat` 查看 `inode` 值,如下图: 19 | 20 | ![](../img/stat-file-1.png) 21 | 22 | 2、使用命令 `docker run -it --rm -v /root/test.txt:/root/test.txt debian:10 bash` 临时启动一个容器,把宿主机文件 `/root/test.txt` 挂载到容器中。 23 | 24 | 3、另开一个终端,使用 `vi` 命令修改 /root/test.txt 文件,编辑完后保存,再次使用 stat 命令查看 /root/test.txt 文件 inode 值。从下图已经发现,inode 值已经改变。 25 | 26 | ![](../img/stat-file-2.png) 27 | 28 | 4、登陆容器查看 `/root/test.txt` 文件 inode 值。如下图,inode 值还是 vi 修改前的值。而不是修改后的值。这也就解释为什么宿主机上修改了文件而容器中文件没有更新的原因。因为容器与宿主机使用的不是同一个文件。 29 | 30 | ![](../img/stat-file-3.png) 31 | 32 | ## 简述 vi 或者 vim 修改文件过程 33 | 34 | Linux 默认情况下,vim为了防止在你修改文件的过程中,由于磁盘或者系统出现问题而导致当前被修改的文件的损坏,它做了类似如下逻辑: 35 | 36 | - 1、复制出一个需要修改文件的副本,命名为在原来文件的基础上增加 `".swp"` 后缀以及 `"."` 前缀。 37 | - 2、修改内容保存到有 `.swp` 后缀的文件,并 `flush` 到磁盘 38 | - 3、执行 `:wq` 就会交换原文件和 `swp` 文件的名称 39 | - 4、删除临时 `swp` 文件 40 | 41 | 从上面可以看出,原来的文件已经被删除,但是容器还是会一直记录以前的文件,只有当 `restart` 容器时,容器才会重新读取新的文件。宿主机上修改的内容才会更新。 42 | 43 | ## 解决方法 44 | 45 | ### 方法一 46 | 47 | 使用 `echo` 修改文件,而不是使用 `vim` 或者 `vi`。 48 | 49 | ### 方法二 50 | 51 | 修改 vim 配置。执行 vim 命令,输入 `:scriptnames` 查看 vim 配置文件路径,这边配置文件路径是 `/etc/vimrc` ,在配置文件最后添加如下两行。 52 | 53 | ```bash 54 | set backup 55 | set backupcopy=yes 56 | ``` 57 | 58 | 这样可以解决问题,不过也有一个很大的副作用,那就是每次用vim编辑文件保存之后,vim会生成一个类似该被修改文件,但末尾增加了一个"~"后缀,用以保存修改之前的文件内容。`此方法不推荐`。 59 | 60 | ### 方法三 61 | 62 | 修改文件权限,文件默认权限是 `644`,把权限修改为 `666`。修改完权限后,再次通过 vim 修改并保存后,原文件的 inode 不会发生变化。(`推荐此方法`) 63 | 64 | ```bsh 65 | $ chmod 666 /root/test.txt 66 | ``` 67 | 68 | ### 方法四 69 | 70 | 挂载`目录`,不要挂载`文件`。挂载目录不会出现宿主机文件更新,而容器中文件没有更新。(`推荐此方法`) 71 | 72 | ## 参考链接 73 | 74 | - https://forums.docker.com/t/modify-a-file-which-mount-as-a-data-volume-but-it-didnt-change-in-container/2813/13 75 | - https://www.cnblogs.com/lylex/p/12781007.html -------------------------------------------------------------------------------- /img/0001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/0001.png -------------------------------------------------------------------------------- /img/0002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/0002.png -------------------------------------------------------------------------------- /img/0003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/0003.png -------------------------------------------------------------------------------- /img/0004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/0004.png -------------------------------------------------------------------------------- /img/0005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/0005.png -------------------------------------------------------------------------------- /img/0006.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/0006.png -------------------------------------------------------------------------------- /img/0806e2fb37bf7b39ac53f83018a4f47e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/0806e2fb37bf7b39ac53f83018a4f47e.png -------------------------------------------------------------------------------- /img/0bd4bdab-2b42-4040-a245-66b9530aab8c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/0bd4bdab-2b42-4040-a245-66b9530aab8c.jpg -------------------------------------------------------------------------------- /img/0d0d1f5e0f7d261d7d4969f30538d794.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/0d0d1f5e0f7d261d7d4969f30538d794.png -------------------------------------------------------------------------------- /img/0fd57872320d46e7a2dd407e429cb181.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/0fd57872320d46e7a2dd407e429cb181.jpeg -------------------------------------------------------------------------------- /img/10417188-4188919daf4002e5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/10417188-4188919daf4002e5.png -------------------------------------------------------------------------------- /img/10417188-7aac14c237a0905c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/10417188-7aac14c237a0905c.png -------------------------------------------------------------------------------- /img/10417188-f14c03a7e47893cd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/10417188-f14c03a7e47893cd.png -------------------------------------------------------------------------------- /img/10417188-fb41c9cdae90780b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/10417188-fb41c9cdae90780b.png -------------------------------------------------------------------------------- /img/11553600-0a318a22dfc65ae9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/11553600-0a318a22dfc65ae9.png -------------------------------------------------------------------------------- /img/11553600-3f4af0caebb34065.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/11553600-3f4af0caebb34065.png -------------------------------------------------------------------------------- /img/11553600-72221ff13b8324d9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/11553600-72221ff13b8324d9.png -------------------------------------------------------------------------------- /img/11553600-7aa919bf99956101.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/11553600-7aa919bf99956101.png -------------------------------------------------------------------------------- /img/11553600-a7253fbdcedd88dd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/11553600-a7253fbdcedd88dd.png -------------------------------------------------------------------------------- /img/11553600-bb4d5bd2fa186c0f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/11553600-bb4d5bd2fa186c0f.png -------------------------------------------------------------------------------- /img/11553600-d3acae7e6c8966e1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/11553600-d3acae7e6c8966e1.png -------------------------------------------------------------------------------- /img/11553600-dfb06006250df8da.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/11553600-dfb06006250df8da.png -------------------------------------------------------------------------------- /img/11553600-fde662554a54e915.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/11553600-fde662554a54e915.png -------------------------------------------------------------------------------- /img/13523736-ad5203365295fc69.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/13523736-ad5203365295fc69.png -------------------------------------------------------------------------------- /img/1394b5e8-0d2f-4ba5-87cf-73b87424e700.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/1394b5e8-0d2f-4ba5-87cf-73b87424e700.png -------------------------------------------------------------------------------- /img/15519803-0f0dcb3dfba4ce8c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/15519803-0f0dcb3dfba4ce8c.png -------------------------------------------------------------------------------- /img/15519803-376775e806efbaf4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/15519803-376775e806efbaf4.png -------------------------------------------------------------------------------- /img/15519803-5162ccd8a8b96bd6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/15519803-5162ccd8a8b96bd6.png -------------------------------------------------------------------------------- /img/15519803-9ab184ab5b8075f1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/15519803-9ab184ab5b8075f1.png -------------------------------------------------------------------------------- /img/15519803-dd2c430406b8505a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/15519803-dd2c430406b8505a.png -------------------------------------------------------------------------------- /img/15519803-f777eb6a200013cb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/15519803-f777eb6a200013cb.png -------------------------------------------------------------------------------- /img/1558062783657-92e4fc45-38a8-4c6e-84c0-1a7a890ef07c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/1558062783657-92e4fc45-38a8-4c6e-84c0-1a7a890ef07c.png -------------------------------------------------------------------------------- /img/1558439296918-b969ce9c-32a1-4500-bb77-ae0496146822.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/1558439296918-b969ce9c-32a1-4500-bb77-ae0496146822.png -------------------------------------------------------------------------------- /img/1558439341166-a01890a7-d933-4292-b1b1-2536d27ef52c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/1558439341166-a01890a7-d933-4292-b1b1-2536d27ef52c.png -------------------------------------------------------------------------------- /img/1558489929900-b9afc3e5-c183-4622-93ca-a2c2a49b7a17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/1558489929900-b9afc3e5-c183-4622-93ca-a2c2a49b7a17.png -------------------------------------------------------------------------------- /img/15942217205747.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/15942217205747.jpg -------------------------------------------------------------------------------- /img/15942217704692.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/15942217704692.jpg -------------------------------------------------------------------------------- /img/16f3ba512f6f7932.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/16f3ba512f6f7932.png -------------------------------------------------------------------------------- /img/16f3ba51346e2058.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/16f3ba51346e2058.png -------------------------------------------------------------------------------- /img/16f3ba5134848f66.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/16f3ba5134848f66.png -------------------------------------------------------------------------------- /img/16f3ba51352a5f23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/16f3ba51352a5f23.png -------------------------------------------------------------------------------- /img/16f3ba513549e25c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/16f3ba513549e25c.png -------------------------------------------------------------------------------- /img/16f3ba517517c309.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/16f3ba517517c309.png -------------------------------------------------------------------------------- /img/16f3ba51f3974432.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/16f3ba51f3974432.png -------------------------------------------------------------------------------- /img/16f3ba525cc83dfe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/16f3ba525cc83dfe.png -------------------------------------------------------------------------------- /img/16f3ba52a5452082.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/16f3ba52a5452082.png -------------------------------------------------------------------------------- /img/16f3ba532c16073b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/16f3ba532c16073b.png -------------------------------------------------------------------------------- /img/16f3ba5424dd8f13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/16f3ba5424dd8f13.png -------------------------------------------------------------------------------- /img/18885539-d5d52769d1469bfe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/18885539-d5d52769d1469bfe.png -------------------------------------------------------------------------------- /img/1889435-18a0464e11887334.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/1889435-18a0464e11887334.jpg -------------------------------------------------------------------------------- /img/1889435-999d351beafab3c6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/1889435-999d351beafab3c6.jpg -------------------------------------------------------------------------------- /img/1889435-a9827a7373dbb2df.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/1889435-a9827a7373dbb2df.jpg -------------------------------------------------------------------------------- /img/1889435-af09c18b8bbeb5fc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/1889435-af09c18b8bbeb5fc.jpg -------------------------------------------------------------------------------- /img/1889435-b3999fc79b19157f.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/1889435-b3999fc79b19157f.jpg -------------------------------------------------------------------------------- /img/1889435-c429ec61d5a88cf9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/1889435-c429ec61d5a88cf9.jpg -------------------------------------------------------------------------------- /img/1889435-f534f0674cfc87f2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/1889435-f534f0674cfc87f2.jpg -------------------------------------------------------------------------------- /img/1967b016-6b0e-4876-98b7-b5c8228c4654.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/1967b016-6b0e-4876-98b7-b5c8228c4654.jpg -------------------------------------------------------------------------------- /img/19895418-0f820d7b1324d4d5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/19895418-0f820d7b1324d4d5.png -------------------------------------------------------------------------------- /img/19895418-122efbeed6fc2c66.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/19895418-122efbeed6fc2c66.jpeg -------------------------------------------------------------------------------- /img/19895418-163d1c853ebaa281.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/19895418-163d1c853ebaa281.jpeg -------------------------------------------------------------------------------- /img/19895418-1bfc620d700a2eff.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/19895418-1bfc620d700a2eff.jpeg -------------------------------------------------------------------------------- /img/19895418-2a43ae2fc81719ee.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/19895418-2a43ae2fc81719ee.jpeg -------------------------------------------------------------------------------- /img/19895418-356ad515e6dc7cb3.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/19895418-356ad515e6dc7cb3.jpeg -------------------------------------------------------------------------------- /img/19895418-3cbee1b5956e86d0.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/19895418-3cbee1b5956e86d0.jpeg -------------------------------------------------------------------------------- /img/19895418-432443d65800ac60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/19895418-432443d65800ac60.png -------------------------------------------------------------------------------- /img/19895418-4440b9f5f65ac072.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/19895418-4440b9f5f65ac072.jpeg -------------------------------------------------------------------------------- /img/19895418-4d9152c2f111f45b.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/19895418-4d9152c2f111f45b.jpeg -------------------------------------------------------------------------------- /img/19895418-6f8e472245ffd2d2.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/19895418-6f8e472245ffd2d2.jpeg -------------------------------------------------------------------------------- /img/19895418-8b5df8099a9361c7.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/19895418-8b5df8099a9361c7.jpeg -------------------------------------------------------------------------------- /img/19895418-92abb79a2787fde3.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/19895418-92abb79a2787fde3.jpeg -------------------------------------------------------------------------------- /img/19895418-9da50f56a2c74436.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/19895418-9da50f56a2c74436.jpeg -------------------------------------------------------------------------------- /img/19895418-c776f5804b23349d.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/19895418-c776f5804b23349d.jpeg -------------------------------------------------------------------------------- /img/19895418-e67793bcbd4b426d.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/19895418-e67793bcbd4b426d.jpeg -------------------------------------------------------------------------------- /img/19895418-eee3acabe83b2a09.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/19895418-eee3acabe83b2a09.jpeg -------------------------------------------------------------------------------- /img/19895418-f52524b7702c1805.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/19895418-f52524b7702c1805.jpeg -------------------------------------------------------------------------------- /img/19895418-f7bbce5099d97e6f.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/19895418-f7bbce5099d97e6f.jpeg -------------------------------------------------------------------------------- /img/1_6qQCQLV8cIBkMY7K4GKrig.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/1_6qQCQLV8cIBkMY7K4GKrig.png -------------------------------------------------------------------------------- /img/1_CrG3p2FUcjiHhwLyGQzQ2Q.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/1_CrG3p2FUcjiHhwLyGQzQ2Q.png -------------------------------------------------------------------------------- /img/1_F2wfrW5zO6Y36Yr_jL014g.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/1_F2wfrW5zO6Y36Yr_jL014g.png -------------------------------------------------------------------------------- /img/1_FEufKCJPNrCwkrJkwtjQWQ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/1_FEufKCJPNrCwkrJkwtjQWQ.png -------------------------------------------------------------------------------- /img/1_QDhBk9xFa77T4n3-5lHIsg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/1_QDhBk9xFa77T4n3-5lHIsg.png -------------------------------------------------------------------------------- /img/1_c80mIDN0Wz7b2xb5Qfxerw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/1_c80mIDN0Wz7b2xb5Qfxerw.png -------------------------------------------------------------------------------- /img/1_eHVk7p4I2LuSnVwvYaHbyw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/1_eHVk7p4I2LuSnVwvYaHbyw.png -------------------------------------------------------------------------------- /img/1_lus49PaFI90rVMd23fV86A.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/1_lus49PaFI90rVMd23fV86A.png -------------------------------------------------------------------------------- /img/1_oAF5BE2RplGHtGmcC0L5Ew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/1_oAF5BE2RplGHtGmcC0L5Ew.png -------------------------------------------------------------------------------- /img/1_qgogo7I03e5kyNWKVWtFYg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/1_qgogo7I03e5kyNWKVWtFYg.png -------------------------------------------------------------------------------- /img/1_sHmUG1htz-brFTGPz3HXXQ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/1_sHmUG1htz-brFTGPz3HXXQ.png -------------------------------------------------------------------------------- /img/1_xYujRQjcpd-mQbNTwEbukA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/1_xYujRQjcpd-mQbNTwEbukA.png -------------------------------------------------------------------------------- /img/1a19a346-e28d-481a-8cbc-6b73ca0a3038.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/1a19a346-e28d-481a-8cbc-6b73ca0a3038.png -------------------------------------------------------------------------------- /img/1fac1158-c452-4d5c-8989-f3161c9e4527.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/1fac1158-c452-4d5c-8989-f3161c9e4527.jpg -------------------------------------------------------------------------------- /img/20012016-35e3d1e35440b1c2.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/20012016-35e3d1e35440b1c2.jpeg -------------------------------------------------------------------------------- /img/20012016-52ecc1118e65d90d.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/20012016-52ecc1118e65d90d.jpeg -------------------------------------------------------------------------------- /img/20012016-a542eb5e53e3383a.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/20012016-a542eb5e53e3383a.jpeg -------------------------------------------------------------------------------- /img/20012016-d233be057a1dc1fb.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/20012016-d233be057a1dc1fb.jpeg -------------------------------------------------------------------------------- /img/20012016-f4e4c9beef635a91.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/20012016-f4e4c9beef635a91.jpeg -------------------------------------------------------------------------------- /img/20012016-fd0b05b4c25fca4c.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/20012016-fd0b05b4c25fca4c.jpeg -------------------------------------------------------------------------------- /img/2019-12-11-11-04-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/2019-12-11-11-04-03.png -------------------------------------------------------------------------------- /img/2019-12-11-11-19-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/2019-12-11-11-19-11.png -------------------------------------------------------------------------------- /img/2019-12-11-11-26-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/2019-12-11-11-26-10.png -------------------------------------------------------------------------------- /img/2019-12-11-11-33-52.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/2019-12-11-11-33-52.png -------------------------------------------------------------------------------- /img/2019-12-11-17-13-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/2019-12-11-17-13-11.png -------------------------------------------------------------------------------- /img/20200608132630839.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/20200608132630839.jpeg -------------------------------------------------------------------------------- /img/20200608133126879.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/20200608133126879.jpeg -------------------------------------------------------------------------------- /img/20200608133445261.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/20200608133445261.jpeg -------------------------------------------------------------------------------- /img/20200608133514483.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/20200608133514483.jpeg -------------------------------------------------------------------------------- /img/20289b7a-a47b-46f2-beda-2f6fef8a44ba.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/20289b7a-a47b-46f2-beda-2f6fef8a44ba.png -------------------------------------------------------------------------------- /img/2587ac57655cacc9e063082a3be4c714.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/2587ac57655cacc9e063082a3be4c714.png -------------------------------------------------------------------------------- /img/295529ab-e033-4893-9b0a-cb0a3e698b35.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/295529ab-e033-4893-9b0a-cb0a3e698b35.jpg -------------------------------------------------------------------------------- /img/2e415b33-c061-4dec-8433-777ba4edcb8c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/2e415b33-c061-4dec-8433-777ba4edcb8c.jpg -------------------------------------------------------------------------------- /img/335c3cbc-a4cf-4e22-b492-b3b6f7c123d5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/335c3cbc-a4cf-4e22-b492-b3b6f7c123d5.jpg -------------------------------------------------------------------------------- /img/36ada26f-9f2a-47c8-a021-5f6044007a67.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/36ada26f-9f2a-47c8-a021-5f6044007a67.png -------------------------------------------------------------------------------- /img/3944b217-12ba-48b3-8e7b-f3ff12d5d40b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/3944b217-12ba-48b3-8e7b-f3ff12d5d40b.png -------------------------------------------------------------------------------- /img/3b59cbcd-05c4-46ed-a129-2564472d8fd1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/3b59cbcd-05c4-46ed-a129-2564472d8fd1.jpg -------------------------------------------------------------------------------- /img/4134fdb2-c8ee-468e-926b-33406d9f8651.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/4134fdb2-c8ee-468e-926b-33406d9f8651.png -------------------------------------------------------------------------------- /img/4394dbe0-79c0-4802-b23b-0d507b559ad4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/4394dbe0-79c0-4802-b23b-0d507b559ad4.png -------------------------------------------------------------------------------- /img/43d336bb62c35dc91cc35b88109a9148.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/43d336bb62c35dc91cc35b88109a9148.png -------------------------------------------------------------------------------- /img/467d1419-1757-4130-810c-d00fe0b1169b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/467d1419-1757-4130-810c-d00fe0b1169b.jpg -------------------------------------------------------------------------------- /img/4762cd674ddf15f8e74381565aca2b4f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/4762cd674ddf15f8e74381565aca2b4f.png -------------------------------------------------------------------------------- /img/4f58b34c-d853-4ff5-bcdc-1d2b01ba32be.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/4f58b34c-d853-4ff5-bcdc-1d2b01ba32be.png -------------------------------------------------------------------------------- /img/4f7d7345-f275-40b4-88a7-c2dcd7895a13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/4f7d7345-f275-40b4-88a7-c2dcd7895a13.png -------------------------------------------------------------------------------- /img/56b44830-006e-4d9a-be5b-50e92f5c08bd.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/56b44830-006e-4d9a-be5b-50e92f5c08bd.jpg -------------------------------------------------------------------------------- /img/596f6d60-2e37-460a-8da5-9dfd07b7170d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/596f6d60-2e37-460a-8da5-9dfd07b7170d.jpg -------------------------------------------------------------------------------- /img/5a5ea166-f9df-49d1-ab79-02a925c11322.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/5a5ea166-f9df-49d1-ab79-02a925c11322.jpg -------------------------------------------------------------------------------- /img/64aed493-7c19-417b-8f08-79ee57258bcb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/64aed493-7c19-417b-8f08-79ee57258bcb.jpg -------------------------------------------------------------------------------- /img/6688932-0a729ba489cc3e8e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/6688932-0a729ba489cc3e8e.png -------------------------------------------------------------------------------- /img/6e57234f-cf0f-4b36-bea7-f98786bd7595.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/6e57234f-cf0f-4b36-bea7-f98786bd7595.png -------------------------------------------------------------------------------- /img/70d1ff3e-551b-42fd-8f7b-cfb82a07aabb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/70d1ff3e-551b-42fd-8f7b-cfb82a07aabb.png -------------------------------------------------------------------------------- /img/712e2738-7224-4333-8673-b4dabdf39f64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/712e2738-7224-4333-8673-b4dabdf39f64.png -------------------------------------------------------------------------------- /img/73631734-1d5e-4af7-88a6-25eb3162e375.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/73631734-1d5e-4af7-88a6-25eb3162e375.png -------------------------------------------------------------------------------- /img/768944cd150abe5628f7caef098d638e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/768944cd150abe5628f7caef098d638e.png -------------------------------------------------------------------------------- /img/76e844e7-5f04-475a-8fc9-004194e89180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/76e844e7-5f04-475a-8fc9-004194e89180.png -------------------------------------------------------------------------------- /img/84f4f78b-b7fc-48ee-8fb0-e9fe57e8d3b6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/84f4f78b-b7fc-48ee-8fb0-e9fe57e8d3b6.jpg -------------------------------------------------------------------------------- /img/8bc46409f5b244e289b7bc31305e1514.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/8bc46409f5b244e289b7bc31305e1514.jpeg -------------------------------------------------------------------------------- /img/8ccf5b9fb07c5f6857bce77c0af73686.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/8ccf5b9fb07c5f6857bce77c0af73686.png -------------------------------------------------------------------------------- /img/8ffcbd14-8242-4a99-b3e7-73f90345890e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/8ffcbd14-8242-4a99-b3e7-73f90345890e.png -------------------------------------------------------------------------------- /img/9088c8536c984b67b84c56c9a9fdb686.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/9088c8536c984b67b84c56c9a9fdb686.jpeg -------------------------------------------------------------------------------- /img/90a1fa9d-53d4-4447-9655-7519bac5bb2c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/90a1fa9d-53d4-4447-9655-7519bac5bb2c.png -------------------------------------------------------------------------------- /img/95733375-04929680-0cbd-11eb-82f3-adbcfecf4a3e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/95733375-04929680-0cbd-11eb-82f3-adbcfecf4a3e.png -------------------------------------------------------------------------------- /img/95733389-08beb400-0cbd-11eb-983b-cf5138277fe3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/95733389-08beb400-0cbd-11eb-983b-cf5138277fe3.png -------------------------------------------------------------------------------- /img/95733403-0c523b00-0cbd-11eb-9ff9-abc5469e97ca.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/95733403-0c523b00-0cbd-11eb-9ff9-abc5469e97ca.png -------------------------------------------------------------------------------- /img/9668d944-b7b7-425e-b86b-ae24c5aa2f0c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/9668d944-b7b7-425e-b86b-ae24c5aa2f0c.jpg -------------------------------------------------------------------------------- /img/9e1a84c1-139c-4d49-9070-d787e7144d00.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/9e1a84c1-139c-4d49-9070-d787e7144d00.png -------------------------------------------------------------------------------- /img/Dejavu-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/Dejavu-1.png -------------------------------------------------------------------------------- /img/Dejavu-2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/Dejavu-2.gif -------------------------------------------------------------------------------- /img/Dejavu-3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/Dejavu-3.gif -------------------------------------------------------------------------------- /img/Dejavu-4.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/Dejavu-4.gif -------------------------------------------------------------------------------- /img/Descheduler.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/Descheduler.png -------------------------------------------------------------------------------- /img/Elastic-HD-Dashboard-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/Elastic-HD-Dashboard-1.png -------------------------------------------------------------------------------- /img/Elastic-HD-Dashboard-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/Elastic-HD-Dashboard-7.png -------------------------------------------------------------------------------- /img/Kaniko-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/Kaniko-1.png -------------------------------------------------------------------------------- /img/Lens-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/Lens-1.png -------------------------------------------------------------------------------- /img/Lens-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/Lens-2.png -------------------------------------------------------------------------------- /img/Lens-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/Lens-3.png -------------------------------------------------------------------------------- /img/Lens-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/Lens-5.png -------------------------------------------------------------------------------- /img/Lens-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/Lens-6.png -------------------------------------------------------------------------------- /img/Lens-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/Lens-7.png -------------------------------------------------------------------------------- /img/Lens-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/Lens-8.png -------------------------------------------------------------------------------- /img/Lens-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/Lens-9.png -------------------------------------------------------------------------------- /img/Naftis-dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/Naftis-dashboard.png -------------------------------------------------------------------------------- /img/Naftis-istio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/Naftis-istio.png -------------------------------------------------------------------------------- /img/Naftis-service-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/Naftis-service-1.png -------------------------------------------------------------------------------- /img/Naftis-service.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/Naftis-service.png -------------------------------------------------------------------------------- /img/Naftis-taskcreate-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/Naftis-taskcreate-1.png -------------------------------------------------------------------------------- /img/Naftis-taskcreate-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/Naftis-taskcreate-2.png -------------------------------------------------------------------------------- /img/Naftis-taskcreate-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/Naftis-taskcreate-3.png -------------------------------------------------------------------------------- /img/Naftis-tasktpl-new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/Naftis-tasktpl-new.png -------------------------------------------------------------------------------- /img/Naftis-tasktpl-view.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/Naftis-tasktpl-view.png -------------------------------------------------------------------------------- /img/Naftis-tasktpl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/Naftis-tasktpl.png -------------------------------------------------------------------------------- /img/PrometheusAlert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/PrometheusAlert.png -------------------------------------------------------------------------------- /img/a1fc81a6-d26b-4b43-ab49-ba05e0ff6eed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/a1fc81a6-d26b-4b43-ab49-ba05e0ff6eed.png -------------------------------------------------------------------------------- /img/a24cc325720ed8be706f00b100e67782.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/a24cc325720ed8be706f00b100e67782.png -------------------------------------------------------------------------------- /img/a53db783-02b7-4038-9062-c4006a77b19d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/a53db783-02b7-4038-9062-c4006a77b19d.jpg -------------------------------------------------------------------------------- /img/accesshub-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/accesshub-1.png -------------------------------------------------------------------------------- /img/accesshub-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/accesshub-2.png -------------------------------------------------------------------------------- /img/accesshub-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/accesshub-3.png -------------------------------------------------------------------------------- /img/accesshub-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/accesshub-4.png -------------------------------------------------------------------------------- /img/accesshub-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/accesshub-5.png -------------------------------------------------------------------------------- /img/apiserver-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/apiserver-1.png -------------------------------------------------------------------------------- /img/arch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/arch.png -------------------------------------------------------------------------------- /img/architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/architecture.png -------------------------------------------------------------------------------- /img/arthas-dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/arthas-dashboard.png -------------------------------------------------------------------------------- /img/b1afc5c8-b49f-44f8-bc06-086361c83024.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/b1afc5c8-b49f-44f8-bc06-086361c83024.jpg -------------------------------------------------------------------------------- /img/b1b8247eb469b08920f7e4b01a6a619f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/b1b8247eb469b08920f7e4b01a6a619f.png -------------------------------------------------------------------------------- /img/b5fc1888-c27a-4732-9df4-84805641c62a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/b5fc1888-c27a-4732-9df4-84805641c62a.png -------------------------------------------------------------------------------- /img/b6b602a3-f579-4f5c-8d2b-c5d6a6e944bc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/b6b602a3-f579-4f5c-8d2b-c5d6a6e944bc.jpg -------------------------------------------------------------------------------- /img/b7c3bd34-c120-46b1-8df5-c3ef08851d44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/b7c3bd34-c120-46b1-8df5-c3ef08851d44.png -------------------------------------------------------------------------------- /img/bc007789-6d9b-4da9-b32a-3c84df8aaa07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/bc007789-6d9b-4da9-b32a-3c84df8aaa07.png -------------------------------------------------------------------------------- /img/bf52b77fly1g0wkhtwdlij217c0si44d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/bf52b77fly1g0wkhtwdlij217c0si44d.jpg -------------------------------------------------------------------------------- /img/bf52b77fly1g0wnfdxo9fj20hs0anmyb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/bf52b77fly1g0wnfdxo9fj20hs0anmyb.jpg -------------------------------------------------------------------------------- /img/bf52b77fly1g0ws7jziucj21hy0dmtb0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/bf52b77fly1g0ws7jziucj21hy0dmtb0.jpg -------------------------------------------------------------------------------- /img/bf52b77fly1g0ws7vtgq2j21de0cmgmo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/bf52b77fly1g0ws7vtgq2j21de0cmgmo.jpg -------------------------------------------------------------------------------- /img/bf52b77fly1g0ws87espcj21ao0d00tz.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/bf52b77fly1g0ws87espcj21ao0d00tz.jpg -------------------------------------------------------------------------------- /img/bf52b77fly1g0ws8dqqsoj21am0d0q4q.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/bf52b77fly1g0ws8dqqsoj21am0d0q4q.jpg -------------------------------------------------------------------------------- /img/bf52b77fly1g0ws90i7ttj21mq0d440r.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/bf52b77fly1g0ws90i7ttj21mq0d440r.jpg -------------------------------------------------------------------------------- /img/blackbox-external-website.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/blackbox-external-website.png -------------------------------------------------------------------------------- /img/blackbox-http-post.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/blackbox-http-post.png -------------------------------------------------------------------------------- /img/blackbox-k8s-http-services-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/blackbox-k8s-http-services-1.png -------------------------------------------------------------------------------- /img/blackbox-k8s-http-services-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/blackbox-k8s-http-services-2.png -------------------------------------------------------------------------------- /img/blackbox-k8s-ingresses.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/blackbox-k8s-ingresses.png -------------------------------------------------------------------------------- /img/blackbox-k8s-service-dns.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/blackbox-k8s-service-dns.png -------------------------------------------------------------------------------- /img/bootstrap-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/bootstrap-1.png -------------------------------------------------------------------------------- /img/c45386b8fe7d94860469e7ba96b4f6a5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/c45386b8fe7d94860469e7ba96b4f6a5.png -------------------------------------------------------------------------------- /img/c92c2fc3-f981-44a4-ad11-e10ccd84a29f.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/c92c2fc3-f981-44a4-ad11-e10ccd84a29f.jpg -------------------------------------------------------------------------------- /img/c98b1359-2c46-4e5f-9beb-f231b5c3ca9a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/c98b1359-2c46-4e5f-9beb-f231b5c3ca9a.png -------------------------------------------------------------------------------- /img/calico-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/calico-1.png -------------------------------------------------------------------------------- /img/calico-bgp-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/calico-bgp-1.png -------------------------------------------------------------------------------- /img/calico-ipip-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/calico-ipip-1.png -------------------------------------------------------------------------------- /img/calico-ipip-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/calico-ipip-2.png -------------------------------------------------------------------------------- /img/calico-ipip-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/calico-ipip-3.png -------------------------------------------------------------------------------- /img/calico-ipip-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/calico-ipip-4.png -------------------------------------------------------------------------------- /img/calico-ipip-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/calico-ipip-5.png -------------------------------------------------------------------------------- /img/calico-ipip-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/calico-ipip-6.png -------------------------------------------------------------------------------- /img/capabilities.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/capabilities.png -------------------------------------------------------------------------------- /img/car-repair.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/car-repair.png -------------------------------------------------------------------------------- /img/cb6ddb81-ba6f-44d9-8ebc-3ac4304c7808.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/cb6ddb81-ba6f-44d9-8ebc-3ac4304c7808.png -------------------------------------------------------------------------------- /img/coredns-img-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/coredns-img-1.png -------------------------------------------------------------------------------- /img/coredns-img-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/coredns-img-2.png -------------------------------------------------------------------------------- /img/coredns-img-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/coredns-img-3.png -------------------------------------------------------------------------------- /img/coredns-img-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/coredns-img-4.png -------------------------------------------------------------------------------- /img/cpu-mysql-crop-500.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/cpu-mysql-crop-500.png -------------------------------------------------------------------------------- /img/ctop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/ctop.png -------------------------------------------------------------------------------- /img/d835c979-9b69-40e2-9d05-0cb9271a1ef3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/d835c979-9b69-40e2-9d05-0cb9271a1ef3.png -------------------------------------------------------------------------------- /img/derrick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/derrick.png -------------------------------------------------------------------------------- /img/devops-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/devops-1.png -------------------------------------------------------------------------------- /img/dingtalk-token.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/dingtalk-token.png -------------------------------------------------------------------------------- /img/dingtalk.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/dingtalk.jpeg -------------------------------------------------------------------------------- /img/docker-add-capabilities.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/docker-add-capabilities.png -------------------------------------------------------------------------------- /img/docker-call-path.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/docker-call-path.png -------------------------------------------------------------------------------- /img/docker-drop-capabilities.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/docker-drop-capabilities.png -------------------------------------------------------------------------------- /img/docker-k8s-logging-arch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/docker-k8s-logging-arch.png -------------------------------------------------------------------------------- /img/docker-log-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/docker-log-1.png -------------------------------------------------------------------------------- /img/docker-log-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/docker-log-2.png -------------------------------------------------------------------------------- /img/docker-logging-arch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/docker-logging-arch.png -------------------------------------------------------------------------------- /img/docker-network-route-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/docker-network-route-1.png -------------------------------------------------------------------------------- /img/docker-network-route-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/docker-network-route-2.png -------------------------------------------------------------------------------- /img/docker-systemd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/docker-systemd.png -------------------------------------------------------------------------------- /img/e4351d72-3284-49ac-ba71-80d96f8d371e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/e4351d72-3284-49ac-ba71-80d96f8d371e.png -------------------------------------------------------------------------------- /img/e499ffd0-d3c2-495e-9c79-614f88f01d83.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/e499ffd0-d3c2-495e-9c79-614f88f01d83.png -------------------------------------------------------------------------------- /img/e52364d2-45e8-47b8-80d4-db2608fe6ec1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/e52364d2-45e8-47b8-80d4-db2608fe6ec1.png -------------------------------------------------------------------------------- /img/eb32c117-5b5a-42f4-9571-7a597e49a9ba.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/eb32c117-5b5a-42f4-9571-7a597e49a9ba.png -------------------------------------------------------------------------------- /img/eddaa0ba-8fd0-40d3-846a-790c4e5424c7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/eddaa0ba-8fd0-40d3-846a-790c4e5424c7.jpg -------------------------------------------------------------------------------- /img/eedead36-3aa5-4a1d-831d-dc53a80630b1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/eedead36-3aa5-4a1d-831d-dc53a80630b1.jpg -------------------------------------------------------------------------------- /img/elasticsearch-head.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/elasticsearch-head.png -------------------------------------------------------------------------------- /img/elk-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/elk-10.png -------------------------------------------------------------------------------- /img/elk-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/elk-12.png -------------------------------------------------------------------------------- /img/elk-13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/elk-13.png -------------------------------------------------------------------------------- /img/elk-architecture.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/elk-architecture.jpg -------------------------------------------------------------------------------- /img/elk-status.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/elk-status.png -------------------------------------------------------------------------------- /img/elk-template.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/elk-template.png -------------------------------------------------------------------------------- /img/ephemeral-storage-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/ephemeral-storage-1.png -------------------------------------------------------------------------------- /img/etcd-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/etcd-11.png -------------------------------------------------------------------------------- /img/etcd-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/etcd-12.png -------------------------------------------------------------------------------- /img/etcd-13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/etcd-13.png -------------------------------------------------------------------------------- /img/f480225fccfe4d65b53a508dd0c11ff4.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/f480225fccfe4d65b53a508dd0c11ff4.jpeg -------------------------------------------------------------------------------- /img/f8ba4d61-6b4f-4f4c-b900-7d11a3ecea79.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/f8ba4d61-6b4f-4f4c-b900-7d11a3ecea79.png -------------------------------------------------------------------------------- /img/f9d8a67b-add1-4bd6-9d32-f33b9b3bdac6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/f9d8a67b-add1-4bd6-9d32-f33b9b3bdac6.jpg -------------------------------------------------------------------------------- /img/fc3cca4971781548f39573a2aed60b98.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/fc3cca4971781548f39573a2aed60b98.png -------------------------------------------------------------------------------- /img/fc46531a-b6fa-408f-8577-9521c97f5fda.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/fc46531a-b6fa-408f-8577-9521c97f5fda.png -------------------------------------------------------------------------------- /img/ff969719-cf57-4844-9bdd-e07cfb229347.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/ff969719-cf57-4844-9bdd-e07cfb229347.png -------------------------------------------------------------------------------- /img/first-page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/first-page.png -------------------------------------------------------------------------------- /img/flannel-host-gw-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/flannel-host-gw-1.png -------------------------------------------------------------------------------- /img/flannel-vxlan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/flannel-vxlan.png -------------------------------------------------------------------------------- /img/free1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/free1.jpg -------------------------------------------------------------------------------- /img/gitlab-ci-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/gitlab-ci-1.png -------------------------------------------------------------------------------- /img/gitlab-ci-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/gitlab-ci-2.png -------------------------------------------------------------------------------- /img/gitlab-ci-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/gitlab-ci-3.png -------------------------------------------------------------------------------- /img/gitlab-ci-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/gitlab-ci-4.png -------------------------------------------------------------------------------- /img/gitlab-k8s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/gitlab-k8s.png -------------------------------------------------------------------------------- /img/goaccess-dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/goaccess-dashboard.png -------------------------------------------------------------------------------- /img/goaccess-nginx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/goaccess-nginx.png -------------------------------------------------------------------------------- /img/grafana-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/grafana-2.png -------------------------------------------------------------------------------- /img/grafana-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/grafana-3.png -------------------------------------------------------------------------------- /img/grafana-nginx-access-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/grafana-nginx-access-1.png -------------------------------------------------------------------------------- /img/grafna-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/grafna-1.png -------------------------------------------------------------------------------- /img/harbor-artifact-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/harbor-artifact-1.png -------------------------------------------------------------------------------- /img/harbor-artifact-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/harbor-artifact-2.png -------------------------------------------------------------------------------- /img/http-ssl-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/http-ssl-1.png -------------------------------------------------------------------------------- /img/image-20191002073039330.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/image-20191002073039330.png -------------------------------------------------------------------------------- /img/image-20191002073210761.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/image-20191002073210761.png -------------------------------------------------------------------------------- /img/image-20191002073245932.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/image-20191002073245932.png -------------------------------------------------------------------------------- /img/image-20191003230417140.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/image-20191003230417140.png -------------------------------------------------------------------------------- /img/image-20191217133227879.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/image-20191217133227879.png -------------------------------------------------------------------------------- /img/image-20200201160933419.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/image-20200201160933419.png -------------------------------------------------------------------------------- /img/image-20200201180554307.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/image-20200201180554307.png -------------------------------------------------------------------------------- /img/image-20200201181823835.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/image-20200201181823835.png -------------------------------------------------------------------------------- /img/image-20200201215109659.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/image-20200201215109659.png -------------------------------------------------------------------------------- /img/image-20200201215213112.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/image-20200201215213112.png -------------------------------------------------------------------------------- /img/image-20200225204455933.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/image-20200225204455933.png -------------------------------------------------------------------------------- /img/image-20200225204706887.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/image-20200225204706887.png -------------------------------------------------------------------------------- /img/image-20200225205535033.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/image-20200225205535033.png -------------------------------------------------------------------------------- /img/image-20200225205712284.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/image-20200225205712284.png -------------------------------------------------------------------------------- /img/image-20200225212104752.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/image-20200225212104752.png -------------------------------------------------------------------------------- /img/image2020-10-16_14-1-27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/image2020-10-16_14-1-27.png -------------------------------------------------------------------------------- /img/ingress-controller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/ingress-controller.png -------------------------------------------------------------------------------- /img/ingress-nginx-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/ingress-nginx-1.png -------------------------------------------------------------------------------- /img/ingress-nginx-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/ingress-nginx-2.png -------------------------------------------------------------------------------- /img/io.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/io.png -------------------------------------------------------------------------------- /img/istio-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/istio-1.png -------------------------------------------------------------------------------- /img/istio-2.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/istio-2.jpeg -------------------------------------------------------------------------------- /img/istio-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/istio-3.png -------------------------------------------------------------------------------- /img/istio-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/istio-4.png -------------------------------------------------------------------------------- /img/juice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/juice.png -------------------------------------------------------------------------------- /img/k8s-1.18.2-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-1.18.2-1.png -------------------------------------------------------------------------------- /img/k8s-1.19-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-1.19-1.png -------------------------------------------------------------------------------- /img/k8s-1.19-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-1.19-logo.png -------------------------------------------------------------------------------- /img/k8s-1.20-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-1.20-1.png -------------------------------------------------------------------------------- /img/k8s-1.20-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-1.20-2.png -------------------------------------------------------------------------------- /img/k8s-arch1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-arch1.png -------------------------------------------------------------------------------- /img/k8s-cd-jenkins-pipeline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-cd-jenkins-pipeline.png -------------------------------------------------------------------------------- /img/k8s-chahua-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-chahua-1.png -------------------------------------------------------------------------------- /img/k8s-chahua-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-chahua-10.png -------------------------------------------------------------------------------- /img/k8s-chahua-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-chahua-11.png -------------------------------------------------------------------------------- /img/k8s-chahua-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-chahua-12.png -------------------------------------------------------------------------------- /img/k8s-chahua-13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-chahua-13.png -------------------------------------------------------------------------------- /img/k8s-chahua-14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-chahua-14.png -------------------------------------------------------------------------------- /img/k8s-chahua-15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-chahua-15.png -------------------------------------------------------------------------------- /img/k8s-chahua-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-chahua-16.png -------------------------------------------------------------------------------- /img/k8s-chahua-17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-chahua-17.png -------------------------------------------------------------------------------- /img/k8s-chahua-18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-chahua-18.png -------------------------------------------------------------------------------- /img/k8s-chahua-19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-chahua-19.png -------------------------------------------------------------------------------- /img/k8s-chahua-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-chahua-2.png -------------------------------------------------------------------------------- /img/k8s-chahua-20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-chahua-20.png -------------------------------------------------------------------------------- /img/k8s-chahua-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-chahua-3.png -------------------------------------------------------------------------------- /img/k8s-chahua-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-chahua-4.png -------------------------------------------------------------------------------- /img/k8s-chahua-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-chahua-5.png -------------------------------------------------------------------------------- /img/k8s-chahua-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-chahua-6.png -------------------------------------------------------------------------------- /img/k8s-chahua-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-chahua-7.png -------------------------------------------------------------------------------- /img/k8s-chahua-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-chahua-8.png -------------------------------------------------------------------------------- /img/k8s-chahua-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-chahua-9.png -------------------------------------------------------------------------------- /img/k8s-ci-jenkins-pipeline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-ci-jenkins-pipeline.png -------------------------------------------------------------------------------- /img/k8s-cron.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-cron.png -------------------------------------------------------------------------------- /img/k8s-dashboard-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-dashboard-1.png -------------------------------------------------------------------------------- /img/k8s-dashboard-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-dashboard-2.png -------------------------------------------------------------------------------- /img/k8s-dashboard-login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-dashboard-login.png -------------------------------------------------------------------------------- /img/k8s-devops-ci-cd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-devops-ci-cd.png -------------------------------------------------------------------------------- /img/k8s-efk-arch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-efk-arch.png -------------------------------------------------------------------------------- /img/k8s-error-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-error-1.png -------------------------------------------------------------------------------- /img/k8s-https.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-https.png -------------------------------------------------------------------------------- /img/k8s-iac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-iac.png -------------------------------------------------------------------------------- /img/k8s-logging-arch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-logging-arch.png -------------------------------------------------------------------------------- /img/k8s-logging-arch1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-logging-arch1.png -------------------------------------------------------------------------------- /img/k8s-logging-arch2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-logging-arch2.png -------------------------------------------------------------------------------- /img/k8s-logging-arch3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-logging-arch3.png -------------------------------------------------------------------------------- /img/k8s-nsenter-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-nsenter-1.png -------------------------------------------------------------------------------- /img/k8s-nsenter-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-nsenter-2.png -------------------------------------------------------------------------------- /img/k8s-nsenter-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-nsenter-3.png -------------------------------------------------------------------------------- /img/k8s-rbac-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-rbac-1.png -------------------------------------------------------------------------------- /img/k8s-rbac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-rbac.png -------------------------------------------------------------------------------- /img/k8s-secure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-secure.png -------------------------------------------------------------------------------- /img/k8s-v1.18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s-v1.18.png -------------------------------------------------------------------------------- /img/k8s_pod_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s_pod_03.png -------------------------------------------------------------------------------- /img/k8s_pod_04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s_pod_04.png -------------------------------------------------------------------------------- /img/k8s_pod_05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8s_pod_05.png -------------------------------------------------------------------------------- /img/k8syaml-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k8syaml-1.png -------------------------------------------------------------------------------- /img/k9s-dp-yaml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k9s-dp-yaml.png -------------------------------------------------------------------------------- /img/k9s-dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k9s-dp.png -------------------------------------------------------------------------------- /img/k9s-logs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k9s-logs.png -------------------------------------------------------------------------------- /img/k9s-pod.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/k9s-pod.png -------------------------------------------------------------------------------- /img/kdevtmpfsi-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/kdevtmpfsi-1.png -------------------------------------------------------------------------------- /img/kdevtmpfsi-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/kdevtmpfsi-2.png -------------------------------------------------------------------------------- /img/kdevtmpfsi-top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/kdevtmpfsi-top.png -------------------------------------------------------------------------------- /img/kind-create-cluster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/kind-create-cluster.png -------------------------------------------------------------------------------- /img/kind-docker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/kind-docker.png -------------------------------------------------------------------------------- /img/kind-list-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/kind-list-image.png -------------------------------------------------------------------------------- /img/kind-pods-all.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/kind-pods-all.png -------------------------------------------------------------------------------- /img/kubecm-switch.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/kubecm-switch.gif -------------------------------------------------------------------------------- /img/kubernetes-1-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/kubernetes-1-1.png -------------------------------------------------------------------------------- /img/kubernetes-1-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/kubernetes-1-2.png -------------------------------------------------------------------------------- /img/kubernetes-1-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/kubernetes-1-3.png -------------------------------------------------------------------------------- /img/kubernetes-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/kubernetes-1.png -------------------------------------------------------------------------------- /img/kubernetes-2-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/kubernetes-2-1.png -------------------------------------------------------------------------------- /img/kubernetes-2-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/kubernetes-2-2.png -------------------------------------------------------------------------------- /img/kubernetes-2-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/kubernetes-2-3.png -------------------------------------------------------------------------------- /img/kubernetes-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/kubernetes-2.png -------------------------------------------------------------------------------- /img/kuboard-stars.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/kuboard-stars.png -------------------------------------------------------------------------------- /img/kuboard.demo.eip.work.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/kuboard.demo.eip.work.png -------------------------------------------------------------------------------- /img/kui-deployment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/kui-deployment.png -------------------------------------------------------------------------------- /img/kui-pods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/kui-pods.png -------------------------------------------------------------------------------- /img/linux-memory-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/linux-memory-1.png -------------------------------------------------------------------------------- /img/linux-memory-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/linux-memory-2.png -------------------------------------------------------------------------------- /img/localhost-ssl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/localhost-ssl.png -------------------------------------------------------------------------------- /img/lxcfs-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/lxcfs-1.png -------------------------------------------------------------------------------- /img/mkcert-ca.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/mkcert-ca.png -------------------------------------------------------------------------------- /img/ncdu-img-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/ncdu-img-1.png -------------------------------------------------------------------------------- /img/ncdu-img-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/ncdu-img-2.png -------------------------------------------------------------------------------- /img/ncdu-img-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/ncdu-img-3.png -------------------------------------------------------------------------------- /img/ncdu-img-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/ncdu-img-4.png -------------------------------------------------------------------------------- /img/nginx-conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/nginx-conf.png -------------------------------------------------------------------------------- /img/nginx-home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/nginx-home.png -------------------------------------------------------------------------------- /img/nginx-lisner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/nginx-lisner.png -------------------------------------------------------------------------------- /img/nginx-location.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/nginx-location.png -------------------------------------------------------------------------------- /img/nginx-login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/nginx-login.png -------------------------------------------------------------------------------- /img/nginx-realip-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/nginx-realip-2.png -------------------------------------------------------------------------------- /img/nginx-upstream.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/nginx-upstream.png -------------------------------------------------------------------------------- /img/ngtop-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/ngtop-1.png -------------------------------------------------------------------------------- /img/nmon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/nmon.jpg -------------------------------------------------------------------------------- /img/nmon1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/nmon1.jpg -------------------------------------------------------------------------------- /img/o-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/o-1.png -------------------------------------------------------------------------------- /img/oom-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/oom-1.png -------------------------------------------------------------------------------- /img/permission-manager-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/permission-manager-2.png -------------------------------------------------------------------------------- /img/permission-manager-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/permission-manager-3.png -------------------------------------------------------------------------------- /img/permission-manager-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/permission-manager-4.png -------------------------------------------------------------------------------- /img/pod-conditions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/pod-conditions.png -------------------------------------------------------------------------------- /img/pod-exit-code-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/pod-exit-code-1.png -------------------------------------------------------------------------------- /img/pod-exit-code-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/pod-exit-code-2.png -------------------------------------------------------------------------------- /img/pod-name-pid-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/pod-name-pid-1.png -------------------------------------------------------------------------------- /img/pod-name-pid-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/pod-name-pid-2.png -------------------------------------------------------------------------------- /img/pod-phase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/pod-phase.png -------------------------------------------------------------------------------- /img/portaine-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/portaine-02.png -------------------------------------------------------------------------------- /img/portainer-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/portainer-01.png -------------------------------------------------------------------------------- /img/portainer-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/portainer-03.png -------------------------------------------------------------------------------- /img/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/preview.png -------------------------------------------------------------------------------- /img/probe_success.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/probe_success.png -------------------------------------------------------------------------------- /img/proc-pid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/proc-pid.png -------------------------------------------------------------------------------- /img/prometheus-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/prometheus-11.png -------------------------------------------------------------------------------- /img/prometheus-arch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/prometheus-arch.png -------------------------------------------------------------------------------- /img/prometheus-erro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/prometheus-erro.png -------------------------------------------------------------------------------- /img/prometheus-operator-load.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/prometheus-operator-load.png -------------------------------------------------------------------------------- /img/rdr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/rdr.png -------------------------------------------------------------------------------- /img/redis-shake-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/redis-shake-2.png -------------------------------------------------------------------------------- /img/rolling-update-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/rolling-update-1.png -------------------------------------------------------------------------------- /img/rolling-update-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/rolling-update-2.png -------------------------------------------------------------------------------- /img/rolling-update-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/rolling-update-3.png -------------------------------------------------------------------------------- /img/rolling-update-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/rolling-update-4.png -------------------------------------------------------------------------------- /img/rp_dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/rp_dashboard.png -------------------------------------------------------------------------------- /img/runc-detail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/runc-detail.png -------------------------------------------------------------------------------- /img/sealos.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/sealos.jpeg -------------------------------------------------------------------------------- /img/slabtop.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/slabtop.jpg -------------------------------------------------------------------------------- /img/slb-monitoring.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/slb-monitoring.png -------------------------------------------------------------------------------- /img/stat-file-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/stat-file-1.png -------------------------------------------------------------------------------- /img/stat-file-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/stat-file-2.png -------------------------------------------------------------------------------- /img/stat-file-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/stat-file-3.png -------------------------------------------------------------------------------- /img/studying-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/studying-1.jpg -------------------------------------------------------------------------------- /img/syn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/syn.png -------------------------------------------------------------------------------- /img/tcp-syn.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/tcp-syn.jpg -------------------------------------------------------------------------------- /img/thread-monitor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/thread-monitor.png -------------------------------------------------------------------------------- /img/top.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/top.jpg -------------------------------------------------------------------------------- /img/trivy-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/trivy-3.png -------------------------------------------------------------------------------- /img/trivy-json.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/trivy-json.png -------------------------------------------------------------------------------- /img/trivy-usage1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/trivy-usage1.png -------------------------------------------------------------------------------- /img/trivy-usage2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/trivy-usage2.png -------------------------------------------------------------------------------- /img/uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/uml.png -------------------------------------------------------------------------------- /img/v-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/v-1.png -------------------------------------------------------------------------------- /img/v2-62608a79bf7293ecc94560e5542d6032_720w.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/v2-62608a79bf7293ecc94560e5542d6032_720w.jpg -------------------------------------------------------------------------------- /img/v2-7b478d893ac3c197cd0e14ac182e5d82_720w.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/v2-7b478d893ac3c197cd0e14ac182e5d82_720w.jpg -------------------------------------------------------------------------------- /img/velero-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/velero-1.png -------------------------------------------------------------------------------- /img/velero-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/velero-2.png -------------------------------------------------------------------------------- /img/velero-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/velero-3.png -------------------------------------------------------------------------------- /img/velero-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/velero-4.png -------------------------------------------------------------------------------- /img/vpc-switch-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/vpc-switch-1.png -------------------------------------------------------------------------------- /img/yp_wx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/yp_wx.png -------------------------------------------------------------------------------- /img/zabbix-dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/zabbix-dashboard.png -------------------------------------------------------------------------------- /img/zs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yangpeng14/DevOps/86bcbb9e8e827200f3a2b7422d89116ec168426d/img/zs.png -------------------------------------------------------------------------------- /kubernetes/3分钟部署生产级k8s集群.md: -------------------------------------------------------------------------------- 1 | ## 什么是 sealos ? 2 | 3 | `sealos`:sealos 是一个 kubernetes 高可用安装工具,一条命令,离线安装,包含所有依赖,内核负载 不依赖haproxy keepalived,纯golang开发,99年证书,支持 v1.14.9 v1.15.6 v1.16.3 v1.17.0 。 4 | 5 | ## 概览图 6 | ![](/img/sealos.jpeg) 7 | 8 | ## 前提条件 9 | 10 | - 安装并启动docker, 高版本离线包自带docker,如没安装docker会自动安装 11 | 12 | - 下载kubernetes 离线安装包 13 | 14 | - 下载最新版本sealos 15 | 16 | - 务必同步服务器时间 17 | 18 | - 主机名不可重复 19 | 20 | ## 快速安装 21 | 22 | - 环境信息 23 | 24 | 主机名 | IP地址 25 | ---|--- 26 | master0 | 192.168.0.2 27 | master1 | 192.168.0.3 28 | master2 | 192.168.0.4 29 | node0 | 192.168.0.5 30 | 31 | - `只需要准备好服务器,在任意一台服务器上执行下面命令即可` 32 | 33 | ```bash 34 | # 下载并安装sealos, sealos是个golang的二进制工具,直接下载拷贝到bin目录即可 35 | $ wget https://github.com/fanux/sealos/releases/download/v3.0.1/sealos && \ 36 | chmod +x sealos && mv sealos /usr/bin 37 | 38 | # 安装一个三master的kubernetes集群 39 | $ sealos init --passwd 123456 \ 40 | --master 192.168.0.2 --master 192.168.0.3 --master 192.168.0.4 \ 41 | --node 192.168.0.5 \ 42 | --pkg-url https://sealyun.oss-cn-beijing.aliyuncs.com/413bd3624b2fb9e466601594b4f72072-1.17.0/ kube1.17.0.tar.gz \ 43 | --version v1.17.0 44 | ``` 45 | 46 | - 参数含义 47 | 48 | 参数名 | 含义 | 示例 49 | ---|---|--- 50 | passwd | 服务器密码 | 123456 51 | master | k8s master节点IP地址 | 192.168.0.2 52 | node | k8s node节点IP地址 | 192.168.0.3 53 | pkg-url | 离线资源包地址,支持下载到本地,或者一个远程地址 | /root/kube1.16.0.tar.gz 54 | version | 资源包对应的版本 | v1.17.0 55 | 56 | ## 项目地址 57 | - https://github.com/fanux/sealos 58 | 59 | ## 参考链接 60 | - https://github.com/fanux/sealos 61 | - https://sealyun.com/docs -------------------------------------------------------------------------------- /kubernetes/CNCF宣布安全更新框架TUF正式毕业.md: -------------------------------------------------------------------------------- 1 | ## TUF 毕业时间 2 | 3 | 专为云原生软件构建可持续生态系统的云原生计算基金会(CNCF)当地时间(美国加利福尼亚州旧金山)12月18日宣布,The update Framework(TUF)已经成为继Kubernetes、Premetheus、Envoy、CoreDNS、containerd、Fluentd、Jaeger以及Vitess之后,第九个正式毕业的项目。为了逐步从孵化阶段转向成熟,并最终迎来毕业,各项目必须获得蓬勃的发展态势、一路走高的采用率、建立记录明确且结构清晰的治理流程,同时在可持续性与包容性等方面对技术社区做出坚定承诺。 4 | 5 | ## TUF 简介 6 | 7 | `TUF` 是一项用于保护软件更新系统的开源安全技术,是首个从CNCF以规范与安全性为重点的毕业项目。纽约大学丹顿工程学院计算机科学与工程副教授 Justin Cappos 于2009年首先启动了该项目。Justin Cappos 也是第一个领导该项目毕业的学术研究人员。与此同时,TUF亦是首个源自高校的CNCF毕业项目。 8 | 9 | `TUF` 已成为保护软件更新系统安全的`行业标准`。包括亚马逊在内的领先的基于云的服务提供商都在使用它,其中包括亚马逊近期发布了TUF的最新实现方案。此外,Microsoft、Google、Cloudflare、Datadog、DigitalOcean、Docker、IBM、Red Hat以及VMware等也是TUF的忠实用户 10 | 11 | ## TUF 背景 12 | 13 | TUF项目诞生于约十年之前,旨在增强系统防御能力,顺利抵御各类可能传播恶意软件或破坏代码库的高强度攻击。TUF项目的主要设计目标包括: 14 | 15 | - 提供可用于保护新的和现有的软件更新系统框架(框架中包含多种库、文件格式及实用工具)。 16 | - 降低各类高强度攻击行为的潜在影响。 17 | - 提供出色的灵活性,满足多种软件更新系统的不同需求。 18 | - 易于现有软件更新系统集成。 19 | 20 | 有关TUF的更多信息,请访问 https://theupdateframework.github.io/ 21 | 22 | ## 原文 23 | 24 | > https://www.cncf.io/announcement/2019/12/18/cloud-native-computing-foundation-announces-tuf-graduation/ -------------------------------------------------------------------------------- /kubernetes/GrafanaTanka:比K8S-YAML声明更简洁.md: -------------------------------------------------------------------------------- 1 | ## 前言 2 | 3 | `Grafana Tanka` 是 Kubernetes 集群的配置工具,由 `Jsonnet` 数据模板语言实现。 4 | 5 | 使用它比使用 `Yaml` 来定义 Kubernetes 资源`更简洁`。`Jsonnet` 高度可重用,使你能通过组合现成的库来实现你的技术栈。 6 | 7 | ## Grafana Tanka 亮点 8 | 9 | - `干净`:使用 `Jsonet` 语言表示你的Kubernetes应用,比YAML更简洁。 10 | - `可重用`:构建应用程序库,将它们导入任何地方,甚至在GitHub上共享它们! 11 | - `简洁`:使用Kubernetes库,不再需要模板。 12 | - `变化`:以轻松地知道确切的变化。 13 | - `生产环境Ready`:Tanka 部署了 Grafana Cloud 和更多生产设置。 14 | - `开源`:就像广受欢迎的 `Grafana` 和 `Loki` 项目一样,Tanka 是完全开源的。 15 | 16 | ## K8S Yaml 与 Tanka 方式对比 17 | 18 | ### K8S Yaml 声明 19 | 20 | ```yaml 21 | apiVersion: apps/v1 22 | kind: Deployment 23 | metadata: 24 | name: grafana 25 | spec: 26 | selector: 27 | matchLabels: 28 | name: grafana 29 | template: 30 | metadata: 31 | labels: 32 | name: grafana 33 | spec: 34 | containers: 35 | - image: grafana/grafana 36 | name: grafana 37 | ports: 38 | - containerPort: 3000 39 | name: ui 40 | ``` 41 | 42 | ### Tanka 方式声明 43 | 44 | ```json 45 | local k = import "k.libsonnet"; 46 | 47 | { 48 | grafana: k.apps.v1.deployment.new( 49 | name="grafana", 50 | replicas=1, 51 | containers=[k.core.v1.container.new( 52 | name="grafana", 53 | image="grafana/grafana", 54 | )] 55 | ) 56 | } 57 | ``` 58 | 59 | > - 官方文档:https://tanka.dev/ 60 | > - GitHub地址:https://github.com/grafana/tanka -------------------------------------------------------------------------------- /kubernetes/IBM开源图形终端Kui框架.md: -------------------------------------------------------------------------------- 1 | ## Kui 简介 2 | 3 | `Kui` 为构建云原生应用程序提供了新的开发经验。Kui使您能够操作复杂的 `JSON` 和 `YAML` 数据模型,集成不同的工具,并提供对操作数据的聚合视图快速访问。 4 | 5 | ## 演示 6 | 7 | ```bash 8 | # 查看 monitoring 命名空间中 pods 9 | $ kubectl kui get pods -n monitoring --ui 10 | ``` 11 | 12 | ![](/img/kui-pods.png) 13 | 14 | ```bash 15 | # 查看 deployment 概要 16 | $ kubectl kui get deployment -n monitoring --ui 17 | ``` 18 | 19 | ![](/img/kui-deployment.png) 20 | 21 | 如果没有该 `--ui` 选项,`Kui` 将直接在您的终端中显示输出;您会发现输出与 `kubectl` 相同,并添加了语法颜色。使用`Kui`,您可以以优美而灵活的方式在这些模式之间导航。 22 | 23 | ## 支持平台 24 | 25 | - Linux 26 | - MacOS 27 | - Windows 28 | 29 | ## 安装 30 | 31 | ```bash 32 | # MacOS 安装 33 | $ curl -L https://macos-tarball.kui-shell.org/ | tar jxf - 34 | $ open Kui-darwin-x64/Kui.app 35 | ``` 36 | 37 | 其它平台安装方式,参考 `https://github.com/IBM/kui/blob/master/docs/installation.md` 38 | 39 | 40 | ## 项目地址 41 | 42 | > https://github.com/IBM/kui 43 | 44 | ## 参考链接 45 | 46 | > https://github.com/IBM/kui -------------------------------------------------------------------------------- /kubernetes/Kind:一个容器创建K8S开发集群.md: -------------------------------------------------------------------------------- 1 | ## 什么是 Kind 2 | 3 | `kind`:是一种使用Docker容器`节点`运行本地Kubernetes集群的工具。该类型主要用于测试Kubernetes,但可用于本地开发或CI。 4 | 5 | > 注意:kind仍在开发中 6 | 7 | ## 部署 8 | 9 | ### Mac & Linux 10 | 11 | ```bash 12 | $ curl -Lo ./kind "https://kind.sigs.k8s.io/dl/v0.9.0/kind-$(uname)-amd64" 13 | $ chmod +x ./kind 14 | $ mv ./kind /some-dir-in-your-PATH/kind 15 | ``` 16 | 17 | ### Mac 上使用 brew 安装 18 | 19 | ```bash 20 | $ brew install kind 21 | ``` 22 | 23 | ### Windows 24 | 25 | ```bash 26 | $ curl.exe -Lo kind-windows-amd64.exe https://kind.sigs.k8s.io/dl/v0.9.0/kind-windows-amd64 27 | Move-Item .\kind-windows-amd64.exe c:\some-dir-in-your-PATH\kind.exe 28 | 29 | # OR via Chocolatey (https://chocolatey.org/packages/kind) 30 | $ choco install kind 31 | ``` 32 | 33 | ## K8S集群创建与删除 34 | 35 | ```bash 36 | # 创建集群,默认集群名称为 kind 37 | $ kind create cluster 38 | ``` 39 | 40 | ![](../img/kind-create-cluster.png) 41 | 42 | 一个 Docker 容器创建的 K8S 集群 43 | 44 | ![](../img/kind-docker.png) 45 | 46 | 列出K8S集群pods 47 | 48 | ![](../img/kind-pods-all.png) 49 | 50 | ```bash 51 | # 定义集群名称 52 | $ kind create cluster --name kind-2 53 | 54 | # 查询集群 55 | $ kind get clusters 56 | 57 | # 删除集群 58 | $ kind delete cluster 59 | ``` 60 | 61 | ## 其它操作 62 | 63 | ```bash 64 | # 列出集群镜像 65 | $ docker exec -it my-node-name crictl images 66 | ``` 67 | 68 | ![](../img/kind-list-image.png) 69 | 70 | ## 参考链接 71 | 72 | > - https://github.com/kubernetes-sigs/kind 73 | > - https://kind.sigs.k8s.io/docs/user/quick-start/#installation -------------------------------------------------------------------------------- /kubernetes/etcd使用命令.md: -------------------------------------------------------------------------------- 1 | 1. etcd v3 查询k8s数据 2 | ``` 3 | ETCDCTL_API=3 etcdctl \ 4 | --cacert="/opt/kubernetes/ssl/ca.pem" --cert="/opt/kubernetes/ssl/server.pem" --key="/opt/kubernetes/ssl/server-key.pem" \ 5 | --endpoints=[172.17.94.200:2379] \ 6 | get /registry --prefix 7 | ``` 8 | 9 | 2. 快照键空间 10 | ``` 11 | ETCDCTL_API=3 etcdctl \ 12 | --cacert="/opt/kubernetes/ssl/ca.pem" --cert="/opt/kubernetes/ssl/server.pem" --key="/opt/kubernetes/ssl/server-key.pem" \ 13 | --endpoints=[172.17.94.200:2379] \ 14 | snapshot save snapshot-`date +%Y%m%d`.db 15 | ``` 16 | 17 | -------------------------------------------------------------------------------- /kubernetes/etcd存储满了如何处理.md: -------------------------------------------------------------------------------- 1 | ## 一、前言 2 | 3 | 当运行 `ETCD` 日志报 `Erro: mvcc database space exceeded` 时,说明ETCD存储不足了(默认ETCD存储是2G),配额会触发告警,然后 Etcd 系统将进入操作受限的维护模式。 4 | 5 | 通过下面命令可以查看ETCD存储使用情况: 6 | 7 | ```bash 8 | $ ETCDCTL_API=3 etcdctl --endpoints="http://127.0.0.1:2379" --write-out=table endpoint status 9 | ``` 10 | 11 | ![](../img/etcd-11.png) 12 | 13 | ## 二、临时解决方案 14 | 15 | > PS: 压缩前做好快照备份,命令 `etcdctl snapshot save backup.db` 16 | 17 | 通过 ETCD `数据压缩`来临时解决问题,具体如下操作 18 | 19 | ```bash 20 | # 获取当前版本 21 | $ rev=$(ETCDCTL_API=3 etcdctl --endpoints=http://127.0.0.1:2379 endpoint status --write-out="json" | egrep -o '"revision":[0-9]*' | egrep -o '[0-9].*') 22 | 23 | # 压缩所有旧版本 24 | $ ETCDCTL_API=3 etcdctl --endpoints=http://127.0.0.1:2379 compact $rev 25 | 26 | # 整理多余的空间 27 | $ ETCDCTL_API=3 etcdctl --endpoints=http://127.0.0.1:2379 defrag 28 | 29 | # 取消告警信息 30 | $ ETCDCTL_API=3 etcdctl --endpoints=http://127.0.0.1:2379 alarm disarm 31 | 32 | # 测试是否能成功写入 33 | $ ETCDCTL_API=3 etcdctl --endpoints=http://127.0.0.1:2379 put testkey 123 34 | 35 | OK 36 | 37 | # 再次查看ETCD存储使用情况 38 | $ ETCDCTL_API=3 etcdctl --endpoints="http://127.0.0.1:2379" --write-out=table endpoint status 39 | ``` 40 | 41 | ## 三、最终解决方案 42 | 43 | 在 ETCD 启动命令中添加下面两个参数: 44 | 45 | ```bash 46 | # 表示每隔一个小时自动压缩一次 47 | --auto-compaction-retention=1 48 | # 磁盘空间调整为 8G,官方建议最大 8G(单位是字节) 49 | --quota-backend-bytes=8388608000 50 | ``` 51 | 52 | ## 四、最佳实践 53 | 54 | 大家有没有使用过 `Kuboard`(Kubernetes 多集群管理界面,官网地址:https://kuboard.cn),如果有使用过的同学可能会遇到ETCD存储不足的问题,因为官网提供的docker镜像中,ETCD启动参数并没有添加 `--auto-compaction-retention` 和 `--quota-backend-bytes` 参数。 55 | 56 | 修改官网 `Kuboard` docker镜像 `/entrypoint.sh` 启动脚本 57 | 58 | ![](../img/etcd-12.png) 59 | 60 | 生成 Dockerfile 文件: 61 | 62 | ```bash 63 | # 编辑 Dockerfile 64 | $ vim Dockerfile 65 | 66 | FROM eipwork/kuboard:v3.5.0.3 67 | 68 | COPY ./entrypoint.sh /entrypoint.sh 69 | 70 | # 构建镜像 71 | $ docker build -t eipwork/kuboard-modify:v3.5.0.3 . -f Dockerfile 72 | ``` 73 | 74 | 启动 Kuboard,并查看进程如下: 75 | 76 | ![](../img/etcd-13.png) 77 | 78 | 79 | ## 五、参考文档 80 | 81 | - https://etcd.io/docs/v3.4/op-guide/maintenance/ -------------------------------------------------------------------------------- /kubernetes/grafana采集阿里云SLB监控信息.md: -------------------------------------------------------------------------------- 1 | ## 前言 2 | 3 | 阿里云监控为云上用户提供常用云产品的监控数据和用户自定义上报的监控数据。在可视化展示层面,除了在云监控控制台查看监控图表外,您还可以将云监控的数据添加到Grafana中展示。 4 | 5 | ## 阿里云SLB监控展示 6 | 7 | ![](/img/slb-monitoring.png) 8 | 9 | 10 | ## Grafana 部署 aliyun-cms-grafana 插件 11 | 12 | 1、本文略过 Grafana 部署 13 | 14 | 2、安装 aliyun-cms-grafana 插件 15 | 16 | 假如 Grafana 插件安装目录为 `/var/lib/grafana/plugins/` 17 | 18 | 执行以下命令安装插件 19 | 20 | ```bash 21 | $ cd /var/lib/grafana/plugins/ 22 | $ git clone https://github.com/aliyun/aliyun-cms-grafana.git 23 | ``` 24 | 25 | 3、重启 Grafana 服务 26 | 27 | ```bash 28 | # CentOS6 rpm 安装可以使用下面方式重启 29 | $ service grafana-server restart 30 | 31 | # CentOS7 rpm 安装可以使用下面方式重启 32 | $ systemctl restart grafana-server 33 | 34 | # k8s 部署 Grafana 可以直接删除 Grafana Pod,k8s会自动在创建一个新的 Pod 35 | ``` 36 | > 注意:此插件版本目前不支持对监控数据设置报警。 37 | 38 | ## Grafana 中配置 aliyun-cms-grafana 数据源 39 | 40 | 1、登录 Grafana 41 | 42 | 2、单击左上方的 `Configuration`,在弹出的列表中选 `Data Sources` 43 | 44 | ![](/img/grafna-1.png) 45 | 46 | 3、进入 `Data Sources` 页面,单击右上方的 `Add data source`,添加新的数据源 47 | 48 | ![](/img/grafana-2.png) 49 | 50 | 4、填写云监控数据源的配置项 51 | 52 | 配置项 | 配置内容 53 | ---|--- 54 | Name | 请您根据所需自定义一个新数据源的名称 55 | type | Type请选择CMS Grafana Service 56 | URL | URL样例:`http://metrics.cn-shanghai.aliyuncs.com`,metrics是Project名称,cn-shanghai.aliyuncs.com是Project所在地域Endpoint,在配置数据源时,需要替换成自己的Project和Region地址。 57 | Access | 使用默认值即可 58 | Auth | 使用默认值即可 59 | cloudmonitor service details | 分别填写具备读取权限的AccessKey信息。建议使用子账号的AccessKey 60 | 61 | > 不同域选择请参考[云监控接入地址](https://help.aliyun.com/document_detail/28616.html?spm=a2c4g.11186623.2.10.74283646MuJPVZ#section-xf3-lbv-zdb) 62 | 63 | 配置示例如下图: 64 | 65 | ![](/img/grafana-3.png) 66 | 67 | 最后点击 `Save & Test` 测试是否连接成功。 68 | 69 | ## 监控阿里云 SLB 70 | 71 | Grafana Dashboard 需要自己编写,作者这里已编写一个 `SLB模板` 监控,获取 `SLB模板` 请在微信公众号 `YP小站` 后台回复 `SLB` 获取下载链接。 72 | 73 | ## 总结 74 | 75 | `aliyun-cms-grafana` 插件可以通过 Grafana 展示阿里云监控 ECS、SLB、RDS等监控,本文只例举展示 SLB 监控。更多使用方法请参考 https://help.aliyun.com/document_detail/109434.html?spm=5176.10695662.1996646101.searchclickresult.4c5b44e3RrXV6v&aly_as=iKwLOy4Lw 链接。 76 | 77 | > aliyun-cms-grafana 项目地址 https://github.com/aliyun/aliyun-cms-grafana 78 | 79 | ## 参考链接 80 | 81 | - https://help.aliyun.com/document_detail/109434.html?spm=5176.10695662.1996646101.searchclickresult.4c5b44e3RrXV6v&aly_as=iKwLOy4Lw 82 | - https://github.com/aliyun/aliyun-cms-grafana -------------------------------------------------------------------------------- /kubernetes/helm-v3-新的功能.md: -------------------------------------------------------------------------------- 1 | ## Helm 是什么? 2 | Helm 是一个命令行下的客户端工具。主要用于 Kubernetes 应用程序 Chart 的`创建`、`打包`、`发布`以及`创建管理本地或者远程的Chart仓库`。 3 | 4 | ## Helm 解决什么痛点? 5 | - 如何统一管理、配置和更新分散的`k8s yaml`资源文件 6 | - 如何分发和复用一套应用模板 7 | - 如何将应用的一系列资源当做一个软件包管理 8 | - 如何统一下架一个服务在k8s创建的所有资源 9 | 10 | ## Helm v3 与 v2 变化 11 | - 最明显的变化删除 `Tiller` 12 | ![](https://www.yp14.cn/img/helm-v2-v3.jpeg) 13 | 14 | - `Release` 不再是全局资源,而是存储在各自命名空间内 15 | 16 | - `Helm 2`默认情况下使用`ConfigMaps`存储版本信息。在`Helm 3`中,将`Secrets`用作默认存储驱动程序 17 | 18 | - 把`requirements.yaml`合并成`Chart.yaml` 19 | 20 | - `helm install`需要提供名称,如果实在不想提供名称,指定参数`--generate-name`,在v2时可以不提供,不提供名称时将自动生成一个名称,这功能比较令人讨厌 21 | 22 | - 去除用于本地临时搭建`Chart Repository`的`helm serve`命令 23 | 24 | - `Values`支持`JSON Schema`校验器,自动检查所有输入的变量格式 25 | 26 | - `helm cli`命令重命名 27 | ```bash 28 | # v2中删除项目需要提供--purge参数,v3默认情况下启用此功能。要保留以前的行为,请使用 helm uninstall --keep-history 29 | helm delete 重命名为 helm uninstall 30 | helm fetch 重命名为 helm pull 31 | helm inspect 重命名为 helm show 32 | 33 | 以上命令虽然重命名,但旧命令仍然可用 34 | ``` 35 | 36 | - 创建的命名空间不存在时,在`helm 2`会自动创建命名空间,`helm 3`会遵守`Kubernetes`行为,返回错误 37 | 38 | ## Helm 3 功能更强大,赶快来使用吧! 39 | 40 | - [安装 Helm 文档](https://helm.sh/docs/intro/install/) 41 | - [Helm v3文档](https://helm.sh/docs/) 42 | - [从helm v2 迁移到 helm v3 文档](https://helm.sh/docs/topics/v2_v3_migration/) 43 | - [帮助从 Helm 2 迁移到 Helm 3 的插件](https://github.com/helm/helm-2to3) -------------------------------------------------------------------------------- /kubernetes/ingress-nginx传递用户真实ip问题.md: -------------------------------------------------------------------------------- 1 | 背景 2 | -- 3 | 4 | 业务应用经常有需要用到用户真实ip的场景,比如:异地登录的风险预警、访问用户分布统计等功能等。当有这种需求的时候,在业务上容器过程中,如果用到ingress就要注意配置了。通常,用户ip的传递依靠的是`X-Forwarded-*`参数。但是默认情况下,ingress是没有开启的。 5 | 6 | ingress的文档 https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration 还比较详细,这里介绍一下用到的3个参数: 7 | 8 | 9 | ![](../img/20200608132630839.jpeg) 10 | 11 | > 注:在文档顶栏的搜索框搜索forward字样就可以找到这3个参数 12 | 13 | 1\. use-forwarded-headers 14 | ------------------------- 15 | 16 | * 如果Nginx在其他7层代理或负载均衡后面,当期望Nginx将`X-Forwarded-*`的头信息传递给后端服务时,则需要将此参数设为true 17 | * 如果设为false(默认为false),Nginx会忽略掉`X-Forwarded-*`的头信息。false设置适用于Nginx直接对外或前面只有3层负载均衡的场景 18 | 19 | 由于ingress的主配置是从configmap中获取的,更新参数则需要修改名为nginx-configuration的configmap的配置:在data配置块下添加`use-forwarded-headers: "true"` 20 | 21 | 修改后,ingress nginx会自动加载更新nginx.conf主配置文件。下图为更新前后配置文件变化对比: 22 | 23 | ![](../img/20200608133126879.jpeg) 24 | 25 | > 注:左边为开启use-forwarded-headers后ingress nginx主配置文件,右边为开启前 26 | 27 | 2\. forwarded-for-header 28 | ------------------------ 29 | 30 | 用来设置识别客户端来源真实ip的字段,默认是`X-Forwarded-For`。如果想修改为自定义的字段名,则可以在configmap的data配置块下添加:`forwarded-for-header: "THE_NAME_YOU_WANT"`。通常情况下,我们使用默认的字段名就满足需求,所以不用对这个字段进行额外配置。 31 | 32 | 3\. compute-full-forwarded-for 33 | ------------------------------ 34 | 35 | 如果只是开启了`use-forwarded-headers: "true"`的话,会发现还是没能获取到客户端来源的真实ip,原因是当前X-Forwarded-For变量是从remote\_addr获取的值,每次取到的都是最近一层代理的ip。为了解决这个问题,就要配置compute-full-forwarded-for字段了,即在configmap的data配置块添加:`compute-full-forwarded-for: "true"`。其作用就是,将客户端用户访问所经过的代理ip按逗号连接的列表形式记录下来。 36 | 37 | 待ingress nginx加载configmap并更新主配置文件后,对比更新前后变化如下: 38 | 39 | ![](../img/20200608133445261.jpeg) 40 | 41 | ![](../img/20200608133514483.jpeg) 42 | 43 | > 注:左边是未开启compute-full-forwarded-for配置的ingress nginx主配置文件,右边是开启了的 44 | 45 | 举例说明 46 | ---- 47 | 48 | 如果从客户端ip0发起一个HTTP请求到达服务器之前,经过了三个代理proxy1、proxy2、proxy3,对应的ip分别为ip1、ip2、ip3,那么服务端最后得到的X-Forwarded-For值为:ip0,ip1,ip2。列表中并没有ip3,ip3可以在服务端通过remote_addr来获得。这样应用程序通过获取X-Forwarded-For字段的第一个ip,就可以得到客户端用户真实ip了。 49 | 50 | 注意项 51 | --- 52 | 53 | 值得注意的是,并不是所有的场景都能通过X-Forwarded-For来获取用户正式ip。 54 | 比如,当服务器前端使用了CDN的时候,X-Forwarded-For方式获取到的可能就是CDN的来源ip了, 55 | 这种情况,可以根CDN厂商约定一个字段名来记录用户真实ip,然后代理将这个字段逐层传递,最后到服务端。 56 | 57 | > - 作者:felix_yujing 58 | > - 原文链接:https://blog.csdn.net/felix_yujing/article/details/106616962 -------------------------------------------------------------------------------- /kubernetes/k8s-node-NotReady后如何保证服务可用.md: -------------------------------------------------------------------------------- 1 | ## k8s 集群提供的功能 2 | 3 | - 调度与扩展,容器应该在哪里运行,根据 `CPU` 和 `MEMORY` 实现自动扩容 4 | - 生命周期和健康状况,能自动替换失效的 `POD`,防止服务中断 5 | - 服务发现,自动发生一组容器,并实现相互通信 6 | - 监控,剔除故障节点,保证容器正常运行 7 | - 认证,谁能访问我 8 | 9 | `K8S 架构草图` 10 | 11 | ![](https://www.yp14.cn/img/k8s架构草图.png) 12 | 13 | ## Node 是什么? 14 | 15 | `Node` 是 `Kubernetes` 的`工作节点`,以前叫做 `minion`。取决于你的集群,Node 可以是一个虚拟机或者物理机器。每个 `node` 都有用于运行 `pods` 的必要服务,并由 `master` 组件管理。Node 上的服务包括 `Docker`、`网络组件 (flannel)`、`kubelet` 和 `kube-proxy`。 16 | 17 | 18 | ## Node Conditions 字段描述 19 | 20 | Node 条件 | 描述 21 | ---|--- 22 | Ready | True 节点运行状况良好并准备好接受Pod,False 如果节点运行状况不佳并且未接受Pod,Unknown 节点控制器最近一次未从节点收到消息 node-monitor-grace-period(默认值为40秒) 23 | MemoryPressure | True 节点内存上存在压力,即节点内存不足;除此以外 False 24 | PIDPressure | True 进程是否存在压力,即节点上的进程是否过多;除此以外 False 25 | DiskPressure | True 磁盘大小是否受到压力,即磁盘容量是否不足;除此以外 False 26 | NetworkUnavailable | True 节点的网络配置不正确,否则 False 27 | 28 | ## Node 故障,什么时候驱逐 Pod 29 | 30 | 是由 `Master` 组件 `kube-controller-manager` 两个参数控制: 31 | 32 | - --pod-eviction-timeout:缺省为 5m,删除故障 node 上 Pod 的宽限期 33 | - --node-monitor-grace-period:缺省为 40s,在标记 node 运行状况为不正常之前,允许运行的 node 停止响应的时间 34 | 35 | ## 保证服务可用一些方法 36 | 37 | - 多 `Pod` 部署能提高服务性能,并且遇到极端情况也保证服务高可用 38 | - 建议采用`节点互斥`的方式进行部署 39 | - 对关键组件的监控,应该建立从进程到指标的多级监控,减小服务故障的时间 40 | - Pod `存活检查` 和 `健康检查`,对容器内应用监控是非常必要的 41 | - 云上 `K8S集群` Node节点应选择多个 `可用区` 42 | - 集群Master组件 `kube-apiserver`、`kube-controller-manager`、`kube-scheduler` 一定要支持高可用 43 | - `ETCD` 也要支持高可用 44 | - 尽量程序操作,减少人为失误 45 | 46 | ## 参考链接 47 | 48 | - https://kubernetes.io/docs/reference/command-line-tools-reference/kube-controller-manager/ 49 | - https://kubernetes.io/docs/concepts/architecture/nodes/ 50 | - https://blog.fleeto.us/post/node-downtime/ 51 | -------------------------------------------------------------------------------- /kubernetes/k8s-pod-command与容器镜像cmd启动优先级详解.md: -------------------------------------------------------------------------------- 1 | ## 前言 2 | 3 | 创建 Pod 时,可以为其下的容器设置启动时要执行的命令及其参数。如果要设置命令,就填写在配置文件的 `command` 字段下,如果要设置命令的参数,就填写在配置文件的 `args` 字段下。一旦 Pod 创建完成,该命令及其参数就无法再进行更改了。 4 | 5 | ## 启动优先级 6 | 7 | 下表给出了 Docker 与 Kubernetes 中对应的字段名称: 8 | 9 | 描述 | Docker字段名称 | Kubernetes字段名称 10 | ---|---|--- 11 | 容器执行的命令 | Entrypoint | command 12 | 传给命令的参数| Cmd | args 13 | 14 | 如果要覆盖Docker容器默认的 `Entrypoint` 与 `Cmd`,需要遵循如下规则: 15 | 16 | - 如果在 Pod 配置中没有设置 `command` 或者 `args`,那么将使用 Docker 镜像自带的命令及其参数。 17 | - 如果在 Pod 配置中只设置了 `command` 但是没有设置 `args`,那么容器启动时只会执行该命令,Docker 镜像中自带的命令及其参数会被忽略。 18 | - 如果在 Pod 配置中只设置了 `args`,那么 Docker 镜像中自带的命令会使用该新参数作为其执行时的参数。 19 | - 如果在 Pod 配置中同时设置了 `command` 与 `args`,那么 Docker 镜像中自带的命令及其参数会被忽略。容器启动时只会执行配置中设置的命令,并使用配置中设置的参数作为命令的参数。 20 | 21 | ## 例子 22 | 23 | ### `Pod` 启动例子: 24 | 25 | 使用 `command` 和 `args` 示例: 26 | 27 | ```yaml 28 | apiVersion: v1 29 | kind: Pod 30 | metadata: 31 | name: demo 32 | labels: 33 | purpose: demo 34 | spec: 35 | containers: 36 | - name: demo-container 37 | image: debian 38 | command: ["printenv"] 39 | args: ["HOSTNAME", "KUBERNETES_PORT"] 40 | restartPolicy: OnFailure 41 | ``` 42 | 43 | 使用`环境变量`来设置参数: 44 | 45 | ```yaml 46 | env: 47 | - name: MESSAGE 48 | value: "hello world" 49 | command: ["/bin/echo"] 50 | args: ["$(MESSAGE)"] 51 | ``` 52 | 53 | 上面例子使用 `env` 来声明环境变量,但 k8s 中也可以使用 `ConfigMaps` 与 `Secrets` 来做为变量传入。 54 | 55 | 通过 `shell` 命令来执行: 56 | 57 | ```yaml 58 | command: ["/bin/bash"] 59 | args: ["-c", "while true; do echo "Hello World"; sleep 10;done"] 60 | ``` 61 | 62 | ### Docker 镜像启动例子 63 | 64 | `Cmd` 单独使用: 65 | 66 | ```yaml 67 | FROM ubuntu:trusty 68 | CMD ["echo", "Hello World"] 69 | ``` 70 | 71 | `Entrypoint` 单独使用: 72 | 73 | ```yaml 74 | FROM ubuntu:trusty 75 | ENV name John 76 | ENTRYPOINT ["echo", "Hello, $name"] 77 | ``` 78 | 79 | `Entrypoint` 和 `Cmd` 组合使用: 80 | 81 | ```yaml 82 | FROM ubuntu:trusty 83 | ENTRYPOINT ["/bin/ping", "-c", "10"] 84 | CMD ["localhost"] 85 | ``` 86 | 87 | ## 参考链接 88 | 89 | - https://kubernetes.io/zh/docs/tasks/inject-data-application/define-command-argument-container/ -------------------------------------------------------------------------------- /kubernetes/k8s故障排查指南-Orphaned-pod-found-but-volume-paths-are-still-present-on-disk.md: -------------------------------------------------------------------------------- 1 | ## 问题产生 2 | 3 | 在使用 Kubernetes 时,有时会遇到 Pod 状态一直处理 `Terminating`。Pod 一直没有正常退出,一般情况会使用命令 `kubectl delete pods pod-name --force --grace-period=0` 强制删除。 4 | 5 | 如果按照上面命令强制删除Pod,有一定概率会报 `Orphaned pod found - but volume paths are still present on disk` 错误。 6 | 7 | ## 问题排查 8 | 9 | 上面错误信息可以通过 `journalctl -u kubelet -f` 或者 `tail -f /var/log/messages` 命令查看到。 10 | 11 | 发现一直在报以下报错,从错误信息可以推测出,这台节点存在一个孤立的Pod,并且该Pod挂载了数据卷(volume),阻碍了Kubelet对孤立的Pod正常回收清理。 12 | 13 | ![](/img/k8s-error-1.png) 14 | 15 | kubelet 默认把一些数据信息存放在 `/var/lib/kubelet` 目录下,通过 `Pod Id`,能查找到 `9e6d9bdd-1554-45e6-8831-53e83f8ea263` pod 挂载的数据。 16 | 17 | ```bash 18 | # 查看 pods 下面数据 19 | $ ls /var/lib/kubelet/pods/9e6d9bdd-1554-45e6-8831-53e83f8ea263/ 20 | 21 | containers etc-hosts plugins volumes 22 | ``` 23 | 24 | ## 问题解决方法 25 | 26 | 把错误信息通过谷歌搜索,发现 kubernetes 项目中有一个 `issues` 提到这个问题。 27 | 28 | Issue 链接:https://github.com/kubernetes/kubernetes/issues/60987 29 | 30 | 通过查看 `etc-hosts` 文件的 `pod name` 名称,查看集群中是否还有相关实例在运行,如果没有直接删除 `9e6d9bdd-1554-45e6-8831-53e83f8ea263` 目录。 31 | 32 | > 注意:直接删除 pod 挂载目录有一定的 `危险性`,需要确认是否能删除,如果确认没有问题可以直接删除。 33 | 34 | ```bash 35 | # 查看 etc-hosts 文件中 pod name 名称 36 | $ cat /var/lib/kubelet/pods/9e6d9bdd-1554-45e6-8831-53e83f8ea263/etc-hosts 37 | 38 | # 删除 9e6d9bdd-1554-45e6-8831-53e83f8ea263 目录 39 | $ cd /var/lib/kubelet/pods/ 40 | $ rm -rf 9e6d9bdd-1554-45e6-8831-53e83f8ea263 41 | ``` 42 | 43 | 现在在通过 `journalctl -u kubelet -f` 命令看kubelet日志,就没有 `Orphaned pod found - but volume paths are still present on disk` 报错了。 44 | 45 | 如果 pod 挂载目录不能删除,请参考上面 `Issue 链接` 查找更好的解决方法。 -------------------------------------------------------------------------------- /kubernetes/k8s集群内pod如何与本地网络打通实现debug.md: -------------------------------------------------------------------------------- 1 | ## 前言 2 | 3 | 大家都知道,在没有K8S集群时,我们能直接连接测试环境服务实现debug。随着K8S到来,我们无法直接连接业务服务dubug,K8S Pod 分配的IP地址是集群内部网络,集群外部网络是无法直接访问到Pod,那有什么好的解决方法能直接连接Pod?下面介绍下开源 `Telepresence`。 4 | 5 | ## Telepresence 简介 6 | 7 | Telepresence 是一种开源工具,可让您在本地运行单个服务,同时将该服务连接到远程 Kubernetes 集群。这使开发 multi-service 应用程序的开发人员能够: 8 | 9 | - 对单个服务进行快速本地开发,即使该服务依赖于集群中的其他服务。对您的服务进行更改并保存,您可以立即看到正在运行的新服务。 10 | - 使用本地安装的任何工具来 测试/调试/编辑 您的服务。例如,您可以使用调试器或 IDE! 11 | - 让您的本地开发机器像 Kubernetes 集群的一部分一样运行。如果您的机器上有一个应用程序要针对集群中的服务运行——这很容易做到。 12 | 13 | > 开源地址: https://github.com/telepresenceio/telepresence 14 | 15 | ## Telepresence 如何运行 16 | 17 | Telepresence 在 Kubernetes 集群中运行的 pod 中部署双向网络代理。此 pod 将数据从您的 Kubernetes 环境(例如 TCP 连接、环境变量、卷)代理到本地进程。本地进程的网络被透明覆盖,以便 DNS 调用和 TCP 连接通过代理路由到远程 Kubernetes 集群。 18 | 19 | 这种方法给出: 20 | 21 | - 您的本地服务可以完全访问远程集群中的其他服务 22 | - 您的本地服务对 Kubernetes `environment`、`secrets`和 `ConfigMap` 的完全访问权限 23 | - 您的远程服务可以完全访问您的本地服务 24 | 25 | ## Telepresence 支持的运行平台 26 | 27 | - Mac OS X 28 | - Linux 29 | 30 | ## Telepresence 安装 31 | 32 | 可使用 Homebrew、apt 或 dnf 安装 33 | 34 | ## Telepresence 使用报告 35 | 36 | Telepresence 收集有关其用户的一些基本信息,以便它可以发送重要的客户通知,例如新版本可用性和安全公告。我们还使用这些信息匿名汇总基本使用情况分析。要禁用此行为,请设置环境变量 `SCOUT_DISABLE`: 37 | 38 | ```bash 39 | export SCOUT_DISABLE=1 40 | ``` 41 | 42 | ## Telepresence 使用方法 43 | 44 | 这里不在描述,具体参考 https://www.telepresence.io/tutorials/kubernetes 45 | 46 | ## 参考链接 47 | 48 | - https://github.com/telepresenceio/telepresence 49 | - https://www.telepresence.io/discussion/overview -------------------------------------------------------------------------------- /kubernetes/kubectl高亮输出.md: -------------------------------------------------------------------------------- 1 | ## kubecolor 带有色彩输出 2 | 3 | - 获取 kubernetes node 节点信息 4 | 5 | ![](../img/95733375-04929680-0cbd-11eb-82f3-adbcfecf4a3e.png) 6 | 7 | - 显示 kubernetes pods 详细信息 8 | 9 | ![](../img/95733389-08beb400-0cbd-11eb-983b-cf5138277fe3.png) 10 | 11 | - 更换背影颜色主题 12 | 13 | ![](../img/95733403-0c523b00-0cbd-11eb-9ff9-abc5469e97ca.png) 14 | 15 | 从上面来看,带有色彩输出比没有带色彩输出看的更舒服些。 16 | 17 | ## Kubecolor 如何运行? 18 | 19 | kubecolor 为 kubectl 命令输出着色,不执行任何其他操作。kubecolor 在内部调用 `kubectl command` 并尝试对输出进行着色。 20 | 21 | ## Kubecolor 安装 22 | 23 | - 二进制文件安装 24 | 25 | 打开 `https://github.com/dty1er/kubecolor/releases` 页面,下载相应的二进制文件,下载文件后,把文件放到 `/usr/local/bin` 目录下,并把文件添加执行权限。 26 | 27 | - Mac 安装 28 | 29 | ```bash 30 | $ brew install dty1er/tap/kubecolor 31 | ``` 32 | 33 | ## Kubecolor 用法 34 | 35 | 如果习惯使用 kubectl,可以把 kubecolor 命令做一个 kubectl 别名。具体在 .bash_profile 文件中配置,下面是具体配置。kubecolor 使用和 kubectl 命令方法一样。 36 | 37 | ```bash 38 | alias kubectl="kubecolor" 39 | ``` 40 | 41 | 当 kubecolor 输出 tty 不是标准输出时,它会自动禁用着色。例如,如果您正在运行 `kubecolor get pods > result.txt` 或 `kubecolor get pods | grep xxx`,则输出将传递到文件或其它命令,因此不会着色。在这种情况下,您可以通过传递 `--force-colors` 标志来强制 kubecolor 进行着色。 42 | 43 | > 项目地址:https://github.com/dty1er/kubecolor 44 | 45 | ## 参考链接 46 | 47 | - https://github.com/dty1er/kubecolor -------------------------------------------------------------------------------- /kubernetes/kubernetes-pod应用性能分析工具-kubectl-flame.md: -------------------------------------------------------------------------------- 1 | ## 什么是性能分析? 2 | 3 | `性能分析`是分析应用程序性能以改善代码段性能的行为。可视化配置文件并快速识别性能问题的最流行方法之一是生成 `“火焰图”`。例如下图 4 | 5 | ![](../img/cpu-mysql-crop-500.png) 6 | 7 | y轴是堆栈深度,x轴跨越样本总体。 每个矩形都是一个函数,其中的宽度表示它在配置文件中出现的频率。 从左到右的顺序并不重要(堆栈按字母顺序排序)。 8 | 9 | ## 在Kubernetes上如何分析应用性能? 10 | 11 | 应用性能分析是一项艰巨的任务。 大多数探查器有两个主要问题: 12 | 13 | - 需要修改应用程序。 通常,可以通过将标志添加到执行命令或将一些性能分析库导入代码中来实现。 14 | - 由于在性能分析过程中会严重影响性能,因此通常避免在产品中进行性能分析。 15 | 16 | 在Kubernetes集群中运行的应用程序上执行分析时,甚至更加困难。 需要部署一个包含配置文件修改的新容器映像,而不是当前正在运行的容器。 此外,当应用程序重新启动时,某些性能问题可能会消失,这使调试变得困难。 17 | 18 | ## 在Kubernetes应用性能分析解决方案? 19 | 20 | Kubernetes 中可以使用 `Kubectl Flame` 分析 Pod 应用性能。`Kubectl Flame` 是一个kubectl插件,可以使在Kubernetes中运行的分析应用程序获得流畅的体验,而无需进行任何应用程序修改或停机。 另外,kubectl flame的目标是通过最大程度地降低性能损失来实现生产友好。 21 | 22 | > 源码地址:https://github.com/VerizonMedia/kubectl-flame 23 | 24 | ## 运行原理 25 | 26 | `kubectl flame` 在与目标容器相同的节点上启动 Kubernetes Job。在后台kubectl-flame使用`async-profiler`来为Java应用程序生成火焰图。通过共享`/tmp`文件夹与目标JVM进行交互。Golang支持基于`ebpf`分析。Python支持基于`py-spy`。 27 | 28 | ## 使用要求 29 | 30 | - 支持的语言:Go,Java(任何基于JVM的语言)和 Python 31 | - 使用Docker作为容器运行时的Kubernetes集群(已在GKE,EKS和AKS上测试) 32 | 33 | ## 安装 34 | 35 | ```bash 36 | $ kubectl krew install flame 37 | ``` 38 | 39 | ## 使用 40 | 41 | ### 分析 Kubernetes Pod 42 | 43 | 分析 Java 应用 mypod 1分钟,并在将火焰图保存到 /tmp/flamegraph.svg 44 | 45 | ```bash 46 | $ kubectl flame mypod -t 1m --lang java -f /tmp/flamegraph.svg 47 | ``` 48 | 49 | ### 分析基于 alpine 操作系统的容器 50 | 51 | 在基于 alpine 的容器中分析 Java 应用程序需要使用 `--alpine` 标志 52 | 53 | ```bash 54 | $ kubectl flame mypod -t 1m -f /tmp/flamegraph.svg --lang Java --alpine 55 | ``` 56 | 57 | > 注意:仅 Java 应用程序需要此 `--alpine` 标志,而 `Go` 分析则不需要该标志。 58 | 59 | ### 分析 sidecar 容器 60 | 61 | 包含多个容器的 Pod 需要将目标容器指定为参数 62 | 63 | ```bash 64 | $ kubectl flame mypod -t 1m --lang go -f /tmp/flamegraph.svg mycontainer 65 | ``` 66 | 67 | ### 分析 Golang 多进程容器 68 | 69 | 在包含多个进程的Pod中对Go应用程序进行性能分析需要通过 `--pgrep` 标志指定目标进程名称: 70 | 71 | ```bash 72 | $ kubectl flame mypod -t 1m --lang go -f /tmp/flamegraph.svg --pgrep go-app 73 | ``` 74 | 75 | > Java分析假定进程名称为java。`--pgrep` 如果您的进程名称不同,请使用标志。 76 | 77 | ## 参考链接 78 | 79 | - https://github.com/VerizonMedia/kubectl-flame 80 | - https://blog.csdn.net/weixin_26746861/article/details/108935182 -------------------------------------------------------------------------------- /kubernetes/kubernetes-v1.18正式发布之功能预览.md: -------------------------------------------------------------------------------- 1 | ## 发布徽标 2 | 3 | ![](/img/k8s-v1.18.png) 4 | 5 | 6 | ## Kubernetes v1.18 新增功能 7 | 8 | ### Kubernetes拓扑管理器(Topology Manager ) 升级到Beta版 ! 9 | 10 | [拓扑管理器功能](https://github.com/nolancon/website/blob/f4200307260ea3234540ef13ed80de325e1a7267/content/en/docs/tasks/administer-cluster/topology-manager.md)是 1.18 版中 Kubernetes 的 `beta` 功能,它使 `CPU` 和 `设备`(例如SR-IOV VF)的 `NUMA` 对齐方式能够使您的工作负载在针对低延迟而优化的环境中运行。在引入拓扑管理器之前,CPU和设备管理器将做出彼此独立的资源分配决策。这可能会导致在多套接字( multi-socket )系统上分配不良,从而导致关键型应用程序的性能下降。 11 | 12 | ### Serverside Apply引入Beta 2版本 13 | 14 | Serverside Apply 在 1.16 中升级为 Beta,但现在在 1.18 中引入了第二个 Beta。这个新版本将跟踪和管理所有新Kubernetes 对象的字段更改,从而使你知道更改了什么资源以及何时更改的。 15 | 16 | ### 使用 IngressClass 扩展 Ingress 并用 IngressClass 替换不推荐使用的注释 17 | 18 | 在 Kubernetes 1.18 中,Ingress 有两个重要的补充:一个新 `pathType` 字段和一个新 `IngressClass` `资源。该pathType` 字段允许指定路径应如何匹配。除了默认 `ImplementationSpecific` 类型外,还有 `new Exact` 和 `Prefixpath` 类型。 19 | 20 | 该 `IngressClass` 资源用于描述 Kubernetes 集群中的 Ingress 类型。入口可以通过 `ingressClassName` 在入口上使用新字段来指定与它们关联的类。此新资源和字段替换了不建议使用的 `kubernetes.io/ingress.class` 注释。 21 | 22 | ### SIG-CLI 引入 kubectl debug 命令 23 | 24 | SIG CLI 已经讨论了调试实用程序的需求已经有一段时间。随着[临时容器](https://kubernetes.io/docs/concepts/workloads/pods/ephemeral-containers/)的发展,我们可以通过在 kubectl exec 。该 kubectl debug [命令的添加](https://github.com/kubernetes/enhancements/blob/master/keps/sig-cli/20190805-kubectl-debug.md)(它是Alpha,但欢迎您提供反馈),使开发人员可以轻松地在集群中调试其 Pod。我们认为这种增加是无价的。此命令允许创建一个临时容器,该容器在要检查的Pod旁边运行,并且还附加到控制台以进行交互式故障排除。 25 | 26 | ### 为 Kubernetes 引入 Windows CSI 支持 Alpha版本 27 | 28 | 随着 Kubernetes 1.18 的发布,用于 Windows 的 CSI代理 的Alpha版本也已发布。CSI代理使非特权(预先批准)的容器能够在Windows 上执行特权存储操作。现在,可以利用CSI代理在Windows中支持CSI驱动程序。SIG存储在1.18版本中取得了很大进步。 29 | 30 | ## API 相关弃用 31 | 32 | - 所有资源的 API `apps/v1beta1` 和 `apps/v1beta2` 都将弃用,请改用 `apps/v1` 替代。 33 | - `daemonsets`, `deployments`, `replicasets` 资源的 API `extensions/v1beta1` 将被弃用,请改用 apps/v1 替代。 34 | - `networkpolicies` 资源的 API `extensions/v1beta1` 将被弃用,请改用 networking.k8s.io/v1 替代。 35 | - `podsecuritypolicies` 资源的 API `extensions/v1beta1` 将被弃用,请使用 `policy/v1beta1` 替代。 36 | 37 | ## 总结 38 | 39 | 上面内容是作者感觉需要关注或者注意的部分,其它功能请参考官方 https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.18.md 40 | 41 | ## 参考链接 42 | 43 | - https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.18.md -------------------------------------------------------------------------------- /kubernetes/kubernetes-yaml生成器.md: -------------------------------------------------------------------------------- 1 | 还在为写 `kubernetes yaml` 烦恼吗?还在为记不住 `kubernetes yaml` 而心累吗?这些都没有关系,推荐一个kubernetes yaml `生成器`,帮小伙伴们解决这些痛苦! 2 | 3 | ![样例](../img/k8syaml-1.png) 4 | 5 | [kubernetes yaml 生成器](https://k8syaml.com/) -------------------------------------------------------------------------------- /kubernetes/kubernetes-故障解决心得一.md: -------------------------------------------------------------------------------- 1 | ## 故障一 2 | 3 | ### 故障现象 4 | 5 | kubelet 启动不了,通过命令 `journalctl -u kubelet` 查看日志,报 `Failed to start ContainerManager failed to initialize top level QOS containers: failed to update top level Burstable QOS cgroup : failed to set supported cgroup subsystems for cgroup [kubepods burstable]: failed to find subsystem mount for required subsystem: pids` 6 | 7 | ### 故障分析 8 | 9 | 根据报错,有用的信息是 `failed to find subsystem mount for required subsystem: pids`,通过命令 `ls -l /sys/fs/cgroup/systemd/kubepods/burstable/` 查看,该目录下没有 `pids` 目录。 10 | 11 | `SupportPodPidsLimit` 在 kubernetes `1.14+` 默认开启。 SupportNodePidsLimit 在 `1.15+` 默认开启。 12 | 13 | > 相关Issues:https://github.com/kubernetes/kubernetes/issues/79046 14 | 15 | ### 解决方法 16 | 17 | - 方法一:编辑 kubelet 配置文件,添加 `--feature-gates=SupportPodPidsLimit=false,SupportNodePidsLimit=false` 参数,后面在重启 kubelet 服务。 18 | - 方法二:可以升级系统内核 `5+` 版本 19 | 20 | ## 故障二 21 | 22 | ### 故障现象 23 | 24 | Docker daemon oci 故障,日志报 `docker: Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "process_linux.go:301: running exec setns process for init caused \"exit status 40\"": unknown.` 25 | 26 | ### 解决方法 27 | 28 | ```bash 29 | # 清理缓存 30 | $ echo 1 > /proc/sys/vm/drop_caches 31 | 32 | # 永久生效 33 | $ echo "vm.min_free_kbytes=1048576" >> /etc/sysctl.conf 34 | $ sysctl -p 35 | 36 | # 重启 docker 服务,让 docker 应用内核设置 37 | $ systemctl restart docker 38 | ``` 39 | 40 | ## 故障三 41 | 42 | ### 报错现象 43 | 44 | kubelet 日志报 `network plugin is not ready: cni config uninitialized` 45 | 46 | ### 解决方法 47 | 48 | 网络插件(flannel 或者 calico)没有安装或者安装失败。 49 | 50 | ## 故障四 51 | 52 | ### 故障现象 53 | 54 | kubelet 日志报 `Failed to connect to apiserver: the server has asked for the client to provide credentials` 55 | 56 | ### 故障分析 57 | 58 | 从上面 kubelet 日志信息能得出,kubelet 客户端证书已过期,导致 Node节点状态处于 `NotReady`。 59 | 60 | 也可以通过命令 `openssl x509 -noout -enddate -in {证书路径}` 来查看证书到期日期。 61 | 62 | ### 解决方法 63 | 64 | #### kubeadm 部署的 Kubernetes 解决方法 65 | 66 | kubernetes 1.15+ 版本可以直接通过命令 `kubeadm alpha certs renew ` 更新。 67 | 68 | kubernetes 小于 1.15 版本的,可以参考 `https://github.com/yuyicai/update-kube-cert` 项目更新 69 | 70 | #### 二进制部署的 Kubernetes 解决方法 71 | 72 | ```bash 73 | # 删除旧的 kubelet 证书文件 74 | $ rm -f /opt/kubernetes/ssl/kubelet* 75 | 76 | # 删除 kubelet kubeconfig 文件 77 | $ rm -f /opt/kubernetes/cfg/kubelet.kubeconfig 78 | 79 | # 重启 kubelet 服务,让 master 重新颁发客户端证书 80 | $ systemctl restart kubelet 81 | ``` 82 | 83 | ## 参考链接 84 | - https://adoyle.me/Today-I-Learned/k8s/k8s-deployment.html -------------------------------------------------------------------------------- /kubernetes/kubernetes北极星指标.md: -------------------------------------------------------------------------------- 1 | ## polaris 简介 2 | 3 | `Polaris`:它会进行`各种检查`以确保`使用最佳实践`来配置 `Kubernetes pod` 和 `controllers` ,从而帮助您避免将来出现的问题。 4 | 5 | ## Polaris Dashboard 展示 6 | ![](https://www.yp14.cn/img/dashboard-polaris.png) 7 | 8 | ## Polaris 可以在几种不同的模式下运行 9 | 10 | - `作为 dashboard`:您可以审核集群内部正在运行的内容 11 | - `作为 webhook`:您可以自动拒绝不遵守规定策略的工作负载 12 | - `作为 命令行工具`:您可以测试本地YAML文件,例如,作为 CI/CD 流程的一部分 13 | 14 | ## Polaris 检查分为以下几类 15 | 16 | - Health Checks 17 | - Images 18 | - Networking 19 | - Resources 20 | - Security 21 | 22 | ## Dashboard 快速入门 23 | ```bash 24 | $ kubectl apply -f https://github.com/FairwindsOps/polaris/releases/latest/download/dashboard.yaml 25 | 26 | $ kubectl port-forward --namespace polaris svc/polaris-dashboard 8080:80 27 | 28 | # 浏览器访问 http://localhost:8080 29 | ``` 30 | 31 | ## Dashboard Helm 安装 32 | ```bash 33 | $ helm repo add reactiveops-stable https://charts.reactiveops.com/stable 34 | 35 | $ helm upgrade --install polaris reactiveops-stable/polaris --namespace polaris 36 | 37 | $ kubectl port-forward --namespace polaris svc/polaris-dashboard 8080:80 38 | ``` 39 | 40 | ## Webhook 安装 41 | ```bash 42 | # kubectl 安装 43 | $ kubectl apply -f https://github.com/fairwindsops/polaris/releases/latest/download/webhook.yaml 44 | 45 | # Helm 安装 46 | $ helm repo add reactiveops-stable https://charts.reactiveops.com/stable 47 | 48 | $ helm upgrade --install polaris reactiveops-stable/polaris --namespace polaris \ 49 | --set webhook.enable=true --set dashboard.enable=false 50 | ``` 51 | 52 | ## CLI 安装 和 使用CI/CD运行 53 | 54 | - 请参考链接 https://github.com/FairwindsOps/polaris/blob/master/docs/usage.md 55 | 56 | ## 项目地址 57 | 58 | - https://github.com/FairwindsOps/polaris 59 | 60 | ## 参考链接 61 | 62 | - https://github.com/FairwindsOps/polaris 63 | - https://github.com/FairwindsOps/polaris/blob/master/docs/usage.md -------------------------------------------------------------------------------- /kubernetes/kubernetes管理虚拟机之kubevirt.md: -------------------------------------------------------------------------------- 1 | ## 什么是 KubeVirt ? 2 | 3 | `Kubevirt` 是Redhat开源的以容器方式运行虚拟机的项目,以k8s add-on方式,利用k8s CRD为增加资源类型VirtualMachineInstance(VMI), 使用容器的image registry去创建虚拟机并提供VM生命周期管理。 CRD的方式是的kubevirt对虚拟机的管理不局限于pod管理接口,但是也无法使用pod的RS DS Deployment等管理能力,也意味着 kubevirt如果想要利用pod管理能力,要自主去实现,目前kubevirt实现了类似RS的功能。 kubevirt目前支持的runtime是docker和runv。 4 | 5 | ## 为什么使用 KubeVirt ? 6 | 7 | KubeVirt 技术可满足已采用或想要采用Kubernetes开发团队的需求,但他们拥有现有的基于虚拟机的工作负载,无法轻松地对其进行容器化。更具体地说,该技术提供了一个统一的开发平台,开发人员可以在该平台上构建,修改和部署驻留在公共共享环境中的应用程序容器和虚拟机中的应用程序。 8 | 9 | 好处是广泛而重大的。依赖现有基于虚拟机的工作负载团队有权快速将应用程序容器化。通过将虚拟化工作负载直接放置在开发工作流中,团队可以随时间分解它们,同时仍然可以按需使用剩余的虚拟化组件。 10 | 11 | ## KubeVirt 能做什么 ? 12 | 13 | - 利用 KubeVirt 和 Kubernetes 来管理虚拟机 14 | - 一个平台上将现有的虚拟化与容器化打通并管理 15 | - 支持虚拟机应用与容器化应用实现内部交互访问 16 | 17 | ## KubeVirt 架构 18 | 19 | 从kubevirt架构看如何创建虚拟机,Kubevirt架构如图所示,由4部分组件组成。从架构图看出kubevirt创建虚拟机的核心就是 创建了一个特殊的pod `virt-launcher` 其中的子进程包括`libvirt`和`qemu`。做过openstack nova项目的朋友应该比较 习惯于一台宿主机中运行一个`libvirtd`后台进程,`kubevirt`中采用每个pod中一个`libvirt`进程是去中心化的模式避免因为 `libvirtd` 服务异常导致所有的虚拟机无法管理。 20 | 21 | ![](/img/architecture.png) 22 | 23 | ## 虚拟机创建流程 24 | - client 发送创建VMI命令达到k8s API server. 25 | - K8S API 创建VMI 26 | - virt-controller监听到VMI创建时,根据VMI spec生成pod spec文件,创建pods 27 | - k8s调度创建pods 28 | - virt-controller监听到pods创建后,根据pods的调度node,更新VMI 的nodeName 29 | - virt-handler监听到VMI nodeName与自身节点匹配后,与pod内的virt-launcher通信,virt-laucher创建虚拟机,并负责虚拟机生命周期管理 30 | 31 | ## 项目地址与快速使用 32 | 33 | - 项目地址 https://github.com/kubevirt/kubevirt 34 | - 快速使用 https://kubevirt.io//quickstart_minikube/ 35 | 36 | ## 参考链接 37 | 38 | - https://kubevirt.io/ 39 | - https://remimin.github.io/2018/09/14/kubevirt/ -------------------------------------------------------------------------------- /kubernetes/kubernetes终端管理神器.md: -------------------------------------------------------------------------------- 1 | ## 什么是 k9s 2 | `K9s`:提供了一个基于`curses`的终端`UI`来与您的 Kubernetes 集群 `进行交互`。该项目的目的是简化`浏览`,`观察`和`管理应用程序`的过程。K9s 持续监视 Kubernetes 的更改,并提供后续命令以与观察到的Kubernetes资源进行交互。 3 | 4 | 5 | ## K9s 输出展示 6 | 7 | - 展示 Pods 8 | ![](/img/k9s-pod.png) 9 | 10 | - 展示 Logs 11 | ![](/img/k9s-logs.png) 12 | 13 | - 展示 Deployments 14 | ![](/img/k9s-dp.png) 15 | 16 | - 展示 Deployments yaml 配置 17 | ![](/img/k9s-dp-yaml.png) 18 | 19 | ## 安装前检查 20 | 21 | K9s 使用 `256色` 终端模式。在`Nix系统上`,确保已相应设置 `TERM`。 22 | 23 | ```bash 24 | $ export TERM=xterm-256color 25 | ``` 26 | 27 | ## 安装 28 | 29 | - Mac OSX 30 | ```bash 31 | $ brew install derailed/k9s/k9s 32 | ``` 33 | 34 | - Linux,Windows 和 Mac 都可以通过二进制安装 35 | 36 | 访问 `releases` 资源页面下载安装 `https://github.com/derailed/k9s/releases` 37 | 38 | ## 项目地址 39 | - https://github.com/derailed/k9s 40 | 41 | ## 参考链接 42 | - https://github.com/derailed/k9s/blob/master/README.md -------------------------------------------------------------------------------- /kubernetes/动画版Kubernetes相关名词解释.md: -------------------------------------------------------------------------------- 1 | ## 前言 2 | 3 | 近几年,做为运维或者开发耳边都会听到`K8S`这个词,`K8S` 是 `Kubernetes` 简称。`Kubernetes` 这个单词中 k 与 s 中间有8个字母,所以简称为K8S。那什么是 `K8S` ?下文通过动画简单介绍 `K8S`。 4 | 5 | ## 作者 6 | 7 | - Written by: Matt Butcher & Karen Chu 8 | - Illustrated by: Bailey Beougher 9 | - Designed by: Karen Chu 10 | 11 | ## 什么是 Pod ? 12 | 13 | ![](/img/k8s-chahua-1.png) 14 | 15 | ![](/img/k8s-chahua-2.png) 16 | 17 | ![](/img/k8s-chahua-3.png) 18 | 19 | ![](/img/k8s-chahua-4.png) 20 | 21 | `Pod`:在Kubernetes中,pod负责运行容器。每个Pod至少有一个容器, 22 | 并控制该容器的执行。当容器退出时,Pod也会死亡。 23 | 24 | 25 | ## 什么是 ReplicaSets ? 26 | 27 | ![](/img/k8s-chahua-5.png) 28 | 29 | ![](/img/k8s-chahua-6.png) 30 | 31 | `ReplicaSets`:副本集确保一组相同配置的pod以所需的副本计数运行。如果一个 Pod 终止运行,ReplicaSets 会创建一个新的替换终止的Pod,始终达到与声明 replicas 相等的值。 32 | 33 | ## 什么是 Secrets ? 34 | 35 | ![](/img/k8s-chahua-7.png) 36 | 37 | ![](/img/k8s-chahua-8.png) 38 | 39 | `Secrets`:用于存储非公共信息,如令牌、证书或密码。Secrets 可以在运行时附加到 Pods,以便将敏感的配置数据可以安全地存储在集群中。 40 | 41 | ## 什么是 Deployments ? 42 | 43 | ![](/img/k8s-chahua-9.png) 44 | 45 | ![](/img/k8s-chahua-10.png) 46 | 47 | `Deployment`:是用来控制部署和维护一组 Pod(是将Pod实际部署到群集的方式)。在后台,它使用一个 ReplicaSet 来保持 Pod 的运行,而且为部署、更新和扩展集群中的 Pod 提供了高级功能。 48 | 49 | ## 什么是 DaemonSets ? 50 | 51 | ![](/img/k8s-chahua-11.png) 52 | 53 | ![](/img/k8s-chahua-12.png) 54 | 55 | `DaemonSets`:提供了一种方法来确保 Pod 的副本在集群中的每个节点上运行。当集群发展或收缩时,DaemonSet 将这些有特殊标记的 Pods 部署到所有节点上。 56 | 57 | ## 什么是 Ingresses ? 58 | 59 | ![](/img/k8s-chahua-13.png) 60 | 61 | ![](/img/k8s-chahua-14.png) 62 | 63 | `Ingresses`:提供一种负载均衡方法,用于将群集外部的访问,负载到群集内部相应目的 Pod。一个外部的 Ingresses 入口可以导向许多不同的内部服务。 64 | 65 | ## 什么是 CronJobs ? 66 | 67 | ![](/img/k8s-chahua-15.png) 68 | 69 | ![](/img/k8s-chahua-16.png) 70 | 71 | `CronJobs`:提供了一种调度pod执行的方法。它们非常适合定期运行备份、报告和自动化测试等任务。 72 | 73 | ## 什么是 CRD ? 74 | 75 | ![](/img/k8s-chahua-17.png) 76 | 77 | ![](/img/k8s-chahua-18.png) 78 | 79 | `CustomResourceDefinitions`:简称 `CRD` 它提供了一种扩展机制,集群的操作人员和开发人员可以使用它来创建自己的资源类型。 80 | 81 | ## 结束 82 | 83 | “哦,” Phippy 满脸担忧地说,“看,午饭时间到了,我们该回家了。” 84 | 85 | Zee 松了一口气。“回家的时候可以在库伯船长的奶昔店停一下吗?” 86 | 87 | ![](/img/k8s-chahua-19.png) 88 | 89 | (Zee 恋恋不舍地走了,出门前,他回过头又看到了飞翔的蜥蜴) 90 | 91 | ![](/img/k8s-chahua-20.png) 92 | 93 | 94 | > 完整的动画下载地址:https://azure.microsoft.com/mediahandler/files/resourcefiles/phippy-goes-to-the-zoo/Phippy%20Goes%20To%20The%20Zoo_MSFTonline.pdf 95 | 96 | ## 参考链接 97 | 98 | - https://mp.weixin.qq.com/s/MRqQ6kAhAKAPb5b9zOH5Gw -------------------------------------------------------------------------------- /kubernetes/十道Kubernetes面试题.md: -------------------------------------------------------------------------------- 1 | ### 一、什么是Kubernetes集群中的minions? 2 | 3 | - 1、它们是主节点的组件。 4 | - 2、它们是集群的工作节点。[答案] 5 | - 3、他们正在监控kubernetes中广泛使用的引擎。 6 | - 4、他们是docker容器服务。 7 | 8 | ### 二、Kubernetes集群数据存储在以下哪个位置? 9 | 10 | - 1、KUBE-API服务器 11 | - 2、Kubelet 12 | - 3、ETCD [答案] 13 | - 4、以上都不是 14 | 15 | ### 三、哪个是Kubernetes控制器? 16 | 17 | - 1、ReplicaSet 18 | - 2、Deployment 19 | - 3、Rolling Updates 20 | - 4、ReplicaSet和Deployment [答案] 21 | 22 | ### 四、以下哪个是核心Kubernetes对象? 23 | 24 | - 1、Pods 25 | - 2、Services 26 | - 3、Volumes 27 | - 4、以上所有[答案] 28 | 29 | ### 五、Kubernetes Network代理在哪个节点上运行? 30 | 31 | - 1、Master Node 32 | - 2、Worker Node 33 | - 3、所有节点[答案] 34 | - 4、以上都不是 35 | 36 | ### 六、节点控制器的职责是什么? 37 | 38 | - 1、将CIDR块分配给节点 39 | - 2、维护节点列表 40 | - 3、监视节点的运行状况 41 | - 4、以上所有[答案] 42 | 43 | ### 七、Replication Controller的职责是什么? 44 | 45 | - 1、使用单个命令更新或删除多个pod 46 | - 2、有助于达到理想状态 47 | - 3、如果现有Pod崩溃,则创建新Pod 48 | - 4、以上所有[答案] 49 | 50 | ### 八、如何在没有选择器的情况下定义服务? 51 | 52 | - 1、指定外部名称[答案] 53 | - 2、指定具有IP地址和端口的端点 54 | - 3、只需指定IP地址即可 55 | - 4、指定标签和api版本 56 | 57 | ### 九、1.8版本的Kubernetes引入了什么? 58 | 59 | - 1、Taints and Tolerations [答案] 60 | - 2、Cluster level Logging 61 | - 3、Secrets 62 | - 4、Federated Clusters 63 | 64 | ### 十、Kubelet 调用的处理检查容器的IP地址是否打开的程序是? 65 | 66 | - 1、HTTPGetAction 67 | - 2、ExecAction 68 | - 3、TCPSocketAction [答案] 69 | - 4、以上都不是 70 | 71 | 72 | > - 作者:fiisio 73 | > - 原文链接:https://zhuanlan.zhihu.com/p/74560934 -------------------------------------------------------------------------------- /kubernetes/小白都会设置的k8s-rbac.md: -------------------------------------------------------------------------------- 1 | ## 前言 2 | 3 | 对于K8S新手来说,`K8S RBAC` 不能很好的掌握,今天推荐一款非常不错的 `K8S RBAC` 配置工具 `permission-manager`,小白都能配置,并且提供 `Web UI` 界面。 4 | 5 | ## permission-manager 简介 6 | 7 | `permission-manager` 是一个用于 Kubernetes RBAC 和 用户管理工具。 8 | 9 | ## permission-manager 部署 10 | 11 | - 项目地址 12 | 13 | `https://github.com/sighupio/permission-manager` 14 | 15 | - 部署依赖 16 | 17 | ```bash 18 | $ kubectl apply -f k8s/k8s-seeds/namespace.yml 19 | $ kubectl apply -f k8s/k8s-seeds 20 | ``` 21 | 22 | - 修改 `Deploy` 必填 `Env` 参数 23 | 24 | Env 名称 | 描述 25 | ---|--- 26 | PORT | 服务器暴露的端口 27 | CLUSTER_NAME | 在生成kubeconfig文件中使用的集群名称 28 | CONTROL_PLANE_ADDRESS | 在生成kubeconfig文件中的k8s api 地址 29 | BASIC_AUTH_PASSWORD | WEB UI 登陆密码(默认用户名为 admin) 30 | 31 | - 部署 32 | 33 | ```bash 34 | $ kubectl apply -f k8s/deploy.yaml 35 | ``` 36 | 37 | - 访问 WEB UI 38 | 39 | ```bash 40 | $ kubectl port-forward svc/permission-manager-service 4000 --namespace permission-manager 41 | ``` 42 | 43 | ## 如何添加新权限模板 44 | 45 | 默认只有 `developer` 和 `operation` 模板,模板都是以 `template-namespaced-resources___` 为开头。添加新的权限模板,可以参考 `k8s/k8s-seeds/seed.yml` 文件。 46 | 47 | ## WEB UI 展示 48 | 49 | - 首页 50 | 51 | ![](/img/first-page.png) 52 | 53 | - 创建一个用户 54 | 55 | ![](/img/permission-manager-2.png) 56 | 57 | - 创建的用户摘要 58 | 59 | ![](/img/permission-manager-3.png) 60 | 61 | - 用户 `Kubeconfig` 文件预览 62 | 63 | ![](/img/permission-manager-4.png) -------------------------------------------------------------------------------- /kubernetes/比官方K8S-Dashboard好用的桌面客户端:Lens.md: -------------------------------------------------------------------------------- 1 | ## Lens 介绍 2 | 3 | `Lens` 是一个强大的 kubernetes IDE。可以实时查看 kubernetes 集群状态,比如 Pod实时日志查看、集群Events实时查看、集群故障排查等。有了 Lens,不在需要敲打很长的 kubectl 命令,只要使用鼠标点击几下,非常便捷。 4 | 5 | `Lens` 支持多平台安装,目前支持 `Linux`、`MacOS`、`Windows`。 6 | 7 | ## Lens 优势 8 | 9 | - 用户体验性和可用性非常好 10 | - 多集群管理;支持数百个集群 11 | - 独立应用程序;无需在集群中安装任何东西 12 | - 集群状态实时可视化 13 | - 内置 `Prometheus` 提供资源利用率图表和历史趋势图表 14 | - 提供终端访问节点和容器 15 | - 性能经过优化,可应用于大规模集群(已在25k pod的集群进行了测试) 16 | - 完全支持 Kubernetes `RBAC` 17 | 18 | ## Lens 安装 19 | 20 | - MacOS:直接下载最新`v3.5.0`版本安装包 https://github.com/lensapp/lens/releases/download/v3.5.0/Lens-3.5.0.dmg 21 | - Windows:直接下载`v3.5.0`版本安装包 https://github.com/lensapp/lens/releases/download/v3.5.0/Lens-Setup-3.5.0.exe 22 | - Linux:访问安装文档 https://snapcraft.io/docs/installing-snapd,根据不同 Linux 版本安装不同程序 23 | 24 | ## Lens 体验 25 | 26 | ### 添加 kubernetes 集群 27 | 28 | 点击 `+` ,选择通过 `config` 文件导入。`config` 可以通过 `cat ~/.kube/config` 命令查看到。 29 | 30 | ![](/img/Lens-1.png) 31 | 32 | ### 查看集群 33 | 34 | ![](/img/Lens-2.png) 35 | 36 | ### 登陆 Pod 或者 查看 Pod 日志 37 | 38 | ![](/img/Lens-5.png) 39 | 40 | ### 查看集群事件 41 | 42 | ![](/img/Lens-6.png) 43 | 44 | ### 支持查看 helm 部署的 Resources 45 | 46 | ![](/img/Lens-7.png) 47 | 48 | Lens 内置了 helm 模板商店,可直接点击安装 49 | 50 | ![](/img/Lens-8.png) 51 | 52 | ### Lens 内置 kubectl 命令,不需要你机器环境中安装 kubectl 命令。 53 | 54 | ![](/img/Lens-9.png) 55 | 56 | ## 总结 57 | 58 | `Lens` 是一个非常强大的 IDE,可以给大家带来很多便利,值得尝试使用它。 59 | 60 | ## 参考链接 61 | 62 | - https://github.com/lensapp/lens -------------------------------------------------------------------------------- /letsencrypt/letsencrypt-dns-alias.md: -------------------------------------------------------------------------------- 1 | ### 一、写本外壳背景 2 | 1. [acme.sh](https://github.com/Neilpang/acme.sh) 使用 [DNS alias mode 功能](https://github.com/Neilpang/acme.sh/wiki/DNS-alias-mode) 申请 Let's Encrypt 证书,如果申请DNS域大约超过8个以上就会遇到 `Incorrect TXT record`错误。本人大致看了`acme.sh`脚本`alias mode`功能暂时没有发现脚本中间有bug,后本人没有办法就在`acme.sh`脚本外面套一层外壳,具体使用方法见下面内容。 3 | 4 | ### 二、使用本外壳前准备环境 5 | 1. [acme.sh 脚本安装](https://github.com/Neilpang/acme.sh/wiki/How-to-install) 6 | 2. [设置DNS CNAME 记录](https://github.com/Neilpang/acme.sh/wiki/DNS-alias-mode) 7 | 3. 安装`Python3`环境 8 | 4. [下载 letsencrypt-dns-alias.py](https://github.com/yangpeng14/DevOps/blob/master/letsencrypt/letsencrypt-dns-alias.py) 9 | 10 | ### 三、本外壳使用注意 11 | 1. 只支持`DNS alias mode 功能`。 12 | 2. 只支持`--challenge-alias`参数,不支持`--domain-alias`参数。 13 | 3. 不能往外壳传入`--domain -d --domain-alias --challenge-alias --dns --log-level --log`参数。 14 | 4. 每次向`Let's Encrypt`申请5个域名,依次累加,申请通过的域名在一断时间内不需要再次验证。 15 | 5. 开启记录日志模式,日志级别为 `2`。 16 | 6. 申请证书失败时,支持重试2次,每次等待20秒。 17 | 7. `acme.sh`脚本一定要安装在`/root/.acme.sh`目录下 18 | 19 | ### 四、使用方法 20 | 1. 第一次使用下面命令 21 | 22 | ``` 23 | $ letsencrypt-dns-alias.py --command="--issue" --challenge-alias="alias domain" --dns="dns_ali" --key-name="Ali_Key" --secret-name="Ali_Secret" --key="***" --secret="***" --domain="*.a.com,*.b.com" 24 | ``` 25 | 26 | 2. 如果`acme.sh`脚本已记录DNS厂商AK值,可以使用下面命令。 27 | 28 | ``` 29 | $ letsencrypt-dns-alias.py --command="--issue" --challenge-alias="alias domain" --dns="dns_ali" --domain="*.a.com,*.b.com" 30 | ``` 31 | 32 | 3. 上面命令中`--key-name="Ali_Key" --secret-name="Ali_Secret"` 是DNS厂商api名称,具体api支持见[How to use DNS API](https://github.com/Neilpang/acme.sh/wiki/dnsapi)。 -------------------------------------------------------------------------------- /ops/Elasticsearch查询.md: -------------------------------------------------------------------------------- 1 | #### 一、包含查询match和对时间进行范围查询range的DSL 2 | 3 | ``` 4 | 需要从message中找出包含 http-apr-8080-exec,并且限定时间范围在中午12点到13点之间的结果,找了好久终于编出了如下语句,做一个记录。 5 | 6 | GET /_search 7 | { 8 | "_source": ["message"], 9 | "query": { 10 | "bool": { 11 | "must": [ 12 | { 13 | "match": { 14 | "message": "http-apr-8080-exec" 15 | } 16 | } 17 | ], 18 | "filter": { 19 | "range": { 20 | "@timestamp": { 21 | "gte": "2018-06-15T12:00:00.000+0800", 22 | "lt": "2018-06-15T13:00:00.000+0800" 23 | } 24 | } 25 | } 26 | } 27 | }, 28 | "sort": [ { "@timestamp": { "order": "desc" } } ], 29 | "size": 5000 30 | } 31 | 32 | 参考链接:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-filter-context.html 33 | ``` 34 | 35 | #### 二、elasticdump 导出数据 36 | ``` 37 | elasticdump \ 38 | --input=http://172.16.0.195:9200/logstash-2019.01.06 \ 39 | --output=sls-2019-01-06-query-1.json \ 40 | --limit=10000 \ 41 | --searchBody '{ 42 | "query": { 43 | "bool": { 44 | "must": [ 45 | { 46 | "match": { "kubernetes.pod_name": "sls-backend-production" }, 47 | "match": { "log": "*access*" }} 48 | ], 49 | "filter": { 50 | "range": { 51 | "@timestamp": { 52 | "gte": "2019-01-06T00:00:00.000+00:00", 53 | "lt": "2019-01-06T10:00:00.000+00:00" 54 | } 55 | } 56 | } 57 | } 58 | } 59 | }' 60 | ``` 61 | 62 | #### 三、Bool Query 63 | 64 | ``` 65 | POST _search 66 | { 67 | "query": { 68 | "bool" : { 69 | "must" : { 70 | "term" : { "user" : "kimchy" } 71 | }, 72 | "filter": { 73 | "term" : { "tag" : "tech" } 74 | }, 75 | "must_not" : { 76 | "range" : { 77 | "age" : { "gte" : 10, "lte" : 20 } 78 | } 79 | }, 80 | "should" : [ 81 | { "term" : { "tag" : "wow" } }, 82 | { "term" : { "tag" : "elasticsearch" } } 83 | ], 84 | "minimum_should_match" : 1, 85 | "boost" : 1.0 86 | } 87 | } 88 | } 89 | 90 | 参考链接:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html 91 | ``` 92 | 93 | #### 四、查询索引模板命令 94 | ``` 95 | # 查询es中所有索引模板名称 96 | curl localhost:9200/_template | jq keys 97 | 98 | # 查询一个索引模板详细信息 99 | curl localhost:9200/_template/logstash | jq 100 | ``` 101 | -------------------------------------------------------------------------------- /ops/Linux服务器上有挖矿病毒kdevtmpfsi如何处理.md: -------------------------------------------------------------------------------- 1 | ## 症状表现 2 | 3 | 服务器CPU资源使用一直处于100%的状态,通过 `top` 命令查看,发现可疑进程 `kdevtmpfsi`。通过 google搜索,发现这是挖矿病毒。 4 | 5 | ![](/img/kdevtmpfsi-top.png) 6 | 7 | ## 排查方法 8 | 9 | `首先`:查看 `kdevtmpfsi` 进程,使用 `ps -ef | grep kdevtmpfsi` 命令查看,见下图。 10 | 11 | ![](/img/kdevtmpfsi-1.png) 12 | 13 | > PS: 通过 `ps -ef` 命令查出 `kdevtmpfsi` 进程号,直接 kill -9 进程号并删除 /tmp/kdevtmpfsi 执行文件。但没有过1分钟进程又运行了,这时就能想到,`kdevtmpfsi` 有守护程序或者有计划任务。通过 `crontab -l` 查看是否有可疑的计划任务。 14 | 15 | `第二步`:根据上面结果知道 `kdevtmpfsi` 进程号是 `10393`,使用 `systemctl status 10393` 发现 `kdevtmpfsi` 有守护进程,见下图。 16 | 17 | ![](/img/kdevtmpfsi-2.png) 18 | 19 | `第三步`:kill 掉 kdevtmpfsi 守护进程 `kill -9 30903 30904`,再 `killall -9 kdevtmpfsi` 挖矿病毒,最后删除 kdevtmpfsi 执行程序 `rm -f /tmp/kdevtmpfsi`。 20 | 21 | ## 事后检查 22 | 23 | - 通过 `find / -name "*kdevtmpfsi*"` 命令搜索是否还有 kdevtmpfsi 文件 24 | - 查看 Linux ssh 登陆审计日志。`Centos` 与 `RedHat` 审计日志路径为 `/var/log/secure`,`Ubuntu` 与 `Debian` 审计日志路径为 `/var/log/auth.log`。 25 | - 检查 crontab 计划任务是否有可疑任务 26 | 27 | ## 后期防护 28 | 29 | - 启用`ssh公钥登陆`,禁用密码登陆。 30 | - `云主机`:完善安全策略,入口流量,一般只开放 80 443 端口就行,出口流量默认可以不限制,如果有需要根据需求来限制。`物理机`:可以通过`硬件防火墙`或者`机器上iptables` 来开放出入口流量规则。 31 | - 本机不是直接需要对外提供服务,可以拒绝外网卡入口所有流量,通过 `jumper` 机器内网登陆业务机器。 32 | - 公司有能力可以搭建安全扫描服务,定期检查机器上漏洞并修复。 33 | 34 | `小结`:以上例举几点措施,不全。这里只是抛砖引玉的效果,更多的措施需要结合自己业务实际情况,否则就空中楼阁。 -------------------------------------------------------------------------------- /ops/Nginx服务指标监测.md: -------------------------------------------------------------------------------- 1 | ## ngxtop 简介 2 | 3 | `ngxtop` 解析您的 nginx 访问日志,并输出 top nginx服务器有用的(类似)指标。因此,您可以实时了解服务的状况。 4 | 5 | ## ngxtop 默认输出 6 | 7 | ```bash 8 | $ ngxtop 9 | ``` 10 | ![](/img/ngtop-1.png) 11 | 12 | ## 查看客户端 TOP IP 13 | ```bash 14 | $ ngxtop top remote_addr 15 | 16 | running for 20 seconds, 3215 records processed: 159.62 req/sec 17 | 18 | top remote_addr 19 | | remote_addr | count | 20 | |-----------------+---------| 21 | | 118.173.177.161 | 20 | 22 | | 110.78.145.3 | 16 | 23 | | 171.7.153.7 | 16 | 24 | | 180.183.67.155 | 16 | 25 | | 183.89.65.9 | 16 | 26 | | 202.28.182.5 | 16 | 27 | | 1.47.170.12 | 15 | 28 | | 119.46.184.2 | 15 | 29 | | 125.26.135.219 | 15 | 30 | | 125.26.213.203 | 15 | 31 | ``` 32 | 33 | ## 列出 4xx 和 5xx 以及 HTTP referer 34 | ```bash 35 | $ ngxtop -i 'status >= 400' print request status http_referer 36 | 37 | running for 2 seconds, 28 records processed: 13.95 req/sec 38 | 39 | request, status, http_referer: 40 | | request | status | http_referer | 41 | |-----------+----------+----------------| 42 | | - | 400 | - | 43 | ``` 44 | 45 | ## 安装 46 | ```bash 47 | $ pip install ngxtop 48 | ``` 49 | 50 | ## 项目地址 51 | - https://github.com/lebinh/ngxtop 52 | 53 | ## 参考链接 54 | - https://github.com/lebinh/ngxtop -------------------------------------------------------------------------------- /ops/Nginx配置可视化管理.md: -------------------------------------------------------------------------------- 1 | ## Nginx 配置可视化UI展示 2 | 3 | ![Login](../img/nginx-login.png) 4 | 5 | ![Home](../img/nginx-home.png) 6 | 7 | ![Upstream](../img/nginx-upstream.png) 8 | 9 | ![listen](../img/nginx-lisner.png) 10 | 11 | ![Location](../img/nginx-location.png) 12 | 13 | ![Conf](../img/nginx-conf.png) 14 | 15 | ## 功能 16 | 17 | - Nginx 可视化管理 18 | - Nginx 配置管理 19 | - Nginx 性能监控 20 | 21 | ## 部署 22 | 23 | ### 快速部署 24 | 25 | ```bash 26 | docker run --detach \ 27 | --publish 80:80 --publish 8889:8889 \ 28 | --name nginx_ui \ 29 | --restart always \ 30 | crazyleojay/nginx_ui:latest 31 | ``` 32 | 33 | ### 数据持久化部署 34 | 35 | `配置文件路径`:/usr/local/nginx/conf/nginx.conf 36 | 37 | ```bash 38 | docker run --detach \ 39 | --publish 80:80 --publish 8889:8889 \ 40 | --name nginx_ui \ 41 | --restart always \ 42 | --volume /home/nginx.conf:/usr/local/nginx/conf/nginx.conf \ 43 | crazyleojay/nginx_ui:latest 44 | ``` 45 | 46 | > 项目地址:https://github.com/onlyGuo/nginx-gui 47 | 48 | ## 小结 49 | 50 | 该项目适用于`测试环境`或者`本地开发环境`不适合`生产环境`,提供给不懂Nginx配置人员使用,通过Web界面能简单的配置。 51 | 52 | ## 参考链接 53 | 54 | - https://github.com/onlyGuo/nginx-gui -------------------------------------------------------------------------------- /ops/es6自定义索引模板.md: -------------------------------------------------------------------------------- 1 | #### 一、查询索引模板命令 2 | ``` 3 | # 查询es中所有索引模板名称 4 | curl localhost:9200/_template | jq keys 5 | 6 | # 查询一个索引模板详细信息 7 | curl localhost:9200/_template/logstash | jq 8 | ``` 9 | 10 | 11 | #### 二、添加自定义nginx索引模板,因为索引名不使用logstash,所以需要自定义 12 | 13 | ``` 14 | # 参考链接 15 | # https://github.com/logstash-plugins/logstash-output-elasticsearch/blob/7.x/lib/logstash/outputs/elasticsearch/elasticsearch-template-es6x.json 16 | # https://www.jianshu.com/p/1f67e4436c37 17 | 18 | curl -XPUT "http://localhost:9200/_template/nginx_template" -H 'Content-Type: application/json' -d' 19 | { 20 | "template" : "*nginx*", 21 | "version" : 60001, 22 | "settings" : { 23 | "index.refresh_interval" : "5s" 24 | }, 25 | "mappings" : { 26 | "_default_" : { 27 | "dynamic_templates" : [ { 28 | "message_field" : { 29 | "path_match" : "message", 30 | "match_mapping_type" : "string", 31 | "mapping" : { 32 | "type" : "text", 33 | "norms" : false 34 | } 35 | } 36 | }, { 37 | "string_fields" : { 38 | "match" : "*", 39 | "match_mapping_type" : "string", 40 | "mapping" : { 41 | "type" : "text", "norms" : false, 42 | "fields" : { 43 | "keyword" : { "type": "keyword", "ignore_above": 256 } 44 | } 45 | } 46 | } 47 | } ], 48 | "properties" : { 49 | "@timestamp": { "type": "date"}, 50 | "@version": { "type": "keyword"}, 51 | "geoip" : { 52 | "dynamic": true, 53 | "properties" : { 54 | "ip": { "type": "ip" }, 55 | "location" : { "type" : "geo_point" }, 56 | "latitude" : { "type" : "half_float" }, 57 | "longitude" : { "type" : "half_float" } 58 | } 59 | } 60 | } 61 | } 62 | } 63 | } 64 | ' 65 | ``` 66 | -------------------------------------------------------------------------------- /ops/mysqldump导入备份数据到阿里云RDS会报错吗.md: -------------------------------------------------------------------------------- 1 | ## 前言 2 | 3 | 大家都知道,数据量小的备份都使用 mysqldump 命令来备份,最近本人从阿里云RDS实例备份博客数据,并再次把备份出来的数据导入到RDS实例时,会遇到错误 ` [Err] 1227 - Access denied; you need (at least one of) the SUPER privilege(s) for this operation`。 4 | 5 | > PS:阿里云RDS实例版本:`5.6` 6 | 7 | 遇到上面错误感觉很奇怪,为什么没有权限写入,使用的账号是高级账号,为什么没有权限了??? 8 | 9 | ## 错误原因 10 | 11 | 通过上面报错,查找阿里云帮助文档,最后找到答案,下面是具体解决方法。 12 | 13 | - 导入RDS MySQL 实例:SQL 语句中含有需要 Supper 权限才可以执行的语句,而 RDS MySQL不提供 Super 权限,因此需要去除这类语句。 14 | - 本地 MySQL 实例没有启用 GTID。 15 | 16 | ## 解决方法 17 | 18 | 1、去除 DEFINER 子句 19 | 20 | 检查 SQL 文件,去除下面类似的子句 21 | 22 | ``` 23 | DEFINER=`root`@`%` 24 | ``` 25 | 26 | 在 Linux 平台下,可以尝试使用下面的语句去除: 27 | 28 | ``` 29 | $ sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/ ' your.sql > your_revised.sql 30 | ``` 31 | 32 | 2、去除 GTID_PURGED 子句 33 | 34 | ``` 35 | 检查 SQL 文件,去除下面类似的语句 36 | ``` 37 | 38 | ``` 39 | SET @@GLOBAL.GTID_PURGED='d0502171-3e23-11e4-9d65-d89d672af420:1-373, 40 | d5deee4e-3e23-11e4-9d65-d89d672a9530:1-616234'; 41 | ``` 42 | 43 | 在 Linux 平台,可以使用下面的语句去除 44 | 45 | ``` 46 | $ awk '{ if (index($0,"GTID_PURGED")) { getline; while (length($0) > 0) { getline; } } else { print $0 } }' your.sql | grep -iv 'set @@' > your_revised.sql 47 | ``` 48 | 49 | 3、检查修改后的文件 50 | 51 | 修改完毕后,通过下面的语句检查是否合乎要求。 52 | 53 | ``` 54 | $ egrep -in "definer|set @@" your_revised.sql 55 | ``` 56 | 57 | > 如果上面的语句没有输出,说明 SQL 文件符合要求。 58 | 59 | ## 参考链接 60 | 61 | - 阿里云文档:https://developer.aliyun.com/article/66463 -------------------------------------------------------------------------------- /ops/nginx之realip模块使用详解.md: -------------------------------------------------------------------------------- 1 | ## realip 功能介绍 2 | 3 | `用途`:当本机 `Nginx` 处于反向代理后端时可以获取到用户的`真实IP地址`。 4 | 5 | `使用`:`realip` 功能需要 `Nginx` 添加 `ngx_http_realip_module` 模块,默认情况下是不被编译,如果需要添加,请在编译时添加 `--with-http_realip_module` 选项开启它。 6 | 7 | ## realip 作用域 8 | 9 | `set_real_ip_from`、`real_ip_header` 和 `real_ip_recursive` 都可以用于 `http`、 `server`、`location` 区域配置。 10 | 11 | ## realip 部分参数解释 12 | 13 | - `set_real_ip_from`:设置反向代理服务器,即信任服务器IP 14 | - `real_ip_header X-Forwarded-For`:用户真实IP存在`X-Forwarded-For`请求头中 15 | - `real_ip_recursive`: 16 | - `off`:会将`real_ip_header`指定的HTTP头中的最后一个IP作为真实IP 17 | - `on`:会将`real_ip_header`指定的HTTP头中的最后一个不是信任服务器的IP当成真实IP 18 | 19 | 20 | ## http 头中的 X-Forwarded-For、X-Real-IP、Remote Address 解释 21 | 22 | `X-Forwarded-For` 位于HTTP请求头,是HTTP的扩展 `header`,用于表示HTTP请求端`真实IP`。 23 | 24 | 格式如下: 25 | 26 | ``` 27 | X-Forwarded-For: client, proxy1, proxy2 28 | ``` 29 | 30 | Nginx 代理一般配置为: 31 | 32 | ``` 33 | proxy_set_header Host $host; 34 | proxy_set_header X-Real-IP $remote_addr; 35 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 36 | ``` 37 | 38 | 解释: 39 | 40 | - `X-Forwarded-For`:Nginx追加上去的,但前面部分来源于nginx收到的请求头,这部分内容不是`很可信`。符合IP格式的才可以使用,否则容易引发`XSS`或者`SQL注入漏洞`。 41 | - `Remote Address`:HTTP协议没有IP的概念,`Remote Address`来自于TCP连接,表示与服务端建立TCP连接的设备IP,因此,Remote Address无法伪造。 42 | - `X-Real-IP`:HTTP代理用于表示与它产生TCP连接的设备IP,可能是其他代理,也可能是真正的请求端。 43 | 44 | ## realip 功能举例说明 45 | 46 | 下面是一个简单的架构图: 47 | 48 | ![](/img/nginx-realip-2.png) 49 | 50 | ### 假设一: 51 | 52 | 1、如果 Nginx 没有使用 `realip模块`,第二台 Nginx中 `X-Forwarded-For` 请求是 1.1.1.1,但 `remote_addr` 地址是 2.2.2.2,这时应用服务可以通过 `X-Forwarded-For` 字段获取用户真实IP。不过这里有点风险,如果中间多几层反向代理服务,就无法获取唯一一个用户真实IP。 53 | 54 | 2、如果 Nginx 使用`realip模块`,并如下设置;Nginx 会取 `X-Forwarded-For` 最后一个IP也就是 2.2.2.2 作为真实IP。最后应用服务拿到的地址也是 2.2.2.2,但事实这不是用户IP。 55 | 56 | ``` 57 | set_real_ip_from 2.2.2.2; 58 | set_real_ip_from 2.2.2.3; 59 | real_ip_header X-Forwarded-For; 60 | real_ip_recursive off; 61 | ``` 62 | 63 | 3、如果 Nginx 使用`realip模块`,并如下设置;由于 2.2.2.2 是信任服务器IP,Nginx 会继续往前查找,发现 1.1.1.1 不是信任服务器IP,就认为是真实IP。但事实 1.1.1.1 也就是用户IP。最后应用服务也拿到唯一的用户真实IP。 64 | 65 | ``` 66 | set_real_ip_from 2.2.2.2; 67 | set_real_ip_from 2.2.2.3; 68 | real_ip_header X-Forwarded-For; 69 | real_ip_recursive on; 70 | ``` 71 | 72 | ## 参考链接 73 | 74 | - https://cloud.tencent.com/developer/article/1521273 75 | - https://www.cnblogs.com/amyzhu/p/9610056.html 76 | -------------------------------------------------------------------------------- /ops/sentry历史数据清理.md: -------------------------------------------------------------------------------- 1 | #### 一、Sentry数据软清理 (清理完不会释放磁盘,如果很长时间没有运行,清理时间会很长) 2 | 3 | ``` 4 | # 登陆 sentry_worker_1 容器 5 | $ docker exec -it sentry_worker_1 bash 6 | 7 | # 保留60天数据。cleanup的使用delete命令删除postgresql数据,但postgrdsql对于delete, update等操作,只是将对应行标志为DEAD,并没有真正释放磁盘空间 8 | $ sentry cleanup --days 60 9 | ``` 10 | 11 | #### 二、postgres数据清理 (清理完后会释放磁盘空间) 12 | ``` 13 | # 登陆 sentry_postgres_1 容器 14 | $ docker exec -it sentry_postgres_1 bash 15 | 16 | # 运行清理 17 | $ vacuumdb -U postgres -d postgres -v -f --analyze 18 | ``` 19 | 20 | #### 三、定时清理脚本 21 | ``` 22 | #!/usr/bin/env bash 23 | 24 | docker exec -i sentry_worker_1 sentry cleanup --days 60 && docker exec -i -u postgres sentry_postgres_1 vacuumdb -U postgres -d postgres -v -f --analyze 25 | ``` 26 | -------------------------------------------------------------------------------- /ops/zignis-plugin-read.md: -------------------------------------------------------------------------------- 1 | ## 什么是 zignis-plugin-read ? 2 | 这是一个简单的工具插件,目的是实现一个能够方便的`获取网页主体`的`命令行工具`,以方便我们以各种方式`搜集整理学习资料`,`支持各种格式`,有一些特色模式,为了简单这里也称之为格式。 3 | 4 | ## 支持的格式 5 | 格式名称 | 解释 6 | ---|--- 7 | markdown , md | 一种纯文本格式的标记语言 8 | pdf | 便携式文件格式 9 | html | 生成一个html页面文件 10 | png | 无损压缩的位图图形格式 11 | jpeg | 有损压缩图片格式 12 | less | 高亮阅读 13 | web | 把 markdown 输出成网页,并集成了 Markdown 编辑器,即可以查看,也可以修改 14 | epub | 电子书格式 15 | mobi | 亚马逊电子书格式 16 | console | 将 markdown 直接输出到终端,可以按需处理 17 | 18 | ## 主要参数 19 | 选项 | 解释 20 | ---|--- 21 | --version | 显示版本号 22 | --format, -F | 需要转换的格式 23 | --read-only, --ro | 只呈现html,与web格式一起使用 24 | --debug | 调试 25 | --port | 代理,比如抓取掘金文章中图片就需要开启 26 | --localhost | 本地主机端口 27 | --open-browser, --ob | Web格式自动打开浏览器 28 | --rename | 获取的文章重新命名 29 | --dir | 获取的文章存储本地位置 30 | 31 | ## 安装 32 | ```bash 33 | $ npm i -g zignis zignis-plugin-read 34 | 35 | # 默认会下载 puppeteer,比较慢,加上这个环境变量就不下了,也可以 `Ctrl+C` 取消下载 36 | # 没有 puppeterr, `html`, `png`, `jpeg` 和 `pdf` 就不能工作了。 37 | $ PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true npm i -g zignis zignis-plugin-read 38 | 39 | # 用法 40 | $ zignis read [URL|本地 markdown] --format=[FORMAT] 41 | 42 | # 帮助 43 | $ zignis read [url] 44 | ``` 45 | 46 | ## 例子 47 | ```bash 48 | # 获取掘金一篇文章 49 | $ zignis read https://juejin.im/post/5dd6a8106fb9a05a7f75fe74 50 | 51 | # 获取掘金一篇文章,转换为 markdown 格式 52 | $ zignis read https://juejin.im/post/5dd6a8106fb9a05a7f75fe74 --format=markdown 53 | 54 | # 打开一个空的 markdown 编辑器 55 | $ zignis read --format=web 56 | 57 | # 欣赏一下自己项目的 README 58 | $ zignis read README.md 59 | ``` 60 | 61 | ## 获取文章转换成微信公众号支持的格式 62 | ```bash 63 | # 安装 64 | $ npm i -g zignis zignis-plugin-read zignis-plugin-read-extend-format-wechat 65 | 66 | # 例子,抓取掘金文章,并使用代理获取文章中图片 67 | $ zignis read https://juejin.im/post/5dd6a8106fb9a05a7f75fe74 --format=wechat --proxy 68 | ``` 69 | 70 | ## 目前适合网页主体转换的网站 71 | 开发过程中发现,默认行为总是不尽如人意,需要针对性的调优,目前只对下列网站做过基本调优,不保证绝对没有问题,遇到一个解决一个。 72 | 73 | - 掘金 74 | - 简书 75 | - 知乎 76 | 77 | ## 已知 BUG 78 | - 生成 `mobi` 格式时,`远程图片会丢失`,可以先转成 `epub`,然后自己用 ebook-convert 转成 mobi 79 | 80 | ## 项目地址 81 | - `zignis-plugin-read` https://github.com/vipzhicheng/zignis-plugin-read 82 | - `zignis-plugin-read-extend-format-wechat` https://github.com/vipzhicheng/zignis-plugin-read-extend-format-wechat 83 | 84 | ## 使用过程中程序 Bug 反馈 85 | - 可以直接在公众号留言,我会`第一时间`反馈给`作者` 86 | - 可以到上面`Github`项目中提交`Issues` 87 | 88 | 89 | ## 结束语 90 | 如果这个`神器`给你带来便利,花费你几秒宝贵的时间到`Github`点击一个`Star` 91 | -------------------------------------------------------------------------------- /ops/不同云厂商实现内网互通解决方案.md: -------------------------------------------------------------------------------- 1 | ## 背景 2 | 3 | 作为一名技术人,喜欢买云主机,但是又感觉云主机价格太贵。怎么办了? 4 | 5 | 目前云厂商为了吸引用户,特别是新用户,有很多优惠政策。什么新用户购买云主机打五拆或者四拆等。每个人都喜欢薅羊毛,在不同的云厂商注册账号,并且购买1台或者多台云主机,因为新注册的用户购买时优惠力度很大。 6 | 7 | ## 问题或者需求 8 | 9 | 上文说了,我们在每个云厂商买了云主机,但如何利用这些不同厂商的云主机搭建一个 Kubernetes 集群。 10 | 11 | 虽然 Kubernetes 集群可以基于公网IP来通信,但是搭建过程会遇到很多大坑。个人再想,有没有办法让不同云厂商云主机实现内网通信。 12 | 13 | ## 解决方案 14 | 15 | 通过百度搜索,找到一个不错的工具 `Access Hub`。提供不同云厂商VPC内网互通解决方案。 16 | 17 | ![](/img/accesshub-1.png) 18 | 19 | > 个人需要实现 `华为云` 与 `腾讯云` VPC内网互通,具体配置请访问 http://help.accesshub.cn/hc/kb/article/1274634/ 链接 20 | 21 | VPC内网互通配置成功后展示: 22 | 23 | ![](/img/accesshub-3.png) 24 | 25 | ![](/img/accesshub-4.png) 26 | 27 | ![](/img/accesshub-2.png) 28 | 29 | ## 实测 30 | 31 | 下图是基于不同云厂商内网互通搭建的 Kubernetes 集群。 32 | 33 | ![](/img/accesshub-5.png) 34 | 35 | ## 小结 36 | 37 | 这里不是给 `Access Hub` 打广告,只是告诉大家有这样一个工具,可以解决不同云厂商云主机内网通信问题。 38 | -------------------------------------------------------------------------------- /ops/互联网中台技术简介.md: -------------------------------------------------------------------------------- 1 | ## 互联网中台简介[2] 2 | 大约从去年年底开始,中台的概念开始被广泛讨论。 3 | 4 | 但与此同时,关于中台究竟是什么,却是众说纷纭。引用王健老师在《当我们谈中台时,我们在谈些什么| 白话中台战略》一文中提到的关于中台的一些理解,就能看出一些端倪。 5 | 6 | > 在有些人眼里:中台就是技术平台,像微服务开发框架、Devops平台、PaaS平台,容器云之类的,人们都叫它“技术中台”。 7 | 8 | > 在有些人眼里:中台就是微服务业务平台,像最常见的什么用户中心,订单中心,各种微服务集散地,人们都叫它“业务中台”。 9 | 10 | > 在有些人眼里:中台应该是组织的事情,在释放潜能:类似于企业内部资源调度中心和内部创新孵化组织,人们叫它“组织中台”。 11 | 12 | 这些理解都对,但也都有不够准确或不够完整的部分。中台,作为一个还在被定义当中的概念,正处在一个大家都有感觉,但又难以被定义的状态。而且可预见的是,这种相对模糊的状态可能还要维持相当长的一段时间。 13 | 14 | 与此同时,在查阅了大量资料、并与京东等大厂的中台相关负责人沟通后,我们发现,目前行业内对于中台讨论的视角还是多偏于战略或组织架构层面,而中台更多是因为公司业务在发展到某一阶段时,遇到瓶颈与障碍后,为解决实际问题而提出的解决方案。 15 | 16 | 虽然基于战略的角度去看,确实能够让大家视野开阔,从更高维度理解中台。但战略是基于实际业务而制定的,如果撇开业务去空谈,就如同空中楼阁,还是无法了解中台到底是什么。 17 | 18 | ## 中台业务能力全景[1] 19 | 20 | ![](/img/11553600-dfb06006250df8da.png) 21 | 22 | 23 | ## 中台技术全景[1] 24 | 25 | ![](/img/11553600-0a318a22dfc65ae9.png) 26 | 27 | ![](/img/11553600-fde662554a54e915.png) 28 | 29 | 30 | ## 移动中台[1] 31 | 32 | ![](/img/11553600-3f4af0caebb34065.png) 33 | 34 | 35 | ## 业务中台[1] 36 | 37 | * 技术架构图 38 | 39 | ![](/img/11553600-72221ff13b8324d9.png) 40 | 41 | 42 | * 技术选型 43 | 44 | ![](/img/11553600-a7253fbdcedd88dd.png) 45 | 46 | ServiceMesh... 47 | 48 | 49 | ## 数据中台[1] 50 | 51 | ![](/img/11553600-d3acae7e6c8966e1.png) 52 | 53 | 54 | ## 技术中台[1] 55 | 56 | 各技术组件的高可以部署及多租户问题的解决。 57 | redis,mq,db...... 58 | 59 | ### 研发(效能)中台[1] 60 | 61 | ![](/img/11553600-bb4d5bd2fa186c0f.png) 62 | 63 | 64 | ### 云平台[1] 65 | 66 | * 容器云平台 67 | * openshift 68 | 69 | ![](/img/11553600-7aa919bf99956101.png) 70 | 71 | 72 | ## 参考链接 73 | 74 | - [1]https://www.jianshu.com/p/b68dde2e2651 75 | - [2]https://www.zhihu.com/question/57717433/answer/719218827 76 | -------------------------------------------------------------------------------- /ops/如何实现rsync多并发同步.md: -------------------------------------------------------------------------------- 1 | ## 前言 2 | 3 | 工作中经常会遇到`数据拷贝`或者`数据同步`事情。一般情况会使用 `rsync` 来做数据拷贝或者数据同步等。 4 | 5 | ## 问题 6 | 7 | `rsync` 不能做并发同步,特别是需要拷贝`上T数据`时,rsync 一个进程拷贝有很大的瓶颈,不能把存储设备IO性能发挥的最好或者说把存储设备IO跑满。 8 | 9 | 有什么方法让 `rsync` 实现`多进程同步`,并且自动识别目录下有多少个文件或者目录,不会出现重复性同步。 10 | 11 | ## 解决方法 12 | 13 | 下面是作者写的一个 `shell` 脚本,实现 rsync 多进程同步。 14 | 15 | ```bash 16 | #!/usr/bin/env bash 17 | 18 | # Define source, target, maxdepth and cd to source 19 | source="/tmp/tmp_data" 20 | target="/tmp/tmp_data2" 21 | depth=3 22 | cd "${source}" 23 | 24 | # Set the maximum number of concurrent rsync threads 25 | maxthreads=5 26 | # How long to wait before checking the number of rsync threads again 27 | sleeptime=5 28 | 29 | # Find all folders in the source directory within the maxdepth level 30 | find . -maxdepth ${depth} -type d | while read dir 31 | do 32 | # Make sure to ignore the parent folder 33 | if [ `echo "${dir}" | awk -F'/' '{print NF}'` -gt ${depth} ] 34 | then 35 | # Strip leading dot slash 36 | subfolder=$(echo "${dir}" | sed 's@^\./@@g') 37 | if [ ! -d "${target}/${subfolder}" ] 38 | then 39 | # Create destination folder 40 | mkdir -p "${target}/${subfolder}" 41 | fi 42 | # Make sure the number of rsync threads running is below the threshold 43 | while [ `ps -ef | grep -w [r]sync | awk '{print $NF}' | sort -nr | uniq | wc -l` -ge ${maxthreads} ] 44 | do 45 | echo "Sleeping ${sleeptime} seconds" 46 | sleep ${sleeptime} 47 | done 48 | # Run rsync in background for the current subfolder and move one to the next one 49 | nohup rsync -avP "${source}/${subfolder}/" "${target}/${subfolder}/" /dev/null 2>&1 & 50 | fi 51 | done 52 | 53 | # Find all files above the maxdepth level and rsync them as well 54 | find . -maxdepth ${depth} -type f -print0 | rsync -avP --files-from=- --from0 ./ "${target}/" 55 | ``` -------------------------------------------------------------------------------- /ops/监控域名HTTPS证书过期时间.md: -------------------------------------------------------------------------------- 1 | ## 前言 2 | 3 | 随着各大浏览器对 `http` 请求标识为 `不安全`(见下图),现如今强烈推荐网站使用 `https` 请求。对于运维同学来说,`SSL` 证书`有效期`如何监控,不可能去记住每个域名证书到期日期,今天作者分享`两个脚本`并配合`zabbix` 来监控 SSL 证书到期日期。这样就不会因为 SSL 证书到期导致网站瘫痪。 4 | 5 | ![](../img/http-ssl-1.png) 6 | 7 | ## 脚本 8 | 9 | ### 注释 10 | 11 | > - 两个脚本都可以使用,任选一个就行。 12 | > - 优化 `openssl s_client` 命令监测域名时会出现卡死(卡死原因:一般是网站挂掉导致没有响应),导致 `zabbix agent` 异常问题。 13 | > - 本文不提供 zabbix 配置,具体谷歌搜索一下。 14 | 15 | ### 脚本一 16 | 17 | ```bash 18 | #! /usr/bin/env bash 19 | 20 | host=$1 21 | port=${2:-"443"} 22 | 23 | end_date=`timeout 6 openssl s_client -host $host -port $port -showcerts /dev/null | 24 | sed -n '/BEGIN CERTIFICATE/,/END CERT/p' | 25 | openssl x509 -text 2> /dev/null | 26 | sed -n 's/ *Not After : *//p'` 27 | 28 | if [ -n "$end_date" ];then 29 | # 把时间转换为时间戳 30 | end_date_seconds=`date '+%s' --date "$end_date"` 31 | # 获取当前时间 32 | now_seconds=`date '+%s'` 33 | echo "($end_date_seconds-$now_seconds)/24/3600" | bc 34 | fi 35 | ``` 36 | 37 | ### 脚本二 38 | 39 | ```bash 40 | #! /usr/bin/env bash 41 | 42 | host=$1 43 | port=${2:-"443"} 44 | 45 | end_date=`echo | timeout 6 openssl s_client -servername ${host} -connect ${host}:${port} 2>/dev/null | 46 | openssl x509 -noout -dates | grep notAfter | awk -F "=" '{print $NF}'` 47 | 48 | if [ -n "$end_date" ];then 49 | # 把时间转换为时间戳 50 | end_date_seconds=`date '+%s' --date "$end_date"` 51 | # 获取当前时间 52 | now_seconds=`date '+%s'` 53 | echo "($end_date_seconds-$now_seconds)/24/3600" | bc 54 | fi 55 | ``` -------------------------------------------------------------------------------- /ops/磁盘空间分析神器-ncdu.md: -------------------------------------------------------------------------------- 1 | ## 前言 2 | 3 | 不管是使用电脑还是维护服务器,都会遇到一个问题,磁盘空间不足。一般都是通过 `du` 命令来统计磁盘占用空间。 4 | 5 | 今天推荐一个非常好用的统计磁盘占用工具 `ncdu`。 6 | 7 | > `ncdu` 项目地址 https://github.com/rofl0r/ncdu 8 | 9 | ## ncdu 相对与 du 的优势 10 | 11 | 优势: 12 | 13 | - 统计的目录以仪表盘展示 14 | - 可以以磁盘占用大小或者文件名称排序 15 | - 支持远程导出本地分析 16 | 17 | ## 示例 18 | 19 | ### 命令格式 20 | 21 | ```bash 22 | ncdu 23 | ``` 24 | 25 | ### 直接运行 ncdu 26 | 27 | 直接运行 `ncdu` ,默认统计当前目录大小。 28 | 29 | 扫描中。。。 30 | 31 | ![扫描中](/img/ncdu-img-1.png) 32 | 33 | 扫描结果,展示统计结果 34 | 35 | ![统计结果](/img/ncdu-img-2.png) 36 | 37 | 显示目录信息 38 | 39 | ![目录信息](/img/ncdu-img-3.png) 40 | 41 | ### 扫描 / 目录文件系统,需要使用 -x 参数: 42 | 43 | ```bash 44 | $ ncdu -x / 45 | ``` 46 | 47 | ### 扫描整个文件系统,文件多可以把结果导出并压缩 48 | 49 | ```bash 50 | # 把结果导出并压缩 51 | $ ncdu -1xo- / | gzip > out.gz 52 | 53 | # 查看结果 54 | $ zcat out.gz | ncdu -f- 55 | ``` 56 | 57 | ### 扫描完成后,可以导出目录并浏览目录 58 | 59 | ```bash 60 | $ ncdu -o- | tee out.file | ncdu -f- 61 | ``` 62 | 63 | ### 远程扫描系统,本地浏览结果 64 | 65 | ```bash 66 | $ ssh -C user@host ncdu -o- /mnt | ncdu -f- 67 | ``` 68 | 69 | ## 参数选项 [1] 70 | 71 | 下面例举几个常用的参数: 72 | 73 | - `-q`:静音模式。在扫描或导入目录时,默认情况下,ncdu 将每秒更新屏幕 `10` 次,在安静模式下,此间隔将减少为每 `2` 秒一次。使用此功能可以节省远程连接上的带宽。使用 `-0` 时,此选项无效。 74 | - `-x`:请勿越过文件系统边界,即仅将与正在扫描的目录位于同一文件系统上的文件和目录计数。 75 | - `-f FILE`:加载给定文件,该文件先前是使用 `-o` 选项创建的。如果 FILE 等效于 `-`,则从标准输入中读取文件。 76 | - `-0`:扫描目录或导入文件时,不会提供任何反馈,除非发生致命错误。扫描完成之前,不会初始化 Ncurses。用 -o 导出数据时,ncurses 根本不会初始化。导出到标准输出时,此选项是默认选项。 77 | - `-1`:类似于 `-0`,但仅以单行输出就扫描进度提供反馈。导出到文件时,此选项是默认选项。 78 | - `-2`:在扫描目录或导入文件时,提供全屏 ncurses 界面。这是唯一在扫描时提供有关任何非致命错误的反馈的界面。 79 | - `--exclude`:排除匹配的文件 80 | 81 | ## 仪表盘参数 82 | 83 | 扫描结果出来后,可以按 `?` 显示帮助: 84 | 85 | ![帮助](/img/ncdu-img-4.png) 86 | 87 | 常用快捷键: 88 | 89 | - `n`:按文件名进行排序 90 | - `s`:按文件大小进行排序 91 | - `r`:重新统计当前文件夹大小 92 | - `g`:用#或百分比显示各文件/目录的大小所占的百分比 93 | - `i`:显示当前文件/目录信息 94 | 95 | ## 参数文章 96 | 97 | - [1] http://www.jokervtv.top/blog/linux%20commend/ncdu.html -------------------------------------------------------------------------------- /ops/缓存穿透-缓存击穿-缓存雪崩.md: -------------------------------------------------------------------------------- 1 | > - 作者:zeb_perfect 2 | > - 链接:https://blog.csdn.net/zeb_perfect/article/details/54135506 3 | 4 | ## 前言 5 | 6 | 设计一个缓存系统,不得不要考虑的问题就是:缓存穿透、缓存击穿与失效时的雪崩效应。 7 | 8 | ## 缓存穿透 9 | 10 | 缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。 11 | 12 | ![](/img/15519803-0f0dcb3dfba4ce8c.png) 13 | 14 | ### 解决方案: 15 | 16 | 1. 将这个不存在的key预先设定一个值。比如,”key” , “&&”。在返回这个&&值的时候,应用层可以认为这是不存在的key,应用就可以进行相应的业务操作(继续等待、继续访问、放弃操作、...); 17 | 18 | ![](/img/15519803-9ab184ab5b8075f1.png) 19 | 20 | 21 | 2. 与第一种解决方案类似,只不过存放在缓存当中,查询返回的数据为空(不管是数据不存在,还是系统故障),我们仍然把这个标识(如:&&)结果进行缓存,但它的过期时间会很短,最长不超过五分钟,异步进行数据库数据读取,获取到的值初始化到缓存里边; 22 | 23 | ![](/img/15519803-dd2c430406b8505a.png) 24 | 25 | 3. 采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被这个bitmap拦截掉,从而避免了对底层存储系统的查询压力; 26 | 27 | ![](/img/15519803-f777eb6a200013cb.png) 28 | 29 | 30 | ## 缓存雪崩(很多数据) 31 | 32 | 缓存雪崩是指在我们设置缓存时采用了相同的过期时间,导致缓存在某一时刻同时失效,请求全部转发到DB,DB瞬时压力过重雪崩。 33 | 34 | ### 解决方案 35 | 36 | 1. 用加锁或者队列的方式保证缓存的单线程(进程)写,从而避免失效时大量的并发请求落到底层存储系统上; 37 | 38 | 2. 将缓存失效时间分散开,比如我们可以在原有的失效时间基础上增加一个随机值,比如1-5分钟随机,这样每一个缓存的过期时间的重复率就会降低,就很难引发集体失效的事件。 39 | 40 | 41 | ## 缓存击穿(单个数据) 42 | 43 | 44 | 缓存在某个时间点过期的时候,恰好在这个时间点对这个Key有大量的并发请求过来,这些请求发现缓存过期一般都会从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端DB压垮。 45 | 46 | ### 解决方案: 47 | 48 | #### 1.使用互斥锁(mutex key) 49 | 50 | 业界比较常用的做法,是使用mutex。简单地来说,就是在缓存失效的时候(判断拿出来的值为空),不是立即去load db,而是先使用缓存工具的某些带成功操作返回值的操作(比如Redis的SETNX或者Memcache的ADD)去set一个mutex key,当操作返回成功时,再进行load db的操作并回设缓存;否则,就重试整个get缓存的方法。 51 | 52 | #### 2. “提前”使用互斥锁(mutex key) 53 | 54 | 在value内部设置1个超时值(timeout1), timeout1比实际的memcache timeout(timeout2)小。当从cache读取到timeout1发现它已经过期时候,马上延长timeout1并重新设置到cache。然后再从数据库加载数据并设置到cache中。 55 | 56 | #### 3. “永远不过期”(同数据库的“软”删除原理) 57 | 58 | 这里的“永远不过期”包含两层意思: 59 | 60 | (1) 从redis上看,确实没有设置过期时间,这就保证了,不会出现热点key过期问题,也就是“物理”不过期。 61 | 62 | (2) 从功能上看,如果不过期,那不就成静态的了吗?所以我们把过期时间存在key对应的value里,如果发现要过期了,通过一个后台的异步线程进行缓存的构建,也就是“逻辑”过期。 63 | 64 | 从实战看,这种方法对于性能非常友好,唯一不足的就是构建缓存时候,其余线程(非构建缓存的线程)可能访问的是老数据,但是对于一般的互联网功能来说这个还是可以忍受。 65 | 66 | ![](/img/15519803-5162ccd8a8b96bd6.png) 67 | 68 | #### 4. 资源保护(深入使用第3种,这种没有深入研究) 69 | 70 | 采用netflix的hystrix,可以做资源的隔离保护主线程池,如果把这个应用到缓存的构建也未尝不可。 71 | 72 | 73 | ## 总结:没有最佳只有最合适 74 | 75 | ![](/img/15519803-376775e806efbaf4.png) 76 | 77 | 针对业务系统,永远都是具体情况具体分析,没有最好,只有最合适。 -------------------------------------------------------------------------------- /ops/聊聊TPS-QPS-CPS概念和区别.md: -------------------------------------------------------------------------------- 1 | ## TPS 概念 2 | 3 | `TPS`:是`TransactionsPerSecond`的缩写,也就是事务数/秒。它是软件测试结果的测量单位。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。 4 | 5 | ## QPS 概念 6 | 7 | `QPS`:`Queries Per Second`意思是`每秒查询率`,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。 8 | 9 | ## CPS 概念 10 | 11 | `CPS`:`Connection Per Second`意思是`每秒新建连接数`,定义了新建连接的速率。当新建连接的速率超过规格定义的每秒新建连接数时,新建连接请求将被丢弃。 12 | 13 | ## TPS 与 QPS 区别 14 | 15 | TPS 即每秒处理事务数,包括以下部分: 16 | - 1、用户请求服务器 17 | - 2、服务器自己的内部处理 18 | - 3、服务器返回给用户 19 | 20 | 这三个过程,每秒能够完成N个这三个过程,TPS也就是N。 21 | 22 | `QPS` 基本类似于TPS,但是不同的是,对于一个页面的一次访问,形成一个TPS。但一次页面请求,可能产生多次对服务器的请求,服务器对这些请求,就可计入`QPS`之中。 23 | 24 | 例如:访问一个页面会请求服务器3次,一次访问,产生一个`“T”`,产生3个`“Q”`。 25 | 26 | ## QPS 计算公式 27 | 28 | 每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,在因特网上,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。 29 | 30 | - `原理`:每天80%的访问集中在20%的时间里,这20%时间叫做峰值时间 31 | - `公式`:( 总PV数 * 80% ) / ( 每天秒数 * 20% ) = 峰值时间每秒请求数(QPS) 32 | - `机器`:峰值时间每秒QPS / 单台机器的QPS = 需要的机器 33 | 34 | 问:每天300w PV 的在单台机器上,这台机器需要多少QPS? 35 | 36 | 答:( 3000000 * 0.8 ) / (86400 * 0.2 ) = 139 (QPS) 37 | 38 | 问:如果一台机器的QPS是58,需要几台机器来支持? 39 | 40 | 答:139 / 58 = 3 41 | 42 | ## 系统吞吐量 43 | 44 | 一个系统的吞度量(承压能力)与request对`CPU的消耗`、`外部接口`、`IO`等等紧密关联。单个reqeust 对CPU消耗越高,外部系统接口、IO影响速度越慢,系统吞吐能力越低,反之越高。 45 | 46 | 系统吞吐量几个重要参数:`QPS(TPS)`、`并发数`、`响应时间` 47 | 48 | - QPS(TPS):每秒钟request/事务 数量 49 | - 并发数:系统同时处理的request/事务数 50 | - 响应时间:一般取平均响应时间 51 | 52 | 理解了上面三个要素的意义之后,就能推算出它们之间的关系: 53 | 54 | QPS(TPS)= 并发数/平均响应时间 或者 并发数 = QPS*平均响应时间 55 | 56 | ## 参考链接 57 | 58 | - https://blog.csdn.net/u010889616/article/details/83245695 59 | - https://blog.csdn.net/yanyuan_smartisan/article/details/112871685 60 | -------------------------------------------------------------------------------- /ops/详解Nginx-proxy_pass使用.md: -------------------------------------------------------------------------------- 1 | ## 前言 2 | 3 | 日常不管是研发还是运维,都多少会使用`Nginx`服务,很多情况Nginx用于反向代理,那就离不开使用`proxy_pass`,有些同学会对 `proxy_pass` 转发代理时 `后面url加 /`、`后面url没有 /`、`后面url添加其它路由`等场景,不能很明白其中的意思,下面来聊聊这些分别代表什么意思。 4 | 5 | ## 详解 6 | 7 | 客户端请求 URL `https://172.16.1.1/hello/world.html` 8 | 9 | ### 第一种场景 后面url加 / 10 | 11 | ```bash 12 | location /hello/ { 13 | proxy_pass http://127.0.0.1/; 14 | } 15 | ``` 16 | 17 | `结果`:代理到URL:http://127.0.0.1/world.html 18 | 19 | 20 | ### 第二种场景 后面url没有 / 21 | 22 | ```bash 23 | location /hello/ { 24 | proxy_pass http://127.0.0.1; 25 | } 26 | ``` 27 | 28 | `结果`:代理到URL:http://127.0.0.1/hello/world.html 29 | 30 | ### 第三种场景 后面url添加其它路由,并且最后添加 / 31 | 32 | ```bash 33 | location /hello/ { 34 | proxy_pass http://127.0.0.1/test/; 35 | } 36 | ``` 37 | 38 | `结果`:代理到URL:http://127.0.0.1/test/world.html 39 | 40 | ### 第四种场景 后面url添加其它路由,但最后没有添加 / 41 | 42 | ```bash 43 | location /hello/ { 44 | proxy_pass http://127.0.0.1/test; 45 | } 46 | ``` 47 | 48 | `结果`:代理到URL:http://127.0.0.1/testworld.html -------------------------------------------------------------------------------- /python3/qiniu_delete3_single.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | # -*- coding: utf-8 -*- 3 | 4 | #--------------------------------------------------------------------------------- 5 | #删除单个七牛目录下文件或者单个文件 6 | #使用方法 python3 qiniu_delete3_single.py 需要删除七牛目录路径下文件或者单个文件 7 | #--------------------------------------------------------------------------------- 8 | 9 | import subprocess 10 | import sys 11 | from qiniu import Auth 12 | from qiniu import BucketManager 13 | 14 | access_key = '' 15 | secret_key = '' 16 | 17 | #初始化Auth状态 18 | q = Auth(access_key, secret_key) 19 | 20 | #初始化BucketManager 21 | bucket = BucketManager(q) 22 | 23 | #你要删除的空间名 24 | bucket_name = '' 25 | 26 | # 列出所要删除的文件 27 | out_file = '/tmp/qiniu_list' 28 | 29 | def list_filename(path): 30 | subprocess.Popen('qshell account {} {}'.format(access_key, secret_key), shell=True) 31 | subprocess.Popen('qshell listbucket {} {} {}'.format(bucket_name, path, out_file), shell=True).wait() 32 | 33 | def del_file(): 34 | try: 35 | with open(out_file, 'r') as f: 36 | for i in f.readlines(): 37 | if len(i) == 0: 38 | print("There is no file under the path!") 39 | break 40 | else: 41 | file_name = i.strip().split()[0].strip() 42 | ret, info = bucket.delete(bucket_name, file_name) 43 | print(info) 44 | except:pass 45 | 46 | if __name__ == '__main__': 47 | try: 48 | list_filename(sys.argv[1]) 49 | except: 50 | print("""$"Usage: $1 Need to delete the path, Output /tmp/qiniu_list""") 51 | sys.exit(1) 52 | del_file() 53 | subprocess.Popen('rm -f {}'.format(out_file), shell=True) 54 | -------------------------------------------------------------------------------- /python3/qip3.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | #-*- coding:utf-8 -*- 3 | 4 | #使用方法: python3 qip3.py www.jd.com www.baidu.com or python3 qip3.py 8.8.8.8 114.114.114.114 5 | 6 | import requests 7 | import socket 8 | import sys 9 | import re 10 | from lxml import etree 11 | 12 | def Analysis(domain): 13 | while True: 14 | try: 15 | results = socket.getaddrinfo(domain, None) 16 | ipaddrs = (x[4][0] for x in results) 17 | ipaddrs1 = list(set(list(ipaddrs))) 18 | return ipaddrs1 19 | except Exception: 20 | print(domain, '域名解析不出IP或IP不合法,请重新输入!') 21 | sys.exit() 22 | 23 | def Ip_query(ipaddr): 24 | rs = requests.get("http://ip138.com/ips138.asp?ip={}&action=2".format(ipaddr), timeout=3) 25 | page = etree.HTML(rs.content) 26 | xpath = "//ul[@class='ul1']/li/text()" 27 | hanzi_list = page.xpath(xpath) 28 | print('Analysis IP: ', ipaddr) 29 | for hanzi in hanzi_list: 30 | print(hanzi) 31 | return '-------------------------Done----------------------' 32 | 33 | 34 | if __name__ == '__main__': 35 | for parameter in range(1, len(sys.argv)): 36 | if re.match(r'^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$', sys.argv[parameter]): 37 | print(Ip_query(sys.argv[parameter])) 38 | else: 39 | for domain1 in Analysis(sys.argv[parameter]): 40 | print('Domain name resolution: ', sys.argv[parameter]) 41 | print(Ip_query(domain1)) 42 | -------------------------------------------------------------------------------- /python3/query_china_ip.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | # -*-coding=utf-8-*- 3 | 4 | """ 5 | 用途:查询中国地区ipv4地址 6 | 使用方法: python3 query_china_ip.py 7 | """ 8 | 9 | import re 10 | import requests 11 | import math 12 | 13 | 14 | def fetch_ip_data(): 15 | print('\033[1;32;40m') 16 | print("Fetching data from apnic.net, it might take a few minutes, please wait...") 17 | print('\033[0m') 18 | rs = requests.get('http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest', timeout=60) 19 | page = rs.text 20 | cnregex = re.compile(r'apnic\|cn\|ipv4\|[0-9\.]+\|[0-9]+\|[0-9]+\|a.*',re.IGNORECASE) # re.I(re.IGNORECASE): 忽略大小写 21 | cndata = cnregex.findall(page) 22 | 23 | # results = [] 24 | with open('/tmp/cn_iplist.txt', 'w') as f: 25 | for item in cndata: # out item = 'apnic|CN|ipv4|223.254.0.0|65536|20100723|allocated' 26 | unit_items = item.split('|') 27 | starting_ip = unit_items[3] # out 223.254.0.0 28 | num_ip = int(unit_items[4]) # out 65536 29 | 30 | imask = 0xffffffff ^ (num_ip - 1) # out 4294901760 31 | # convert to string 32 | imask = hex(imask)[2:] # out ffff0000 #hex 把10进制数转换为16进制数 33 | mask = [0] * 4 # out [0, 0, 0, 0] 34 | mask[0] = imask[0:2] 35 | mask[1] = imask[2:4] 36 | mask[2] = imask[4:6] 37 | mask[3] = imask[6:8] # out mask = ['ff', 'ff', '00', '00'] 38 | 39 | # convert str to int 40 | mask = [int(i, 16) for i in mask] # 把16进制转换为10进制 out [255, 255, 0, 0] 41 | mask = "%d.%d.%d.%d" % tuple(mask) # out 255.255.0.0 42 | 43 | # mask in *nix format 44 | mask2 = 32 - int(math.log(num_ip, 2)) # out 16 返回num_ip的以2为底的对数 45 | 46 | # results.append((starting_ip, mask, mask2)) # out [('223.254.0.0', '255.255.0.0', 16), ('223.255.252.0', '255.255.254.0', 23)] 47 | results = '{} {} {}\n'.format(starting_ip, mask, mask2) 48 | f.write(results) 49 | print('\033[1;32;40m') 50 | print('The results are output to /tmp/cn_iplist.txt') 51 | print('\033[0m') 52 | return '--------Done----------' 53 | 54 | if __name__ == '__main__': 55 | fetch_ip_data() 56 | -------------------------------------------------------------------------------- /tools/Redis内存分析神器.md: -------------------------------------------------------------------------------- 1 | ## RDR 简介 2 | 3 | `RDR` 是解析 `redis rdbfile` 工具。与`redis-rdb-tools`相比,RDR 是由golang 实现的,速度更快(5GB rdbfile 在我的PC上大约需要2分钟)。 4 | 5 | 6 | ## 例子 7 | 8 | ```bash 9 | $ ./rdr show -p 8080 *.rdb 10 | ``` 11 | 12 | ![](/img/rdr.png) 13 | 14 | ```bash 15 | $ ./rdr keys example.rdb 16 | 17 | portfolio:stock_follower_count:ZH314136 18 | portfolio:stock_follower_count:ZH654106 19 | portfolio:stock_follower:ZH617824 20 | portfolio:stock_follower_count:ZH001019 21 | portfolio:stock_follower_count:ZH346349 22 | portfolio:stock_follower_count:ZH951803 23 | portfolio:stock_follower:ZH924804 24 | portfolio:stock_follower_count:INS104806 25 | ``` 26 | 27 | ## 优势 28 | 29 | - 分析 Redis 内存中那个 Key 值占用的内存最多 30 | - 分析出 Redis 内存中那一类开头的 Key 占用最多,有利于内存优化 31 | - Redis Key 值以 Dashboard 展示,这样更直观 32 | 33 | ## 安装 34 | 35 | - Linux amd64 36 | 37 | ```bash 38 | $ wget https://github.com/xueqiu/rdr/releases/download/v0.0.1/rdr-linux -O /usr/local/bin/rdr 39 | $ chmod +x /usr/local/bin/rdr 40 | ``` 41 | 42 | - MacOS 43 | 44 | ```bash 45 | $ curl https://github.com/xueqiu/rdr/releases/download/v0.0.1/rdr-darwin -o /usr/local/bin/rdr 46 | $ chmod +x /usr/local/bin/rdr 47 | ``` 48 | 49 | - Windows 50 | 51 | ```bash 52 | # 浏览器下载下面链接,在点击运行 53 | https://github.com/xueqiu/rdr/releases/download/v0.0.1/rdr-windows.exe 54 | ``` 55 | 56 | 57 | ## RDR 参数解释 58 | 59 | - show 网页显示 rdbfile 的统计信息 60 | - keys 从 rdbfile 获取所有 key 61 | - help 帮助 62 | - --version 显示版本信息 63 | 64 | `分析多个 Redis rdb` 65 | 66 | ```bash 67 | $ rdr keys FILE1 [FILE2] [FILE3]... 68 | ``` 69 | 70 | ## 项目地址 71 | 72 | - https://github.com/xueqiu/rdr -------------------------------------------------------------------------------- /tools/提高阅读代码效率神器-Sourcetrail.md: -------------------------------------------------------------------------------- 1 | ## Sourcetrail 简介 2 | 3 | `Sourcetrail` 是一个免费的开放源代码跨平台资源浏览器,可帮助您提高不熟悉源代码的工作效率。 4 | 5 | ![](https://www.yp14.cn/img/user_interface.png) 6 | 7 | ## Sourcetrail 比其它开发工具优势 8 | 9 | 软件开发人员将大部分时间花在弄清楚现有源代码上,但是通用的代码编辑工具对此任务几乎没有帮助。调试器仅允许详细检查一条狭窄的代码路径。“查找所有引用”可帮助您在文件之间导航,但`不能提供上下文以查看所有相关依赖项的概况`。`Sourcetrail`通过`将交互式依赖关系图`,`简洁的代码视图`和`高效的代码搜索结合`在一起,提供了概述和详细信息,所有这些都优于其它开发工具。它支持您`探索遗留代码`,理解实现并重构软件体系结构。 10 | 11 | ## Sourcetrail 支持的IDE 12 | 13 | Atom,Clion,Eclipse,Emacs,IntelliJ IDEA,Neovim,PyCharm,QtCreator,Sublime Text,Vim,Visual Studio,Visual Studio Code 14 | 15 | ## Sourcetrail 支持的语言 16 | 17 | - C 18 | - C ++ 19 | - Java 20 | - Python 21 | - custom 22 | 23 | ## 为什么选择 Sourcetrail ?(以下来源于官网) 24 | 25 | - 软件开发的现实 26 | 27 | 作为软件工程师,我们知道我们拥有实现所有想法的技能和能力。但是有时候,这比我们预期的要困难。专业软件开发通常是团队的努力。团队合作使我们能够解决更棘手的问题,但这是有代价的。当代码库增长时,跟踪每个添加的代码变得越来越复杂。因此,花更多的精力在研究当前的实现上,而花在编写新功能上的花费却更少。新开发人员通常必须花费数天甚至数周的时间来浏览旧版代码,以使他们自己熟悉实施,然后才能真正投入生产。 28 | 29 | - 编程语言不是问题 30 | 31 | 编程语言在不断发展。通过消除越来越多的计算机限制,它们减少了软件开发人员需要记住的开销。但是,不管使用哪种语言,如果一个项目达到一定规模,就很难保持源代码结构的一致思维模型。这里的问题不是语言的抽象性差,而是代码的信息密度高。源代码中的每一行都有其用途,作为软件开发人员,我们将花费大部分时间搜索当前相关的小片段。为什么不退后一步,看看组件之间是如何连接的,而又不经常查看代码的每个细节? 32 | 33 | - 我们已经有足够的代码编辑器 34 | 35 | 在编写代码时,我们有多种选择可以适应我们想要的任何工作流程。更难解决的是我们如何有效地理解现有的实现。尽管那里有许多出色的代码编辑器,但是它们是为编写代码而设计的,并不是为浏览手边的实现而设计的。当然,每个开发人员都有自己的策略,可以从源代码中查找信息,从搜索文档到查看测试,或在可用时询问原始作者。但是,当您用尽所有这些选项时,不可避免地要遍历代码。让我们面对现实吧-深入挖掘是大多数程序员宁愿避免的事情。 36 | 37 | - 电脑知道这一切! 38 | 39 | 了解您的软件体系结构的基础并不难。显而易见,了解功能中涉及哪些对象以及功能通过源文件所经过的路径。关于这一切的有趣的事情?您的计算机知道这一切。通过使用编译器或解释器,您的计算机已经知道该语言的工作方式。它知道存在哪些范例,因为它将源代码转换为可执行指令。它知道整个代码库中的每条信息,包括:调用函数的位置,如何实例化类型,更改变量的位置。到目前为止,对于我们的开发人员而言,访问此信息很麻烦,但是使用Sourcetrail可以轻松实现。 40 | 41 | - 认识Sourcetrail,交互式源代码浏览器! 42 | 43 | 我们希望您遇到Sourcetrail,这是一种轻量级的代码可视化工具,专门用于在源代码中进行快速而全面的导航。Sourcetrail利用软件可视化来动态生成任何选定类型,函数,变量等的交互式代码映射,并显示其与其余代码库的所有依存关系。但是仅凭花哨的代码可视化效果或类图并不能使您真正了解任何源代码。这就是Sourcetrail在可视化效果旁边还显示相关代码段的原因。最后,该软件包由强大的代码搜索算法完成,可让您尽快入门。Sourcetrail缩短了阅读源代码所花费的时间,并使您有更多时间花在您作为软件开发人员实际喜欢做的事情上。立即开始使用Sourcetrail! 44 | 45 | ## Sourcetrail 项目地址 46 | - https://github.com/CoatiSoftware/Sourcetrail 47 | 48 | ## 参考链接 49 | - https://www.sourcetrail.com/ 50 | - https://github.com/CoatiSoftware/Sourcetrail --------------------------------------------------------------------------------