栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Kubernetes的Pod组件详解----环境变量配置、端口配置与Pod资源配额

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Kubernetes的Pod组件详解----环境变量配置、端口配置与Pod资源配额

一、环境变量配置

Pod中的环境变量配置即env参数
修改pod_base.yaml文件如下,增加env参数

apiVersion: v1
kind: Pod
metadata:
  name: pod-base
  namespace: dev
  labels:
    user: redrose2100
spec:
  containers:
  - name: nginx
    image: nginx:latest
    imagePullPolicy: IfNotPresent
  - name: busybox
    image: busybox
    imagePullPolicy: Always
    command: ["/bin/sh","-c","touch /tmp/hello.txt;while true;do /bin/echo $(date +%T) >> /tmp/hello.txt;sleep 3;done;"]
    env:
    - name: "username"
      value: "admin"
    - name: "password"
      value: "admin123"

执行如下命令创建pod

[root@master ~]# kubectl create -f pod_base.yaml
pod/pod-base created
[root@master ~]#

然后执行如下命令进入docker查看变量,如下表示成功

[root@master ~]# kubectl exec pod-base -n dev -it -c busybox /bin/sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
/ # echo $username
admin
/ # echo $password
admin123
/ #

这种方式不推荐,推荐时候后面介绍的配置文件的方式

二、端口配置

端口配置ports参数
查看ports帮助信息

[root@master ~]# kubectl explain pod.spec.containers.ports
KIND:     Pod
VERSION:  v1

RESOURCE: ports <[]Object>

DEscriptION:
     List of ports to expose from the container. Exposing a port here gives the
     system additional information about the network connections a container
     uses, but is primarily informational. Not specifying a port here DOES NOT
     prevent that port from being exposed. Any port which is listening on the
     default "0.0.0.0" address inside a container will be accessible from the
     network. Cannot be updated.

     ContainerPort represents a network port in a single container.

FIELDS:
   containerPort         -required-
     Number of port to expose on the pod's IP address. This must be a valid port
     number, 0 < x < 65536.

   hostIP       
     What host IP to bind the external port to.

   hostPort     
     Number of port to expose on the host. If specified, this must be a valid
     port number, 0 < x < 65536. If HostNetwork is specified, this must match
     ContainerPort. Most containers do not need this.

   name 
     If specified, this must be an IANA_SVC_NAME and unique within the pod. Each
     named port in a pod must have a unique name. Name for the port that can be
     referred to by services.

   protocol     
     Protocol for port. Must be UDP, TCP, or SCTP. Defaults to "TCP".

[root@master ~]#

具体如下:

name 端口名称,如果指定,必须保证name在pod中是唯一的containerPort 容器要监听的端口(0–65536)hostPort 容器要再主机上公开的端口,如果设置,主机上只能运行容器的一个副本(一般省略)hostIP 要将外部端口绑定到主机IP(一般省略)protocol 端口协议,必须是UDP,TCP,SCTP,默认是TCP

编辑 pod_base.yaml文件,将nginx的容器设置端口号和协议

apiVersion: v1
kind: Pod
metadata:
  name: pod-base
  namespace: dev
  labels:
    user: redrose2100
spec:
  containers:
  - name: nginx
    image: nginx:latest
    imagePullPolicy: IfNotPresent
    ports:
    - name: nginx-port
      containerPort: 80
      protocol: TCP
  - name: busybox
    image: busybox
    imagePullPolicy: Always
    command: ["/bin/sh","-c","touch /tmp/hello.txt;while true;do /bin/echo $(date +%T) >> /tmp/hello.txt;sleep 3;done;"]
    env:
    - name: "username"
      value: "admin"
    - name: "password"
      value: "admin123"

使用如下命令创建

[root@master ~]# kubectl apply -f pod_base.yaml
pod/pod-base created
[root@master ~]# 

通过如下命令可以查看到设置的容器端口已经是80了

kubectl get pod pod-base -n dev -o yaml

访问容器中的程序需要使用:podIP:containerPort

