涨薪技术|Kubernetes(k8s)之Pod端口设置及资源配额

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.

相关推荐
.生产的驴1 小时前
Docker 部署Nexus仓库 搭建Maven私服仓库 公司内部仓库
java·运维·数据库·spring·docker·容器·maven
文人sec1 小时前
接口自动化测试设计思路--设计实战
python·https·单元测试·自动化·pytest
Ramseyuu2 小时前
Mybatis-plus
微服务·云原生·架构
搬砖的工人2 小时前
Docker环境下的Apache NiFi安装实践踩坑记录
docker·容器·apache
luck_me52 小时前
K8s 图形界面管理kubesphere
云原生·容器·kubernetes
QX_hao5 小时前
【docker】--镜像管理
运维·docker·容器
Auc246 小时前
OJ判题系统第6期之判题逻辑开发——设计思路、实现步骤、代码实现(策略模式)
java·开发语言·docker·容器·策略模式
快乐肚皮6 小时前
深入解析Docker:核心架构与最佳实践
java·运维·docker·容器
matrixlzp7 小时前
Nginx 源码安装成服务
nginx·云原生
上天_去_做颗惺星 EVE_BLUE9 小时前
Docker入门教程:常用命令与基础概念
linux·运维·macos·docker·容器·bash