k8s篇-Pod配置管理

在kubernetes中,一个Pod容器要运行,可能会用到多种配置信息,比如应用配置文件、环境变量、命令行参数、账号密码、token等信息,以及Pod运行时所需要的CPU和内存资源,还有Pod在集群中的身份认证问题等等。

在k8s中这些都是如何管理起来的?主要有以下几种方式:

  • ConfigMap:可变配置(环境变量、配置文件、命令参数等)
  • Secret:敏感信息(账号密码、Token等)
  • ServiceAccount:身份认证
  • Spec.Containers.Resources.limits/requests: 资源限制
  • Spec.Containers.SecurityContext:安全管控
  • InitContainer:前置校验

一、ConfigMap

用于保存Pod容器运行时所需的配置信息,比如应用的一些配置文件、环境变量、命令参数等,这些信息都是明文的。

1、创建ConfigMap

语法: 

kubectl create configmap --help
kubectl create configmap NAME [--from-file=[key=]source] [--from-literal=key1=value1] 

示例1:从文件中导入配置信息

$ kubectl create configmap kube-flannel-cfg --from-file=cni-conf.json --from-file=net-conf.json
$ kubectl get configmap kube-flannel-cfg -o yaml -n kube-system
apiVersion: v1
kind: ConfigMap
metadata:
  name: kube-flannel-cfg
  namespace: kube-system
data:
  cni-conf.json: |
    {
      "name": "cb0",
      "type": "flannel",
      "delegate": {
        "isDefaultGateway": true
      }
    }
  net-conf.json: |
    {
      "Network": "172.16.0.0/16",
      "Backend": {
        "Type": "alloc"
      }
    }

示例2:命令行中指定配置信息

$ kubectl create configmap test-conf --from-literal=proxy-body-size=20m --from-literal=proxy-connect-timeout="10" --from-literal=special.keyid='123'
$ kubectl get configmap test-conf -o yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: test-conf
  namespace: default
data:
  proxy-body-size: 20m
  proxy-connect-timeout: "10"
  special.keyid: "123"

2、使用ConfigMap

要提前创建好以下两个configmap:

$ kubectl get configmap cloud-config -o yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: cloud-config
  namespace: default
data:
  special.keyid: 123
  special.keysecret: abc

$ kubectl get configmap env-config -o yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: env-config
  namespace: default
data:
  log_level: INFO

方式1:用作环境变量

通过 spec.containers.env.valueFrom.configMapKeyRef 字段来设置成环境变量,环境变量会注入到Pod容器中。

apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
    - name: test-container
      image: gcr.io/google_containers/busybox
      command: [ "/bin/sh", "-c", "env" ]
      env:
        - name: ACCESS_KEY_ID
          valueFrom:
            configMapKeyRef:
              name: cloud-config       # name指定为ConfigMap名称
              key: special.keyid       # 指定ConfigMap.data里面的key
        - name: ACCESS_KEY_SECRET
          valueFrom:
            configMapKeyRef:
              name: cloud-config
              key: special.keysecret
      envFrom:                         # envFrom是导入指定ConfigMap的所有信息
        - configMapRef:
            name: env-config

进入Pod容器里,执行env命令,就会看到 ACCESS_KEY_ID 和 ACCESS_KEY_SECRET 变量。如果ConfigMap里有些key是无效的,比如key名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值