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、