k8s tasks_为应用注入数据

为容器设置启动时要执行的命令和参数

创建Pod时设置命令及参数

bash 复制代码
# 查看命令使用
kubectl run --help 
  # Start the nginx pod using a different command and custom arguments
  kubectl run nginx --image=nginx --command -- <cmd> <arg1> ... <argN>
# 创建pod 打印变量
kubectl run demo --image=debian --command -- printenv HOSTNAME KUBERNETES_PORT  

controlplane ~ ➜  kubectl logs demo 
demo
tcp://10.96.0.1:443

使用环境变量设置参数

bash 复制代码
# 设置变量并打印
controlplane ~ ✖ kubectl run set-args --image=busybox --env=MSG1=hello --env=MSG2=k8s --command -- sh -c 'echo $MSG1 $MSG2'
pod/set-args created

controlplane ~ ➜  kubectl logs set-args 
hello k8s

通过环境变量将 Pod 信息呈现给容器

用 Pod 字段作为环境变量的值

yaml 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: pod-spec-env
spec:
  containers:
    - name: pod-spec-env
      image: debian
      command: ["printenv"]
      args: ["MY_NODE_NAME","MY_POD_NAME","MY_POD_NAMESPACE","MY_POD_IP","MY_POD_SERVICE_ACCOUNT"]
      env:
        - name: MY_NODE_NAME
          valueFrom:
            fieldRef:
              fieldPath: spec.nodeName
        - name: MY_POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: MY_POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: MY_POD_IP
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
        - name: MY_POD_SERVICE_ACCOUNT
          valueFrom:
            fieldRef:
              fieldPath: spec.serviceAccountName
bash 复制代码
controlplane ~ ➜  kubectl apply -f pod-sepc-env.yml 
pod/pod-spec-env created

controlplane ~ ➜  kubectl logs pod-spec-env 
controlplane
pod-spec-env
default
10.244.0.8
default

jq教程

bash 复制代码
# 可以通过jq工具确定字段
controlplane ~ ➜  kubectl get pod -o json | jq '.items[].spec.nodeName'
"controlplane"

使用容器字段作为环境变量的值

bash 复制代码
# 目前支持的字段
"limits.cpu", "limits.ephemeral-storage", "limits.memory", "requests.cpu", "requests.ephemeral-storage", "requests.memory"
yaml 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
spec:
  containers:
    - name: nginx
      image: nginx
      command: ["printenv"]
      args: ["NGINX_REQ_MEM"]
      resources:
        requests:
          memory: "32Mi"
      env:
        - name: NGINX_REQ_MEM
          valueFrom:
            resourceFieldRef:
              containerName: nginx
              resource: requests.memory


# controlplane ~ ➜  kubectl logs nginx-pod 
33554432

使用 Secret 安全地分发凭据

将 Secret 数据转换为 base-64 形式

yaml 复制代码
controlplane ~ ➜  echo -n 'dean' | base64
ZGVhbg==
controlplane ~ ➜  echo -n 'pwd12345' | base64
cHdkMTIzNDU=

Secret创建

yaml 复制代码
apiVersion: v1
kind: Secret
metadata:
  name: srt
data:
  usr: ZGVhbg==
  pwd: cHdkMTIzNDU=

创建

bash 复制代码
controlplane ~ ➜  kubectl apply -f srt.yml 
secret/srt created

controlplane ~ ➜  kubectl describe secrets srt 
Name:         srt
Namespace:    default
Labels:       <none>
Annotations:  <none>

Type:  Opaque

Data
====
pwd:  8 bytes
usr:  4 bytes
yaml 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: demo
spec:
  containers:
    - name: demo
      image: nginx
      volumeMounts:
        # name 必须与下面的卷名匹配
        - name: secret-volume
          mountPath: /etc/secret-volume
          readOnly: true
  # Secret 数据通过一个卷暴露给该 Pod 中的容器
  volumes:
    - name: secret-volume
      secret:
        secretName: srt

查看信息

bash 复制代码
controlplane ~ ➜  kubectl apply -f demo.yml 
pod/demo created

controlplane ~ ✖ kubectl exec -it demo -- sh
# echo "$( cat /etc/secret-volume/usr)"
dean
# echo "$( cat /etc/secret-volume/pwd )"
pwd12345
相关推荐
咚咚?9 分钟前
docker 启动中间件
docker·中间件·容器
乌托邦的逃亡者6 小时前
Docker的/var/lib/docker/目录占用100%的处理方法
运维·docker·容器
OKUNP10 小时前
Docker高级管理--容器通信技术与数据持久化
docker·容器·php
洁辉11 小时前
Spring Cloud 全栈指南:构建云原生微服务的终极武器
spring cloud·微服务·云原生
阿里云云原生14 小时前
加工进化论:SPL 一键加速日志转指标
云原生
阿里云云原生14 小时前
破解异构日志清洗五大难题,全面提升运维数据可观测性
云原生
果子⌂19 小时前
Docker-构建镜像并实现LNMP架构
mysql·nginx·docker·容器·架构·php
无敌糖果19 小时前
K8S数据流核心底层逻辑剖析
docker·容器·kubernetes·k8s架构·底层逻辑·k8s数据流
阿里云云原生20 小时前
从 Python 演进探寻 AI 与云对编程语言的推动
云原生
亲爱的非洲野猪21 小时前
关于k8s Kubernetes的10个面试题
云原生·容器·kubernetes