Welcome to the K-free blog;|

k-free

园龄:5年8个月粉丝:5关注:7

Kubernetes ---- 存储卷(ConfigMap、secret)

特殊类型的存储卷:


configMap:
  以变量注入的方式给Pod中的容器注入变量修改配置;
  以存储卷的方式挂载到Pod中,配置文件存储在指定位置给Pod提供配置;
  是明文存储数据的;

secret:
  与ConfigMap功能一致,但当中的内容是以base64编码方式存储的;

 

Pod中的容器引用环境变量:
ConfigMap:
  pods.containers.spec.env.envFrom.configMapKeyRef <Object>
  ConfigMap中保存的数据都为键值模式,属于名称空间中的资源

命令行方式创建configmap

复制代码
# 查看ConfigMap的定义语法
$ kubectl explain cm

$ kubectl create configmap --help
Usage:
  kubectl create configmap NAME [--from-file=[key=]source] [--from-literal=key1=value1] [--dry-run] [options]
$ kubectl create configmap nginx-cofnig --from-literal=nginx_port=80 --from-literal=server_name=myapp.kfree.com
$ kubectl get cm
NAME       DATA   AGE
nginx-config   2     2s
$ kubectl describe cm nginx-config
Name: nginx-config
Namespace: default
Labels: <none>
Annotations: <none>

Data
====
nginx_port:
----
80
server_name:
----
myapp.kfree.com
Events: <none>
复制代码

文件方式创建configmap

复制代码
$ vim www.conf
  server {
    server_name myapp.kfree.com;
    listen    80;
    root    /data/web/html/;
  }
$ kubectl create configmap nginx-www --from-file=./www.conf
$ kubectl get cm
NAME     DATA     AGE
nginx-www   1      41s
$ kubectl describe cm nginx-www
Name: nginx-www
Namespace: default
Labels: <none>
Annotations: <none>

Data
====
www.conf(键):
----
(值)
server {
  server_name myapp.kfree.com;
  listen 80;
  root /data/web/html/;
}

Events: <none>
复制代码

将定义好的configmap注入到Pod,定义Pod,只在创建时有效,后续更改无法实时更新。

复制代码
$ vim pod-cm-1.yaml
  apiVersion: v1
  kind: Pod
  metadata:
    name: pod-cm-1
    namespace: default
  spec:
    containers:
    - name: myapp
      image: ikubernetes/myapp:v1
      imagePullPolicy: IfNotPresent
      ports:
      - name: http
        containerPort: 80
      env:
      - name: NGINX_SERVER_PORT
        valueFrom:
          configMapKeyRef:
            name: nginx-config
            key: nginx_port
      - name: NGINX_SERVER_NAME
        valueFrom:
          configMapKeyRef:
          name: nginx-config
          key: server_name
$ kubectl apply -f pod-cm-1.yaml
$ kubectl exec pod-cm-1 -- env 
....
NGINX_SERVER_PORT=80
NGINX_SERVER_NAME=myapp.kfree.com
....
复制代码

将手动撰写的configmap转成文件放入pod(实则就是将创建好的configmap挂载到Pod中)

键名: 文件名
键值: 文件内容

复制代码
$ vim pod-cm-2.yaml
  apiVersion: v1
  kind: Pod
  metadata:
    name: pod-cm-2
    namespace: default
  spec:
    containers:
    - name: pod-cm-2
      image: ikubernetes/myapp:v1
      imagePullPolicy: IfNotPresent
      ports:
      - name: http
        containerPort: 80
      volumeMounts:
      - name: nginxconf
        mountPath: /etc/nginx/conf.d/
        readonly: true
    volumes:
    - name: nginxconf
      configMap:
        name: nginx-www
$ kubectl apply -f pod-cm-2.yaml
$ kubectl exec pod-cm-2 -- ls /etc/nginx/conf.d/
www.conf
$ kubectl exec -it pod-cm-2 -- /bin/sh
# / mkdir -p /data/web/html/
# / echo "hello cm nginx" > /data/web/html/index.html
# / exit
$ kubectl get pods -o wide
NAME   READY STATUS RESTARTS AGE   IP   NODE NOMINATED NODE READINESS GATES
pod-cm-2 1/1 Running 0      25m 10.244.2.144 node2 <none> <none>
# vim /etc/hosts
10.244.2.144 myapp.kfree.com
# curl myapp.kfree.com
hello cm nginx
复制代码

