K8s 实践

Table of Contents

1 实例关联节点

名词对应关系:

  • pod => 实例
  • node => 节点

来源:https://kubernetes.io/docs/concepts/configuration/assign-pod-node/

有多种方法可以将一个实例关联到某(几)个节点上,他们都是使用标签选择器(label selectors)来实现的。一般来讲手动是没必要的,因为调度器会自动将实例放到合理的位置上(均衡资源利用)。 但有些时候,希望实例运行在某个节点上来获得更多的控制,比如说,保证服务运行在一台有 SSD 的节点机器上。

1.1 nodeSelector

nodeSelector 是最简单的约束形式, nodeSelector 的 PodSpec 的一个字段,它是键值对的映射。实例要想在节点上运行,节点必须要与实例相关的键值对作为标签(还可以包含其他标签)。常见的做法是一对键值对。

1.1.1 给节点添加标签

  1. kubectl get node 找到集群的节点
  2. kubectl label nodes <node-name> <label-key>=<label-value> 给节点添加标签
  3. kubectl get nodes --show-labels 查看节点上附加的标签

举例,将 disktype=ssd 添加到节点 kubernetes-foo-node-1.c.a-robinson.internal

kubectl label nodes kubernetes-foo-node-1.c.a-robinson.internal disktype=ssd

1.1.2 添加 nodeSelector 字段到实例配置中

找到运行实例的配置文件,并添加 nodeSelector 字段:

# pods/pod-nginx.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    env: test
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  nodeSelector:
    disktype: ssd

当执行 kubectl create -f /pods/pod-nginx.yaml 的时候,实例会自动调度到附加标签所在的节点上,你可以通过 kubectl get pods -o wide 来查看实例被附加到哪个节点上了。

2 应用自查和调试

2.1 查看详细信息

kubectl describe node/deployment/service/pod/ingress/...

2.2 查看事件

  • kubectl get events 查看 node 事件
  • kubectl get events --namespace=xxx 查看空间事件

事件只能到节点和空间级别,不能直接查看 Deployment、ReplicaSet、Pod 的事件,但是可以通过 namespace 的事件列表过滤出来。比如:

kubectl get events --namespace=test --field-selector involvedObject.name=test-3380989872-wxvdq

可以获取 test-3380989872-wxvdq 的事件。

2.3 查看日志

kubectl logs -f --namespace=k2 pod-name

2.4 进入容器

kubectl exec -it --namespace=xxx pod-name

Date: 2018-12-04 15:04

Author: JerryZhang