配置容器
配置容器的3种方式:
1)向容器传递命令和参数(如:设置容器启动时自动运行的命令);
2)容器设置自定义环境变量;
3)特殊类型的卷将配置文件挂载到容器种;
命令和参数
在创建Pod时,通过command和args字段指定命令和参数
1)位于spec.containers字段下;
2)command和args字段在Pod创建后则无法修改;
创建带有命令和参数的Pod格式(其他部分省略):
spec:
containers:
- image: 容器基于的镜像
name: 容器名
command: [“命令”]
args: [“参数1”,“参数2”,“参数N”]
Kubernetes | Docker | 说明 |
---|---|---|
comman | ENTRYPOINT | 传递命令 |
args | CMD | 传递参数 |
//命令都以执行文件的绝对路径表示
环境变量
Kubernetes允许Pod种每个容器拥有独立自定义的环境变量集合
1)环境变量集合无法在Pod创建后被修改;
2)通过env字段(位于spec.containers字段下)配置环境变量集合;
3)调用环境变量的方式:$(变量名)
如:同一个变量名在不同容器下所代表的值不同
创建带有环境变量集合的Pod格式(其他部分省略):
spec:
containers:
- image:容器基于的镜像
name: 容器名
env:
- name: 环境变量名1
value: 环境变量值1
- name:环境变量名2
value: 环境变量值2
- name: 环境变量名N
value: 环境变量值N
ConfigMap
ConfigMap(CM):Kubernetes的一种资源,实现配置数据的传递
1)本质就是键和值的映射;
2)值可以是字符串,也可以是完整的配置文件;
3)映射的内容通过环境变量或卷文件的形式传递给容器;
如:使用ConfigMap配置Pod种相关的容器
创建ConfigMap
创建ConfigMap可通过两种方式:create命令和YAML文件
(1)create命令创建ConfigMap格式:
kubectl create configmap ConfigMap名称 --from-literal=键=值
1)若包含多个键,则需通过多个–from-literal选项单独指定;
2)键的命名仅包含数字、字母、破折号和下划线;
3)除指定值外,还可引用文档格式:
kubectl create configmap ConfigMap名称 --from-file=文档路径
4)默认以文件名作为键(若不使用文件名作为键,可通过“–form-file=键=文件名”的形式修改);
5)若为目录,则引用该目录下的所有文件当作该键的值;
6)若包含多个键,则需通过多个–from-file选项单独指定;
7)可混合使用–from-literal选项和–from-file选项
如:混合使用–from-literal和–from-file选项创建ConfigMap
如:通过create命令创建ConfigMap
(2)YAML文件创建ConfigMap格式:
apiVersion: v1
date:
键1: “值1”
键2: “值2”
键N: “值N”
kind:ConfigMap
metadata:
name: ConfigMap名称
如:通过YAML文件创建ConfigMap
1)编写YAML文件
2)调用create命令生成ConfigMap,并验证
变量传递键的值
通过valueFrom字段可将ConfigMap的键对应值传递给指定变量
1)位于spec.containers.env字段;
2)若引用不存在的ConfigMap,容器无法启动;
//后续创建该ConfigMap,容器会自动启动
3)若Pod内的容器调用该变量只需通过 $(变量名) 的即可;
如:将ConfigMap键的对应值传递给指定变量
创建含有ConfigMap的Pod格式(其他部分省略),单个传递:
spec:
containers:
- image: 容器基于的镜像
env:
- name: 变量名1
valueFrom:
configMapKeyRef:
name: CM名称
key: CM包含的键1
- name: 变量名N
valueFrom:
configMapKeyRef:
name: CM名称N
key: CM包含的键N
(1)设置字段optional为:optional:ture,
1)则无论是否引用的ConfigMap是否存在,容器都启动;
2)位于configMapKeyRef字段下
可一次性将ConfigMap的所有键的值传递给变量
1)默认变量名为键的名称,可通过prefix字段指定前缀;
2)若键的名称非法,则该键被忽略(Kubernetes不会自动转换键的名称)
创建含有ConfigMap的Pod格式(其他部分省略),全部传递:
spec:
containers:
- image: 容器基于的镜像
envFrom:
- prefix: 变量名前缀
configMapRef:
name: CM名称
文档传递键的值
ConfigMap卷将所有键包装成单个文档,并挂载到容器中
1)容器中的进程可通过读取对应的文档,获取相应的值;
2)容器内被挂载的目录,该目录下的所有文件将会被隐藏;
//可通过sbuPath(位于volumeMount字段下)指定卷中单个文件挂载至指定目录下,则该目录下的其他文件不会被隐藏
3)常用于传递配置文件
通过在线更新ConfigMap,实现Pod内容器的热更新
1)通过edit命令在线编辑ConfigMap,实现ConfigMap的更新;
2)仅适用于挂载整个CM卷,而不是挂载单个文档;
3)在ConfigMap更新时,Kubernetes通过链接文件将挂载的所有文件都更新;
//无论是该文件是否更新,只要属于CM的挂载均被更新
4)ConfigMap更新后,其他Pod的容器并不是同步更新的(延迟);
创建含有CM卷的Pod格式(其他部分省略),全部内部挂载:
volumes:
- name: 卷的名称
configMap:
name: CM的名称
defaultMode: “数字权限”
(1)被挂载的文档默认权限配置为644,可通过defaultMode字段修改;
如:创建含有CM配置文件的Pod
1)指定目录下编写nginx配置文件;
2)指定目录下编写其他配置文件;
3)调用create命令生成CM,并验证
4)编写Pod的YAML文件
可传递卷中指定的文档挂载到容器中
创建含有CM卷的Pod格式(其他部分省略),部分内部挂载:
volumes:
- name: 卷名称
configMap:
name: CM的名称
items:
- key: 卷中的键
path: 容器内文档路径
(1)指定卷中键的值将会被存储到指定容器内的文档中;
Secret
Secret:Kubernetes的一种资源,实现隐私数据的安全传递
1)本质就是键和值的映射;
2)值可以是字符串,也可以是完整的文件;
3)Secret的数据只存储在节点的内存中,且以加密的形式保存在主节点中;
Kubernetes集群中默认含有一个Secret
1)集群中每个Pod在创建时,默认挂载该Secret卷;
//挂载目录默为:/var/run/secrets/kubernetes.io/serviceaccount
2)确保Pod从内部安全访问Kubernetes API服务器;
如:查看默认Secret的相关信息
1)列出所有Secret资源信息
2)查看默认Secret的详细信息
3)随机查看Pod,均有挂载默认Secret
创建Secret
创建Secret可通过两种方式:create命令和YAML文件
1)YAML文件创建很少用,类似于ConfigMap创建;
(1)create命令创建Secret格式:
kubectl create secret generic secret名称 --from-literal=键=值
1)若包含多个键,则需通过多个–from-literal选项单独指定;
2)键的命名仅包含数字、字母、破折号和下划线;
3)除指定值外,还可引用文档格式:
kubectl create secret generic secret名称 --from-file=文档路径
4)默认以文件名作为键;
//若不使用文件名作为键,可通过“–form-file=键=文件名”的形式修改;
5)若为目录,则引用该目录下的所有文件当作该键的值;
6)若包含多个键,则需通过多个–from-file选项单独指定;
7)可混合使用–from-literal选项和–from-file选项
如:创建含有私钥和证书Secret
1)创建私钥和证书
2)调用create命令生成Secret
3)查看Secret详细信息
//Secret中键的值是以Base64格式编码保存的(ConfigMap是以纯文本)
可创建用于从Docker Hub仓库拉取镜像的Secret,格式:
kubectl create secret docker-registry Secret名称 --docker-username=Docker Hub的用户名 --docker-password=对应用户的密码
使用格式(其他Pod部分省略):
spec:
imagePullSecrets:
name: Secret名称
文档传递键的值
Secret卷将所有键包装成单个文档,并挂载到容器中
1)容器中的进程可通过读取对应的文档,获取相应的值;
2)容器内被挂载的目录,该目录下的所有文件将会被隐藏;
//可通过sbuPath(位于volumeMount字段下)指定卷中单个文件挂载至指定目录下,则该目录下的其他文件不会被隐藏
3)为确保安全性,始终采用文件传递键的值(也可采用变量传递键的值);
4)常用于用户认证文件
创建含有CM卷的Pod格式(其他部分省略),全部内部挂载:
volumes:
- name: 卷的名称
secret:
secretName: Secret的名称
defaultMode: “数字权限”
(1)挂载的文档默认权限配置为644,可通过defaultMode字段修改;