动态修改cm信息验证Pod可动态根据cm中的内容变化

$ kubectl edit cm nginx-www
....
nginx_port: 8080
....
$ kubectl exec pod-cm-2 -- nginx -s reload
$ curl myapp.kfree.com:8080
hello cm nginx

secret:

复制代码
$ kubectl create secret --help
Usage:
  kubectl create secret [flags] [options]

Available Commands:   docker
-registry Create a secret for use with a Docker registry(docker仓库的认证信息)   generic Create a secret from a local file, directory or literal value(通用的,保存一些密码数据等.)   tls Create a TLS secret(私钥和对应证书) $ kubectl create secret generic mysql-root-password --from-literal=password=Mypass123 $ kubectl get secret NAME           TYPE                   DATA   AGE default-token-ppzsj kubernetes.io/service-account-token  3   21d mysql-root-password Opaque                    1   4s $ kubectl describe secret mysql-root-password Name: mysql-root-password Namespace: default Labels: <none> Annotations: <none> Type: Opaque Data ====(被加密了) password: 9 bytes # 将secret的配置注入到Pod中 $ vim pod-secret-1.yaml   apiVersion: v1   kind: Pod   metadata:    name: pod-secret-1    namespace: default   spec:    containers:    - name: pod-secret-1    image: ikubernetes/myapp:v1     imagePullPolicy: IfNotPresent    ports:    - name: http    containerPort: 80    env:    - name: MYSQL_ROOT_PASSWORD    valueFrom:    secretKeyRef:    name: mysql-root-password    key: password $ kubectl exec pod-secret-1 -- env .... MYSQL_ROOT_PASSWORD=Mypass1234 ....
复制代码

 

本文作者:k-free

本文链接:https://www.cnblogs.com/k-free-bolg/p/13161487.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   k-free  阅读(253)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 新時代 (ウタ from ONE PIECE FILM RED) Ado
新時代 (ウタ from ONE PIECE FILM RED) - Ado
00:00 / 00:00
An audio error has occurred.

作词 : 中田ヤスタカ

作曲 : 中田ヤスタカ

新時代はこの未来だ

世界中全部 変えてしまえば

変えてしまえば

ジャマモノ やなもの なんて消して

ジャマモノ やなもの なんて消して

この世とメタモルフォーゼしようぜ

ミュージック

キミが起こす マジック

目を閉じれば未来が開いて

目を閉じれば未来が開いて

いつまでも終わりが来ないようにって

この歌を歌うよ

Do you wanna play? リアルゲーム ギリギリ

Do you wanna play? リアルゲーム ギリギリ

綱渡りみたいな旋律

認めない戻れない忘れたい

夢の中に居させて I wanna be free

見えるよ新時代が 世界の向こうへ

さあ行くよ NewWorld

新時代はこの未来だ

新時代はこの未来だ

世界中全部 変えてしまえば

変えてしまえば

果てしない音楽がもっと届くように

夢は見ないわ キミが話した

「ボクを信じて」

あれこれいらないものは消して

あれこれいらないものは消して

リアルをカラフルに越えようぜ

ミュージック

今始まる ライジング

目をつぶりみんなで逃げようよ

目をつぶりみんなで逃げようよ

今よりイイモノを見せてあげるよ

この歌を歌えば

Do you wanna play? リアルゲーム ギリギリ

Do you wanna play? リアルゲーム ギリギリ

綱渡りみたいな運命

認めない戻れない忘れたい

夢の中に居させて I wanna be free

見えるよ新時代が 世界の向こうへ

さあ行くよ NewWorld

新時代わ この未来を

新時代わ この未来を

世界中全部 変えてしまえば 変えてしまえば

果てしない音楽がもっと届くように

夢を見せるよ 夢を見せるよ

新時代だ

新時代だ

新時代だ