三、Pod资源配额

容器中的程序要运行,肯定是要占用一定资源的,比如CPU和内存等,乳沟不对某个容器的资源做限制,那么它就可能吃掉大量资源,导致气他容器无法运行,针对这种情况,kubernetes提供了对内存和CPU的资源进行配额的机制,这种机制主要通过resources选项类实现,它有两个子选项

limits:用于限制运行时容器的最大占用资源,当容器占用资源超过limits时会被终止,并进行重启requests:用于设置容器需要的最小资源,如果环境资源不够,容器就无法启动

如下,编辑pod_base.yaml文件,对nginx容器设置资源上限和下限设置

apiVersion: v1
kind: Pod
metadata:
  name: pod-base
  namespace: dev
  labels:
    user: redrose2100
spec:
  containers:
  - name: nginx
    image: nginx:latest
    imagePullPolicy: IfNotPresent
    ports:
    - name: nginx-port
      containerPort: 80
      protocol: TCP
    resources:
      limits:
        cpu: "2"
        memory: "2G"
      requests:
        cpu: "1"
        memory: "256M"
  - name: busybox
    image: busybox
    imagePullPolicy: Always
    command: ["/bin/sh","-c","touch /tmp/hello.txt;while true;do /bin/echo $(date +%T) >> /tmp/hello.txt;sleep 3;done;"]
    env:
    - name: "username"
      value: "admin"
    - name: "password"
      value: "admin123"

使用如下命令创建pod

[root@master ~]# kubectl apply -f pod_base.yaml
pod/pod-base created
[root@master ~]#

这里可以做个实验,将cpu下限修改为3,上限修改为4,然后再次尝试,因为这里虚拟机的核数是2,下限修改为3后是明显不能满足要求的

apiVersion: v1
kind: Pod
metadata:
  name: pod-base
  namespace: dev
  labels:
    user: redrose2100
spec:
  containers:
  - name: nginx
    image: nginx:latest
    imagePullPolicy: IfNotPresent
    ports:
    - name: nginx-port
      containerPort: 80
      protocol: TCP
    resources:
      limits:
        cpu: "4"
        memory: "2G"
      requests:
        cpu: "3"
        memory: "256M"
  - name: busybox
    image: busybox
    imagePullPolicy: Always
    command: ["/bin/sh","-c","touch /tmp/hello.txt;while true;do /bin/echo $(date +%T) >> /tmp/hello.txt;sleep 3;done;"]
    env:
    - name: "username"
      value: "admin"
    - name: "password"
      value: "admin123"

再次重新创建后通过如下命令可以看到这里提示cpu不够用了

[root@master ~]# kubectl describe pod pod-base -n dev
Name:         pod-base
Namespace:    dev
Priority:     0
Node:         
Labels:       user=redrose2100
Annotations:  
Status:       Pending
IP:
IPs:          
Containers:
  nginx:
    Image:      nginx:latest
    Port:       80/TCP
    Host Port:  0/TCP
    Limits:
      cpu:     4
      memory:  2G
    Requests:
      cpu:        3
      memory:     256M
    Environment:  
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-b4c4b (ro)
  busybox:
    Image:      busybox
    Port:       
    Host Port:  
    Command:
      /bin/sh
      -c
      touch /tmp/hello.txt;while true;do /bin/echo $(date +%T) >> /tmp/hello.txt;sleep 3;done;
    Environment:
      username:  admin
      password:  admin123
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-b4c4b (ro)
Conditions:
  Type           Status
  PodScheduled   False
Volumes:
  kube-api-access-b4c4b:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       
    DownwardAPI:             true
QoS Class:                   Burstable
Node-Selectors:              
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason            Age   From               Message
  ----     ------            ----  ----               -------
  Warning  FailedScheduling  13s   default-scheduler  0/3 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate, 2 Insufficient cpu.
  Warning  FailedScheduling  12s   default-scheduler  0/3 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate, 2 Insufficient cpu.
[root@master ~]# 
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/759749.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号