kubernetes存储(6)

一、Configmap配置管理

  • Configmap用于保存配置数据,以键值对形式存储

  • configMap资源提供了向pod注入配置数据的方法

  • 旨在让镜像和配置文件解耦,以便实现镜像的可移植性和可复用性

  • 典型的使用场景:
    填充环境变量的值
    设置容器内的命令行参数
    填充卷的配置文件

  • 创建ConfigMap的方式有4种:
    -使用字面值创建
    使用文件创建
    使用目录创建
    编写configmap的yaml文件创建

1创建cm的四种方式

1.1使用字面值创建

[root@node1 configmap]# kubectl create configmap mycm1 --from-literal=key1=111 --from-literal=key2=222
[root@node1 configmap]# kubectl get cm 
NAME    DATA   AGE
mycm1   2      8s
[root@node1 configmap]# kubectl describe cm mycm1 

在这里插入图片描述
1.2使用文件创建

[root@node1 configmap]# kubectl create configmap mycm2 --from-file=/etc/resolv.conf
configmap/mycm2 created
[root@node1 configmap]# kubectl get cm
NAME    DATA   AGE
mycm1   2      3m35s
mycm2   1      5s

文件名是key值,内容是vaule
在这里插入图片描述
1.3使用目录创建

[root@node1 configmap]# ls
network  resolv.conf
[root@node1 configmap]# kubectl create configmap mycm3 --from-file=/root/manifest/configmap/
configmap/mycm3 created
[root@node1 configmap]# kubectl get cm
NAME    DATA   AGE
mycm1   2      14m
mycm2   1      10m
mycm3   2      5s

在这里插入图片描述
1.4使用yml文件创建

[root@node1 cm]# cat cm1.yml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: mycm4
data:
  db_host: "172.25.0.250"
  db_port: "3306"
  
[root@node1 cm]# kubectl apply -f cm1.yml 
configmap/mycm4 created

[root@node1 cm]# kubectl get cm
NAME    DATA   AGE
mycm1   2      11h
mycm2   1      11h
mycm3   2      11h
mycm4   2      4s

在这里插入图片描述

2 如何使用configmap

  • 通过环境变量的方式直接传递给pod
  • 通过在pod的命令行下运行的方式
  • 作为volume的方式挂载到pod内
    2.1通过环境变量的方式直接给pod
    自主命名key值
[root@node1 cm]# cat pod1.yml 
apiVersion: v1
kind: Pod
metadata:
  name: pod1
spec:
  containers:
    - name: pod1
      image: busyboxplus
      command: ["/bin/sh", "-c", "env"]
      env:
        - name: key-one   ##在这里起个key值的名字
          valueFrom:      #环境变量值从哪里来
            configMapKeyRef:   #从configmap来
              name: mycm4      #从configmap的mycm4文件里来
              key: db_host     #将configmap的mycm4文件里key为db_host的值赋给key-one
        - name: key-two
          valueFrom:
            configMapKeyRef:
              name: mycm4
              key: db_port
  restartPolicy: Never
  
[root@node1 cm]# kubectl apply -f pod1.yml 
pod/pod1 created
[root@node1 cm]# kubectl get pod
NAME   READY   STATUS      RESTARTS   AGE
pod1   0/1     Completed   0          4s
[root@node1 cm]# kubectl logs pod1 

在这里插入图片描述
使用原来的key值:

[root@node1 cm]# cat pod2.yml 
apiVersion: v1
kind: Pod
metadata:
  name: pod2
spec:
  containers:
   - name: pod2
     image: busyboxplus
     command: ["/bin/sh", "-c", "env"]
     envFrom:
       - configMapRef:
           name: mycm4
  restartPolicy: Never
[root@node1 cm]# kubectl apply -f pod2.yml 
pod/pod2 created
[root@node1 cm]# kubectl get pod
NAME   READY   STATUS      RESTARTS   AGE
pod1   0/1     Completed   0          2m24s
pod2   0/1     Completed   0          4s
[root@node1 cm]# kubectl logd pod2

在这里插入图片描述
2.2通过在pod的命令行下运行的方式

[root@node1 cm]# cat pod3.yml 
apiVersion: v1
kind: Pod
metadata:
  name: poddd3
spec:
  containers:
  - name: p3
    image: busyboxplus
    command: ["/bin/sh", "-c", "echo $(db_host) $(db_port)"]
    envFrom:
      - configMapRef:
          name: mycm4
  restartPolicy: Never
[root@node1 cm]# kubectl apply -f pod3.yml 
pod/poddd3 created
[root@node1 cm]# kubectl get pod
NAME     READY   STATUS      RESTARTS   AGE
pod1     0/1     Completed   0          9m38s
pod2     0/1     Completed   0          7m18s
poddd3   0/1     Completed   0          8s
[root@node1 cm]# kubectl logs poddd3 
172.25.0.250 3306

2.3作为volume的方式挂在到pod内

[root@node1 cm]# cat pod1.yml 
apiVersion: v1
kind: Pod
metadata:
  name: pod1
spec:
  containers:   #设定容器
    - name: pod1
      image: myapp:v1
      volumeMounts:  #容器的挂载路径
        - name: config-volume
          mountPath: /config
  volumes:   #设定容器的卷
    - name: config-volume
      configMap:
        name: mycm4
[root@node1 cm]# kubectl apply -f pod1.yml 
pod/pod1 created
[root@node1 cm]# kubectl get pod
NAME   READY   STATUS    RESTARTS   AGE
pod1   1/1     Running   0          4s

