14、k8s-pod资源-pod下的spec:containers属性

使用命令查看containers的可选项:kubectl explain pod.spec.containers

1、kubectl explain pod.spec.containers
===========================
KIND:     Pod
VERSION:  v1

containers <[]Object>    #数组,代表可以有多个容器
    name: <string>    #容器名称
    image<string>    #容器需要的镜像
    imagePillPolicy :    <string>    #镜像拉取策略
    command:    <[]string>    #容器的启动命令列表、如不指定、就使用打包时使用的启动命令
    args:    <[]string>    #容器的启动命令需要的参数列表
    env:    <[]string>    #容器环境变量的配置
    ports:        #容器需要暴露的端口
    resources:    <Object>    #资源限制核资源请求的设置

 

1、pod的yaml基本配置:

  新建一个pod、pod里面创建两个容器:一个nginx、一个busybox

1、创建:vim pod-base.yaml
==================================
apiVersion: v1
kind: Pod
metadata:
 name: pod-base
 namespace: dev
 labels:
  user: heima

spec:
 containers:
 - name: nginx
   image: nginx:1.17.1
 - name: busybox
   image: busybox:1.30
===================================
#busybox:1.30  是一个小巧的linux命令集合、这是一个工具不是程序、所以一般不执行命令的时候是不启动的

2、执行文件:kubectl create -f pod-base.yaml

3、查看pod内的容器状态:kubectl get pods -ndev

 

注意这里由于busybox不是一个程序所以一直会有一个容器启动失败

 

2、pod镜像的拉取策略:kubectl explain pod.spec.containers.imagePullPolicy  #可以查看imagePullPolicy的参数

  containers:

    imagePullPolicy

1、创建yaml文件:vim pod-imagepullpolicy.yaml
==================================
apiVersion: v1
kind: Pod
metadata:
 name: pod-imagepullpolicy        #pod名建议核文件名一直
 namespace: dev
 
spec:
 containers:
 - name: nginx
   image: nginx:1.17.1
   imagePullPolicy: Always
 - name: busybox
   image: busybox:1.30
=======================================
#这里的策略:imagePullPolicy用于设置镜像的拉取策略、有三种策略:
    ·Always    :总是从远处仓库拉取镜像(一直用远程拉取的镜像)
    ·ifNotPresent:本地有镜像则使用本地的、本地没有就从远程仓库拉取
    ·Nerver:只使用本地的镜像、绝不从远程仓库拉取
#imagePullPolicy默认值说明:
    ·如果image后面tag跟着具体的版本号、则默认策略是ifNotPresent
    ·如果image后面tag为:latest(最新版本)、则默认策略是Always

2、执行文件:kubectl create -f pod-imagepullpolicy.yaml

3、查看pod:vim pod-imagepullpolicy.yaml

 

注意这里由于busybox不是一个程序所以一直会有一个容器启动失败

 

3、pod镜像的容器运行指令:command

  ·containers:

           command

1、创建yaml文件:vim pod-command.yaml
=================================
apiVersion: v1
kind: Pod
metadata:
 name: pod-command
 namespace: dev

spec:
 containers:
 - name: nginx
   image: nginx:1.17.1
 - name: busybox
   image: busybox:1.30
   command: ["/bin/sh","-c","touch /tmp/hello.txt;while true;do /bin/echo $(date +%T) >> /tmp/hello.txt; sleep 3; done;"]

=========================================
#"/bin/sh","-c"   # "-c" 是一个选项,用于指示 shell(例如 /bin/sh)执行一个命令或命令字符串

#while ture;do /bin/echo $(date +%T) >> /tmp/hello.txt; sleep 3; done;    表示每隔3秒向文件中写入当前时间

2、执行文件:kubectl create -f pod-command.yaml

3、查看pod状态:kubectl get pod -ndev
#此时看到两个容器都跑起来了

 

4、进入容器查看hell.txt文件查看是否写入时间:kubectl exec pod-command -ndev -it -c busybox /bin/sh

  #-c 指定进入的容器名称

 

 

 

 

4、containers下的环境变量(以键值对展示)

  containers:

    env:

1、创建文件:vim pod-env.yaml
-=========================
apiVersion: v1
kind: Pod
metadata:
 name: pod-env
 namespace: dev

spec:
 containers:
 - name: busybox
   image: busybox:1.30
   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: "123456"
=============================

2、执行文件:kubectl create -f pod-env.yaml

3、查看pod:kubectl get pod -ndev

4、进入容器:kubectl exec pod-env -ndev -it -c busybox /bin/sh

5、打印变量:

 

 

5、containers下的端口ports

    containers:

      ports:

1、查看ports有哪些属性:explain pod.spec.containers.ports
KIND:     Pod
VERSION:  v1
RESOURCE: ports <[]Object>   

FIELDS:
   name    <string>     #端口名称、如果指定必须保证在pod中是唯一的
   containerPort    <integer>     #容器要监听的端口(0<x<65536) 容器内部访问的端口  、不是外部访问的端口、外界访问还是应用程序默认的端口如nginx是80   
   hostPort    <integer>      #容器要在主机上公开的端口、如果设置,主机上只能运行容器的一个副本(一般省略)
   hostIP    <string>         #要将外部端口绑定到的主机ip(一般省略)
   protocol    <string>     #端口协议、必须是UDP、TCP、SCTP。默认是TCP
    
2、新建yaml文件:vim pod-ports.yaml
==========================================================

apiVersion: v1
kind: Pod
metadata:
name: pod-ports
namespace: dev


spec:
containers:
- name: nginx
  image: nginx:1.17.1
  imagePullPolicy: IfNotPresent
  ports:
  - name: nginx-port
    containerPort: 8080        #这里设置的只是容器内的nginx监听端口、pod外访问的端口还是nginx默认的80端口
    protocol: TCP

====================================================

2、执行文件:kubectl create -f pod-ports.yaml
3、查看pod信息:kubectl get pods pod-ports -ndev -o yaml

访问nginx服务需要:pod的ip:containerPort    如这里:curl 10.244.1.58:80

 

6、containers中的资源配置:resources

    containers:

      resources:

                    

 

1、创建yaml文件:vim pod-resources.yaml
==============================
apiVersion: v1
kind: Pod
metadata:
 name: pod-resources
 namespace: dev

spec:
 containers:
 - name: nginx
   image: nginx:1.17.1
   resources:   #资源配置
    limits:     #资源配置上限
     cpu: "2"    #cpu限制
     memory: "10Gi"  #内存限制
    requests:   #资源配置下限
     cpu: "1"
     memory: "1Gi"

======================================
#cup:core数、可以为整数或小数
#memory:内存大小、可以用Gi、Mi、G、M等形式


2、执行文件:kubectl create -f pod-resources.yaml

3、

 

posted @ 2024-07-01 00:10  little小新  阅读(57)  评论(0编辑  收藏  举报