江小南

V1

2022/07/04阅读:19主题:默认主题

kubernetes资源对象介绍及常用命令(五)-(ConfigMap&Secret)

一、ConfitMap

配置集,抽取应用配置。

ConfigMap保存在kubernetes的etcd中。

ConfigMap可以将文件直接挂载到Pod内,区别于上篇文章中的PV&PVC挂载目录

创建ConfigMap

  • 命令行方式
[root@k8s-master ~]# vi redis.conf
[root@k8s-master ~]# cat redis.conf 
appendonly yes
[root@k8s-master ~]# kubectl create cm redis-conf --from-file=redis.conf
configmap/redis.conf created
[root@k8s-master ~]#

首先有redis.conf文件,然后将文件做成ConfigMap。

  • yaml方式,redis-conf.yml
apiVersion: v1
data:
  redis.conf: |
    appendonly yes
kind: ConfigMap
metadata:
  name: redis-conf
  namespace: default

data是所有真正的数据,key:默认是文件名,value:配置文件的内容

[root@k8s-master ~]# kubectl apply -f redis-conf.yml 
configmap/redis-conf created
[root@k8s-master ~]#

查看ConfigMap

[root@k8s-master ~]# kubectl get cm
NAME               DATA   AGE
kube-root-ca.crt   1      2d1h
redis-conf         1      53s
[root@k8s-master ~]# 

扩展: 查看redis-conf的yaml文件

kubectl get cm redis-conf -oyaml

创建pod

redis.yml

apiVersion: v1
kind: Pod
metadata:
  name: redis
spec:
  containers:
  - name: redis
    image: redis
    command:
      - redis-server
      - "/redis-master/redis.conf"  #指的是redis容器内部的位置
    ports:
    - containerPort: 6379
    volumeMounts:
    - mountPath: /data
      name: data
    - mountPath: /redis-master
      name: config
  volumes:
    - name: data
      emptyDir: {}
    - name: config
      configMap:
        name: redis-conf
        items:
        - key: redis.conf
          path: redis.conf

说明:一个ConfigMap文件可能有多个配置,items会遍历每个配置,key中定义这里要取哪个配置,path表示将取出来的配置文件内容放到容器内的哪个文件中。

关系图参考如下:

[root@k8s-master ~]# kubectl apply -f redis.yml 
pod/redis created 
[root@k8s-master ~]#
# 进入到容器内部验证
[root@k8s-master ~]# kubectl exec -it redis -c redis -- /bin/bash
root@redis:/data# cd /redis-master/
root@redis:/redis-master# ls
redis.conf
root@redis:/redis-master# cat redis.conf 
appendonly yes
root@redis:/redis-master#

修改ConfigMap

[root@k8s-master ~]# kubectl edit cm redis-conf
configmap/redis-conf edited
[root@k8s-master ~]#

添加了一行配置requirepass 123456

[root@k8s-master ~]# kubectl exec -it redis -c redis -- /bin/bash
root@redis:/data# cd /redis-master/
root@redis:/redis-master# ls
redis.conf
root@redis:/redis-master# cat redis.conf 
appendonly yes
requirepass 123456
root@redis:/redis-master# 

ConfigMap被自动更新了。

重点说明:这里的自动更新只是容器内部的文件跟随ConfigMap的改变而改变,但是并不一定真正生效,主要看应用有没有热部署能力,没有热部署能力的应用需要重启才能生效。

删除ConfigMap

kubectl delete cm redis-conf

二、Secret

Secret保存在kubernetes的etcd中。

Secret对象类型用来保存敏感信息,例如密码、OAuth令牌和SSH密钥。将这些信息放在secret中比放在Pod的定义或者容器镜像中来说更加安全和灵活。

创建Secret

# 命令格式
kubectl create secret docker-registry jiangnan \
  --docker-server=<你的镜像仓库服务器> \
  --docker-username=<你的用户名> \
  --docker-password=<你的密码> \
  --docker-email=<你的邮箱地址>

查看Secret

[root@k8s-master ~]# kubectl get secret
NAME                  TYPE                                  DATA   AGE
default-token-ssmvn   kubernetes.io/service-account-token   3      2d2h
jiangnan              kubernetes.io/dockerconfigjson        1      2m6s
[root@k8s-master ~]# 

删除Secret

[root@k8s-master ~]# kubectl delete secret jiangnan
secret "jiangnan" deleted
[root@k8s-master ~]#

分类:

后端

标签:

云计算

作者介绍

江小南
V1