[root@node1 cm]# kubectl exec -it pod1 -- sh  #进去看一下
/ # ls
bin     dev     home    media   proc    run     srv     tmp     var
config  etc     lib     mnt     root    sbin    sys     usr
/ # cd config/
/config # ls
db_host  db_port
/config # cat *
172.25.0.2503306

2.4 configmap热更新
key–>文件名
vaule–>文件的内容
在这里插入图片描述
创建一个文件server.conf–key值–>挂载目录下的文件名

[root@node1 cm]# cat server.conf 
server {
   
  listen 8000;
  server_name _;
  location / {
   
    root /usr/share/nginx/html;
    index index.html index.htm;
}
}
[root@node1 cm]# kubectl create configmap server --from-file=server.conf  #将server文件加到cm里
configmap/server created

[root@node1 cm]# kubectl get cm #查看一下已经加到
NAME     DATA   AGE
mycm1    2      14h
mycm2    1      14h
mycm3    2      14h
mycm4    2      142m
server   1      17s


[root@node1 cm]# cat pod1.yml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        volumeMounts:
        - name: config-volume
          mountPath: /etc/nginx/conf.d/    挂到此目录下
      volumes:
      - name: config-volume
        configMap:
          name: server  #源是:cm里的server


[root@node1 cm]# kubectl get pod -o wide
NAME                        READY   STATUS    RESTARTS   AGE     IP             NODE    NOMINATED NODE   READINESS GATES
my-nginx-6bb8847948-cm5bx   1/1     Running   0          4m41s   10.244.1.110   node2   <none>           <none>

可以正常访问:
在这里插入图片描述
现在对cm 里的server文件修改:将端口号由8000---->9000
[root@node1 cm]# kubectl edit cm server
configmap/server edited
在这里插入图片描述
进入pod中查看:
在这里插入图片描述
修改cm 里 的值,隔几秒挂载点才会同步变化,configmap已生效,但是不能pod并没有重新加载,因此就算改了,也没有生效。

如何生效?
1.容器删除,重新生成,就重新读取配置文件
2.patch指令重新加载,手动触发,IP会变
在这里插入图片描述

[root@node1 cm]# kubectl patch deployments.apps my-nginx --patch '{"spec": {"template":
> {
   "metadata": {
   "annotations": {
   "version/config": "20200628"}}}}}'  #对整个deployment都更新

此时IP已变:端口号也已经更新
在这里插入图片描述

二、Secret配置管理

(1)Secret对象类型用来保存敏感信息,例如密码,OAuth令牌和ssh key。
敏感信息放在 secret 中比放在 Pod 的定义或者容器镜像中来说更加安全和灵活。
Pod 可以用两种方式使用 secret:
• 作为 volume 中的文件被挂载到 pod 中的一个或者多个容器里。
•当 kubelet 为 pod 拉取镜像时使用。

(2)Secret的类型:
• Service Account:Kubernetes 自动创建包含访问 API 凭据的 secret,并自动修改
pod 以使用此类型的 secret。
• Opaque:使用base64编码存储信息,可以通过base64 --decode解码获得原始数据,
因此安全性弱。
• kubernetes.io/dockerconfigjson:用于存储docker registry的认证信息。

serviceaccout 创建时 Kubernetes 会默认创建对应的 secret。对应的 secret 会自动挂载到
Pod 的 /run/secrets/kubernetes.io/serviceaccount 目录中。
在这里插入图片描述
在这里插入图片描述
每个namesapce下都有一个名为default的默认的ServiceAccout对象
在这里插入图片描述在这里插入图片描述
• Opaque Secret 其value为base64编码后的值。

[root@node1 cm]# echo -n 'admin' > ./username.txt
[root@node1 cm]# echo -n 'westos' > ./password.txt
[root@node1 cm]# kubectl get secrets 
NAME                  TYPE                                  DATA   AGE
default-token-ccttm   kubernetes.io/service-account-token   3      5d19h
[root@node1 cm]# kubectl create secret generic db-user-pass --from-file=./username.txt --from-file=./password.txt 
secret/db-user-pass created
[root@node1 cm]# kubectl get secrets 
NAME                  TYPE                                  DATA   AGE
db-user-pass          Opaque                                2      3s
default-token-ccttm   kubernetes.io/service-account-token   3      5d19h

默认情况下get secret和describe 无法得到密码的内容,可以通过base64 -d得到。
在这里插入图片描述
在这里插入图片描述
编写yml文件创建secret

[root@node1 cm]# cat mysecret.yml 
apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  username: YWRtaW4=
  password: d2VzdG9z

[root@node1 cm]# kubectl apply -f mysecret.yml 
secret/mysecret created
[root@node1 cm]# kubectl get secrets 
NAME                  TYPE                                  DATA   AGE
default-token-ccttm   kubernetes.io/service-account-token   3      5d19h
mysecret              Opaque           

将secret挂载到卷中

[root@node1 cm]# cat pod1.yml 
apiVersion: v1
kind: Pod
metadata:
  name: mysecret
spec:
  containers:
  - name: nginx
    image: nginx
    volumeMounts:
    - name: secrets
      mountPath: "/secret"
      readOnly: true
  volumes:
    - name: secrets
      secret:
        secretName: mysecret
[root@node1 cm]# kubectl exec mysecret -- ls /secret
password
username

向指定路径映射secret密钥

secret文件创建secret
[root@node1 cm
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值