01端口设置
使用以下命令可以可以查看到到ports的子选项
[root@k8s-master01 ~]# kubectl explain pod.spec.containers.portsKIND: PodVERSION: v1RESOURCE: ports <[]Object>FIELDS:name <string> # 端口名称,如果指定,必须保证name在pod中是唯一的containerPort<integer> # 容器要监听的端口(0<x<65536)hostPort <integer> # 容器要在主机上公开的端口,如果设置,主机上只能运行容器的一个副本(一般省略)hostIP <string> # 要将外部端口绑定到的主机IP(一般省略)protocol <string> # 端口协议。必须是UDP、TCP或SCTP。默认为"TCP"
在k8s中主要有四例port,分别为:containerPort、port、nodePort、targetPort。

-
port:是k8s集群内部访问service的端口,即通过clusterIP: port可以访问到某个service,也就是说,port是集群内,service之间的访问;
-
nodePort:是外部访问k8s集群中service的端口,通过nodeIP: nodePort可以从外部访问到某个service;
-
targetPort:是pod的端口,从port和nodePort来的流量经过kube-proxy流入到后端pod的targetPort上,最后进入容器;
-
containerPort:是pod内部容器的端口,targetPort映射到containerPort;
所以说外部流量是先经过nodeport进入到service,由targetPort进入到pod里面,再由containerPort进入到容器里面去。
02资源配额
也就是我们 Pod 在进行调度的时候,可以对调度的资源进行限制,例如我们限制 Pod 调度时使用的资源是 2C4G,那么在调度对应的 node 节点时,只会占用对应的资源,对于不满足资源的节点,将不会进行调度。
容器中的程序要运行,肯定是要占用一定资源,比如 cpu 和内存等,如果不对某个容器的资源做限制,那么它就可能吃掉大量资源,导致其它容器无法运行。针对这种情况,kubernetes 提供了对内存和cpu 的资源进行配额的机制,这种机制主要通过 resources 选项实现,他有两个子选项:
-
limits:用于限制运行时容器的最大占用资源,当容器占用资源超过 limits 时会被终止,并进行重启;
-
requests :用于设置容器需要的最小资源,如果环境资源不够,容器将无法启动可以通过上面两个选项设置资源的上下限;
接下来,编写一个测试案例,创建 pod-resources.yaml
apiVersion: v1kind: Podmetadata:name: pod-resourcesnamespace: testspec:containers:- name: nginximage: nginx:1.14resources: # 资源配额limits: # 限制资源(上限)cpu: "2" # CPU限制,单位是core数memory: "10Gi" # 内存限制requests: # 请求资源(下限)cpu: "1" # CPU限制,单位是core数memory: "10Mi" # 内存限制
在这对 cpu 和 memory 的单位做一个说明:
-
cpu:core 数,可以为整数或小数
-
memory:内存大小,可以使用 Gi、Mi、G、M 等形式
运行Pod[root@dce-10-6-215-215 ~]# kubectl apply -f pod-resources.yamlpod/pod-resources created# 查看发现 pod 运行正常[root@dce-10-6-215-215 ~]# kubectl get pod pod-resources -n zouzouNAME READY STATUS RESTARTS AGEpod-resources 1/1 Running 0 39s# 接下来,停止 Pod[root@dce-10-6-215-215 ~]# kubectl delete -f pod-resources.yamlpod "pod-resources" deleted# 编辑 pod,修改 resources.requests.memory 的值为 10Gi[root@dce-10-6-215-215 ~]# vim pod-resources.yaml# 再次启动 pod[root@dce-10-6-215-215 ~]# kubectl create -f pod-resources.yamlpod/pod-resources created# 查看 Pod 状态,发现 Pod 启动失败[root@dce-10-6-215-215 ~]# kubectl get pod pod-resources -n test -o wideNAME READY STATUS RESTARTS AGEpod-resources 0/1 Pending 0 20s# 查看pod详情会发现,如下提示[root@dce-10-6-215-215 ~]# kubectl describe pod pod-resources -n testType Reason Age From Message---- ------ ---- ---- -------Warning FailedScheduling 21s (x3 over 95s) default-scheduler 0/3 nodes areavailable: 1 node(s) had taint {tag: cs},that the pod didn't tolerate, 2 Insufficient cpu.