03 环境变量和标签

01 环境变量

01-1 传递单个环境变量

[root@master01 yaml]# cat 03-command-args.yaml 
apiVersion: v1
kind: Pod
metadata: 
  name: likexy
spec:
  hostNetwork: true
  containers:
  - name: a1
    image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
    command: ["tail"]
    args: ["-f","/etc/hosts"]
[root@master01 yaml]# kubectl get pods -o wide
NAME     READY   STATUS    RESTARTS   AGE    IP            NODE     NOMINATED NODE   READINESS GATES
likexy   1/1     Running   0          5m5s   172.2.25.52   node01   <none>           <none>

image-20250521083255557

图1 创建在里面添加环境变量的Pod

01-2 传递多个环境变量

[root@master yaml]# cat 04-env.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: likexy
spec:
  hostNetwork: true
  containers:
  - name: a1
    image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
    env: 
    - name: like
      value: xy
    - name: city
      value: Dalian
# 查看环境变量
[root@master yaml]# kubectl exec -it likexy -- env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=node01
TERM=xterm
like=xy
city=Dalian
KUBERNETES_SERVICE_HOST=172.125.0.1
KUBERNETES_SERVICE_PORT=443
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT=tcp://172.125.0.1:443
KUBERNETES_PORT_443_TCP=tcp://172.125.0.1:443
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_ADDR=172.125.0.1
NGINX_VERSION=1.20.1
NJS_VERSION=0.5.3
PKG_RELEASE=1
HOME=/root

image-20250526124854071

图2 查看环境变量

02 指定Node

[root@master yaml]# cat 05-nodename.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: likexy
spec:
  nodeName: node01
  hostNetwork: true
  containers:
  - name: a1
    image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
    env:
    - name: like
      value: xy
    - name: City
      value: Dalian
[root@master yaml]# kubectl get pods -o wide

NAME     READY   STATUS    RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES
likexy   1/1     Running   0          15s   172.2.25.51   node01   <none>           <none>

image-20250526125659029

图3 指定Node

03 镜像拉取策略

# 镜像的拉取策略:
	# - Never
		如果本地有镜像则尝试启动
		如果本地没有镜像则不会启动。
		
	# - Always:
		如果本地有镜像则将本地的摘要信息和远程仓库的信息进行比对,若相同则使用本地镜像缓存,若不同,则直接去远程仓库拉取。
		如果本地没有镜像则直接拉取镜像。
		
	# - IfNotPresent:
		如果本地有镜像则尝试启动。
		如果本地没有镜像,则会去远程仓库拉取镜像。
		
	# 默认策略:
		当镜像的TAG是latest时,则默认的镜像下载策略为Always,若镜像的TAG不是latest时,则镜像下载策略为IfNotPresent。
[root@master yaml]# cat 06-wordpress.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: likexy
spec:
  nodeName: node01
  hostNetwork: true
  imagePullPolicy: 
  containers:
  - name: sql
    image: mysql:8.0.36-oracle
    env:
    - name: MYSQL_ALLOW_EMPTY_PASSWORD
      value: "yes"
    - name: MYSQL_USER
      value: "likexy"
    - name: MYSQL_PASSWORD
      value: "123123"
    - name: MYSQL_DATABASE
      value: "likexy"
---
apiVersion: v1
kind: Pod
metadata:
  name: xy
spec:
  nodeName: node01
  hostNetwork: true
  containers:
  - name: wp
    image: wordpress:latest
    imagePullPolicy: IfNotPresent
    env:
    - name: WORDPRESS_DB_HOST
      value: "172.2.25.51"
    - name: WORDPRESS_DB_USER
      value: "likexy"
    - name: WORDPRESS_DB_PASSWORD
      value: "123123"
    - name: WORDPRESS_DB_NAME
      value: "likexy"

image-20250526204908894

图4 Pod详细信息

image-20250526205853108

图5 成功访问Wordpress

04 声明式和响应式

04-1 声明式

# - 声明式:
	# 基于资源清单管理K8S集群资源。
[root@master yaml]# cat 04-env.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: likexy
spec:
  hostNetwork: true
  containers:
  - name: a1
    image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
    env: 
    - name: like
      value: xy
    - name: city
      value: Dalian

04-2 响应式

# - 响应式:
	# 不通过资源清单管理K8S集群资源,而是基于命令行的方式管理K8S集群资源。
[root@master231 pods]# kubectl run oldboyedu-xiuxian-v1 --image=registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1 --env="SCHOOL=UCAS" --env="baby=xy"

04 排错

02-1 查看状态显示ContainerCreating

[root@master yaml]# kubectl describe pods likexy
...
Events:
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  58s   default-scheduler  Successfully assigned default/likexy to node01
  Normal  Pulling    57s   kubelet            Pulling image "registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1"
[root@master yaml]# kubectl get pods -o wide
NAME     READY   STATUS              RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES
likexy   0/1     ContainerCreating   0          67s   172.2.25.51   node01   <none>           <none>

image-20250526124140068

正在拉取镜像

02-2 字段不正确

# 应为
# spec:
#   containers:
#   - name: sql
[root@master yaml]# cat 06-wordpress.yaml 
...
spec:
  nodeName: node01
  hostNetwork: true
  imagePullPolicy: 
  containers:
    name: sql
...
[root@master yaml]# kubectl apply -f 06-wordpress.yaml 
error: error validating "06-wordpress.yaml": error validating data: ValidationError(Pod.spec.containers): invalid type for io.k8s.api.core.v1.PodSpec.containers: got "map", expected "array"; if you choose to ignore these errors, turn validation off with --validate=false

image-20250526203559763

提示字段不正确

02-3 环境变量格式问题

# 错误的
[root@master yaml]# cat 06-wordpress.yaml
apiVersion: v1
kind: Pod
metadata:
  name: likexy
spec:
  nodeName: node01
  hostNetwork: true
  imagePullPolicy: 
  containers:
  - name: sql
    image: mysql:8.0.36-oracle
    env:
    - name: MYSQL_ALLOW_EMPTY_PASSWORD
      value: "yes"
    - name: MYSQL_USER
      value: likexy
    - name: MYSQL_PASSWORD
      value: 123123
    - name: MYSQL_DATABASE
      value: likexy
---
apiVersion: v1
kind: Pod
metadata:
  name: xy
spec:
  nodeName: node01
  hostNetwork: true
  containers:
  - name: wp
    image: wordpress:latest
    imagePullPolicy: IfNotPresent
    env:
    - name: WORDPRESS_DB_HOST
      value: 172.2.25.51
    - name: WORDPRESS_DB_USER
      value: likexy
    - name: WORDPRESS_DB_PASSWORD
      value: 123123
    - name: WORDPRESS_DB_NAME
      value: likexy
[root@master yaml]# kubectl apply -f 06-wordpress.yaml 
Error from server (BadRequest): error when creating "06-wordpress.yaml": Pod in version "v1" cannot be handled as a Pod: json: cannot unmarshal number into Go struct field EnvVar.spec.containers.env.value of type string
Error from server (BadRequest): error when creating "06-wordpress.yaml": Pod in version "v1" cannot be handled as a Pod: json: cannot unmarshal number into Go struct field EnvVar.spec.containers.env.value of type string

image-20250526204453874

格式问题报错
posted @ 2025-05-26 21:13  Chains_1  阅读(15)  评论(0)    收藏  举报