Kubernetes 集群 Pod 资源镜像拉取策略、环境变量、端口设置等详细参数使用(五)...

您所在的位置:网站首页 镜像拉取策略怎么设置 Kubernetes 集群 Pod 资源镜像拉取策略、环境变量、端口设置等详细参数使用(五)...

Kubernetes 集群 Pod 资源镜像拉取策略、环境变量、端口设置等详细参数使用(五)...

2024-07-10 11:39| 来源: 网络整理| 查看: 265

前戏

pod资源无法使用 apply 进行更新,必须是有 pod 控制器的 yaml 文件才能使用 apply 进行更新配置

Pod 资源镜像拉取配置

主要了解 pod.spec.containers 属性,主要是针对镜像的一些配置

Pod 资源镜像配置属性 [root@k8s-master ~]# kubectl explain pod.spec.containers KIND: Pod VERSION: v1 RESOURCE: containers FIELDS: name -required- //定义容器的名 image //定义容器使用的镜像 imagePullPolicy //镜像拉取策略 command //配置容器启动命令列表,如不指定,使用打镜像时的启动命令 args //容器启动命令需要的参数列表 env //配置容器的环境变量 ports //配置容器需要暴露的端口列表,也就是要将什么端口暴露出去 resources //资源限制和资源请求配置 image、imagePullPolicy、command、args、env、ports、resources 这些命令都是放在一个容器下面,可以对不同的容器编写不同的配置参数,与某一个容器的 - name 对齐,就代表对这一个容器生效 编写 Yaml 创建基本 Pod

containers 配置只设置 name 和 images 两个参数

1.编写yaml [root@k8s-master ~/k8s_1.19_yaml]# vim pod-base.yaml apiVersion: v1 kind: Pod metadata: name: pod-base namespace: dev labels: app: base spec: containers: - name: nginx #容器名称 image: nginx:1.18 #容器的镜像 - name: busybox #容器名称 image: busybox:1.30 #容器的的镜像 2.创建pod [root@k8s-master ~]# kubectl create -f pod-base.yaml pod/pod-base created 3.查看pod #可以看到只有一个pod运行成功了,目前 pod 的状态为 CrashLoopBackOff [root@k8s-master ~]# kubectl get all -n dev NAME READY STATUS RESTARTS AGE pod/pod-base 1/2 CrashLoopBackOff 4 2m54s 4.查看详细的pod日志 [root@k8s-master ~]# kubectl describe pod/pod-base -n dev

可以在详细输出信息中看到 nginx 已经启动, busybox 成功拉取但未启动

Kubernetes 集群 Pod 资源镜像拉取策略、环境变量、端口设置等详细参数使用(五)_Pod

镜像拉取策略

imagePullPolicy 用于设置镜像拉取策略 k8s 支持的三种镜像拉取策略:

Always

从远程仓/库拉取镜像

ifNotPresent: 本地有镜像则从本地拉取,本地没有则去远程仓库拉取镜像

Never:  只从本地拉取镜像,从不去远程仓库拉取景想,本地没有会报错 imagePullPolicy 默认值说明:如果镜像 tag 标签为具体的版本号,默认策略是i fNotPresent 如果镜像 tag 为 latest,默认策略是 always

imagePullPolicy 可以针对同一个 pod 下不同的容器不同的拉取策略下面的一段 yam 就是对 nginx 采用 ifNotPresent 策略,对 busybox 采用 Never

- name: nginx image: nginx:1.11 imagePullPolicy: IfNotPresent - name: busybox image: busybox:1.30 imagePullPolicy: Never

配置镜像拉取策略

配置镜像拉取策略为 Never  1.配置镜像拉取策略为Never [root@k8s-master ~]# vim pod-imagepullpolicy.yml apiVersion: v1 kind: Pod metadata: name: pod-imagepullpolicy namespace: dev labels: app: base spec: containers: - name: nginx image: nginx:1.11 #拉取一个本地不存在的镜像 imagePullPolicy: Always - name: busybox image: busybox:1.30 2.创建资源 [root@k8s-master ~]# kubectl create -f pod-imagepullpolicy.yml pod/pod-imagepullpolicy created 3.查看创建过程 [root@k8s-master ~]# kubectl describe pod/pod-imagepullpolicy -n dev

因为本地没有 nginx:1.11 版本,当前策略是 Never

Kubernetes 集群 Pod 资源镜像拉取策略、环境变量、端口设置等详细参数使用(五)_Pod_02

配置拉取策略为 Always 

Always 永远从远程仓库拉取,比较耗时,最好的就是使用 ifNotPresent,要拉取新的镜像所有可以用 Always 策略

1.编写yaml [root@k8s-master ~]# vim pod-imagepullpolicy.yml apiVersion: v1 kind: Pod metadata: name: pod-imagepullpolicy namespace: dev labels: app: base spec: containers: - name: nginx image: nginx:1.11 imagePullPolicy: Always - name: busybox image: busybox:1.30 2.创建资源 [root@k8s-master ~]# kubectl create -f pod-imagepullpolicy.yml pod/pod-imagepullpolicy created 3.查看资源 [root@k8s-master ~]# kubectl describe pod pod-imagepullpolicy -n dev

Kubernetes 集群 Pod 资源镜像拉取策略、环境变量、端口设置等详细参数使用(五)_环境变量_03

配置容器环境变量

主要是在容器启动后设置一些环境变量 env 配置和 args 等命令都是对齐的,其实这些参数放在哪个容器下面,就是对哪个容器生效的,目前就只是对 busybox 容器生效,可以设置多个变量,每一个变量以-开始算一组环境变量建议定义在 configmap 中

[root@k8s-master ~]# kubectl explain pod.spec.containers.env KIND: Pod VERSION: v1 RESOURCE: env FIELDS: name //定义变量的名称 value //定义变量的值 1.编写yaml apiVersion: v1 kind: Pod metadata: name: pod-env namespace: dev labels: app: base spec: containers: - name: nginx image: nginx:1.11 imagePullPolicy: IfNotPresent - name: busybox image: busybox:1.30 imagePullPolicy: IfNotPresent #command: ["/bin/sh","-c","touch/hello.txt;while true;do /bin/echo $(date +%T)>>/tmp/hellow.txt;sleep 3;done;"] command: ["/bin/sh"] args: ["-c","touch/hello.txt;while true;do /bin/echo $(date +%T)>>/tmp/hellow.txt;sleep 3;done;"] env: # env 配置和 args 都是对齐的,其实这些命令放在哪个容器下面,就是对哪个容器生效的,目前就只是对 busybox 容器生效,可以设置多个变量,每一个变量以-开始算一组 - name: "username" #定义变量名称 value: "jiangxl" #定义变量值 - name: "job" value: "it" 2.创建pod [root@k8s-master ~]# kubectl create -f pod-env.yaml pod/pod-env created 3.进入容器查看环境变量是否生效 [root@k8s-master ~]# kubectl exec -it pod-env -n dev -c busybox /bin/sh / # echo $username jiangxl / # echo $job it 配置容器端口

containers.ports 用于设置容器对外提供访问的端口

ports 下面还有一些子配置项

[root@k8s-master ~]# kubectl explain pod.spec.containers.ports KIND: Pod VERSION: v1 RESOURCE: ports FIELDS: name //定义端口名称,如果指定,必须保证 name 在当前 pod 中是唯一的 containerPort //定义容器要监听的端口,指定来了哪个端口,就能通过 podip+ 端口进行访问让其中的业务 hostPort //定义容器要在主机上公开的端口,如果设置,主机上只能运行容器的一个副本,这个端口主要是将容器的端口也映射到主机上的一个端口,基本不配置,因为一旦配置,此 pod 只能有一个副本,如果有2个以上副本,那么映射的端口都一致,就会出现端口冲突的现象 hostIP //定义要将 hostPort 绑定到哪个节点 IP 上,一般不设置 protocol //定义端口协议,必须是 UDP、TCP、SCTP,默认为 TCP 设置 nginx 容器对外暴露端口 1.编写yaml文件 [root@k8s-master ~]# vim pod-ports.yaml apiVersion: v1 kind: Pod metadata: name: pod-ports namespace: dev labels: app: base spec: containers: - name: nginx image: nginx:1.11 ports: #定义端口,一个 - name 表示一个端口,可以写多个 - name: nginx-port #定义端口名称 containerPort: 80 #定义开放的端口 protocol: TCP #指定端口属于什么协议 2.创建pod [root@k8s-master ~]# kubectl create -f pod-ports.yaml pod/pod-ports created [root@k8s-master ~]# kubectl get pod/pod-ports -n dev -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES pod-ports 1/1 Running 3 5m37s 10.244.1.32 k8s-node1 3.查看是否生效指定端口 [root@k8s-master ~]# kubectl describe pod/pod-ports -n dev ······· Port: 80/TCP ······· 4.访问容器端口 [root@k8s-master ~]# curl 10.244.1.32:80 Welcome to nginx! ··········


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3