我正在学习 GKE(Google Kubernetes Engine),并且我有一个包含 2 个节点池的集群:
➜ ~ gcloud container node-pools list
NAME MACHINE_TYPE DISK_SIZE_GB NODE_VERSION
pool-2 n1-standard-1 10 1.14.10-gke.24
pool-n1-standard-2 n1-standard-2 10 1.14.10-gke.24
每个节点池上都有 1 个节点:
➜ ~ kubectl get node
NAME STATUS ROLES AGE VERSION
gke-cluster-1-pool-2-bec144d8-rqb8 Ready <none> 8d v1.14.10-gke.24
gke-cluster-1-pool-n1-standard-2-892e9394-b8x8 Ready <none> 5h11m v1.14.10-gke.24
➜ ~ kubectl describe node | grep -i cloud.google.com/gke-nodepool
cloud.google.com/gke-nodepool=pool-2
cloud.google.com/gke-nodepool=pool-n1-standard-2
我希望我的 pod 暂时在一台n1-standard-1
机器上运行,同时我开发系统,因此我封锁了更昂贵的节点,然后耗尽了它:
➜ ~ kubectl cordon gke-cluster-1-pool-n1-standard-2-892e9394-b8x8
node/gke-cluster-1-pool-n1-standard-2-892e9394-b8x8 cordoned
➜ ~ kubectl drain gke-cluster-1-pool-n1-standard-2-892e9394-b8x8
node/gke-cluster-1-pool-n1-standard-2-892e9394-b8x8 already cordoned
node/gke-cluster-1-pool-n1-standard-2-892e9394-b8x8 drained
在此之后,我预计所有 pod 都会被驱逐,但列出此节点上的 pod 仍然显示一些“系统”pod 正在运行:
➜ ~ kubectl get pods --all-namespaces -o wide --field-selector spec.nodeName=gke-cluster-1-pool-n1-standard-2-892e9394-b8x8
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kube-system kube-proxy-gke-cluster-1-pool-n1-standard-2-892e9394-b8x8 1/1 Running 0 5h22m 10.138.0.7 gke-cluster-1-pool-n1-standard-2-892e9394-b8x8 <none> <none>
所以我的问题是:
- 这是什么 pod?
- 更重要的是,我被收取了机器运行的全部费用,
n1-standard-2
如定价页面?(截至目前为 0.0950 美元/小时)
答案1
kube-proxy
是在所有 GKE 节点中运行的网络代理。在 GKE 中,它具有基于 Iptables 的规则,以允许集群中的 Pod 进行网络通信。您可以使用连接到 Pod 并kubectl exec -ti -n kube-system KUBE-PROXY-POD-NAME /bin/sh
执行iptables -L -n
以查看 Iptables 规则。有关 kube-proxy 的更多信息。定价 - 是的,Google 将对任何正在运行的实例收取全额费用。无论您是否在其中运行应用程序或 pod,都没有关系。费用是针对虚拟机的预留计算/内存/存储。如果您不想被收取费用,请删除该实例。您还可以通过使用可抢占gke 节点的 vms。