周一见 | Docker 受限“实体清单”、微服务测试要点、kubectl 常用命令和技巧
技术校对:星空下的文仔(才云)、bot(才云)
1. Docker 受限“实体清单”
2. 微服务测试要点
3. 服务网格漫画图解
4. kubectl 常用命令和技巧
5. K8s 的挑战和应对方法
6. 本周 K8s 开源项目推荐
本文共计 3170 字,阅读大约需要 5 分钟
美国出口管制的事,开源不受影响,Docker 开源版可以继续使用,受影响的是商业版。
做好微服务和模块化应用程序的测试非常重要也非常有挑战,因为我们必须确保容器中的微服务运行良好,但又不能依靠传统测试测量来完成工作。
-
微服务依赖于网络通信来相互通信,因此必须测试网络可靠性和要求。 -
自动化和基础结构元素现在可作为代码添加,我们要确保微服务在通过管道推送时,它们也能正常运行。 -
尽管容器化是通用的,但我们仍然必须注意特定的依赖性,最好创建一个测试策略以包含这些依赖性。
-
单元测试 :这允许开发人员以细粒度的方式测试微服务。它不仅将测试限制在单个微服务上,还允许开发人员采用更细粒度的方法。 -
集成测试 :这是以交互方式处理微服务的测试。部署微服务需要彼此合作,集成测试是确保微服务能够实现的关键过程。 端到端测试:这是将微服务作为完整的应用程序进行测试。这种类型的测试可以测试功能、UI、通信和其他构成应用程序的组件。
Kubernetes 拥有着 Pod、Deployment、Service、Ingress 控制器等“工具”,帮助我们轻松部署服务,并按照我们的想法进行合理扩展。
kubectl 是重要的 Kubernetes 命令行工具,可让我们对集群运行命令。以下就罗列了常用的一些命令和技巧。
kubectl get pods -A --field-selector=status.phase!=Running | grep -v Complete
kubectl get no -o json | \
jq -r '.items | sort_by(.status.capacity.memory)[]|[.metadata.name,.status.capacity.memory]| @tsv'
kubectl get po -o json --all-namespaces | \
jq '.items | group_by(.spec.nodeName) | map({"nodeName": .[0].spec.nodeName, "count": length}) | sort_by(.count)'
kubectl top
获取消耗 CPU 和内存资源的 Pod 列表:
# cpu
kubectl top pods -A | sort --reverse --key 3 --numeric
# memory
kubectl top pods -A | sort --reverse --key 4 --numeric
kubectl get nodes -o json | \
jq -r '.items[].status.addresses[]? | select (.type == "InternalIP") | .address' | \
paste -sd "\n" -
kubectl get --all-namespaces svc -o json | \
jq -r'.items [] | [.metadata.name,([[。spec.ports []。nodePort | tostring] | join(“ |”))]] | @tsv'
kubectl -n my-namespace logs -f my-pod --timestamps2020-07-08T14:01:59.581788788Z fail: Microsoft.EntityFrameworkCore.Query[10100]
--tail
:
kubectl -n my-namespace logs -f my-pod --tail=50
kubectl -n my-namespace logs -f my-pod --all-containers
kubectl get secrets -o json --namespace namespace-old | \
jq '.items[].metadata.namespace = "namespace-new"' | \
kubectl create-f -
另外,这是 Kubernetes 文档里的 kubectl 备忘单:https://kubernetes.io/docs/reference/kubectl/cheatsheet/
Kubernetes 是当今容器编排的事实标准,受到了广大企业的热捧,据 Gartner 预测,2023 年全球 70% 以上的企业将运行两个或两个以上的容器化应用程序。但使用 Kubernetes 并不是一件简单的事情,以下是使用 Kubernetes 要注意的几个要点。
-
应用适当的 DNS 设置。 -
管理负载均衡。 -
设置资源约束:在容器、节点以及甚至命名空间级别定义资源约束。 -
管理 K8s RBAC:对跨 Pod、节点集群、命名空间定义和配置“角色”要做好详细规划。
-
镜像完整性。 -
节点访问。 -
网络分段以及隔离。 -
API 管理。 -
Ingress 和 Egress IAM。
-
运行非根容器: 如果出现破坏,根容器会提高横向移动的风险。 -
实施 RBAC: 正确配置RBAC策略,可以最大程度地提高安全性。 -
实施全面的测试过程: 在生产中进行部署之前,必须系统地运行包括功能测试、用户测试和负载测试在内的全面测试。 -
配置 CI/CD 管道: 正确配置 CI/CD 管道对于提高质量和安全性,以及加快应用程序发布速度至关重要。 -
注册表和 Deployment 管理: 确保将 Docker 镜像安全地存储在私有注册表服务器中,我们可以启用镜像管理工作流。 -
使用 Pod 安全策略(PSP)。 -
镜像扫描: 在使用外部图像之前,我们最好对其进行扫描,资源可降低引入漏洞的风险。 使用服务网格:服务网格有助于确保通信经过授权、认证,从而确保通信安全。
Krane
-
它是一个简单的 Kubernetes RBAC 静态分析工具,可以检查 K8s RBAC 设计中的潜在安全风险,并提出相关建议。 -
github.com/appvia/krane
-
它是一个可以实现 kubelet API 的命令行工具。 -
github.com/cyberark/kubeletctl
-
Kip 是一个虚拟 Kubelet 提供程序,Kid Pod 在集群上运行,并在集群上创建一个虚拟 Kubernetes 节点。 -
github.com/elotl/kip
-
它可以在 Kubernetes RBAC 授权模型中扫描集群是否存在危险权限。 -
github.com/cyberark/KubiScan
-
它可以基于自定义计划和关闭条件对 Kubernetes 集群的备份节点进行自动伸缩。 -
github.com/kubecost/cluster-turndown
-
它将容器镜像从一个注册表同步到另一个。 github.com/plexsystems/sinker
推荐阅读: