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>
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
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>
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"
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>
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
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