您现在的位置是:首页 >其他 >K8S存储类型之configMap网站首页其他

K8S存储类型之configMap

小鱼儿& 2024-05-07 00:00:03
简介K8S存储类型之configMap

1. configMap描述信息

  • ConfigMap功能在Kubernetes1.2版本中引入,许多应用程序会从配置文件、命令行参数或环境变量中读取配置信息。ConfigMap API给我们提供了向容器中注入配置信息的机制,ConfigMap可以被用来保存单个属性,也可以用来保存整个配置文件或者JSON二进制大对象

2. ConfigMap的创建

2.1. 使用目录创建

[root@master1 ~]# ls /usr/local/k8s/yaml/configmap/
gamp.properties  ui.properties

[root@master1 ~]# cat /usr/local/k8s/yaml/configmap/gamp.properties
enemies=aliens
lives=3
enemies.cheat=true
enemies.cheat=noGoodRotten

[root@master1 ~]# cat /usr/local/k8s/yaml/configmap/ui.properties
color.good=purple
coclor.bad=yellow
allow.textmode=true

[root@master1 ~]# kubectl create configmap game-config  --from-file=/usr/local/k8s/yaml/configmap/
configmap/game-config created
  • --from-file指定在目录下的所有文件都会被用在configmap里面创建一个键值对,键的名字就是文件名,值是文件内容。
  • game-config是创建configmap的名称,可以自定义

2.1.1. 查看创建是否成功:

[root@master1 ~]# kubectl get cm
NAME               DATA   AGE
game-config        2      4m55s
kube-root-ca.crt   1      2d
[root@master1 ~]# kubectl describe cm game-config
Name:         game-config
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
ui.properties:
----
color.good=purple
coclor.bad=yellow
allow.textmode=true

gamp.properties:
----
enemies=aliens
lives=3
enemies.cheat=true
enemies.cheat=noGoodRotten

Events:  <none>

2.2. 使用文件创建:

  • 只要指定一个文件就可以从单个文件中创建configmap
[root@master1 ~]# cat /usr/local/k8s/yaml/configmap/ui.properties
color.good=purple
coclor.bad=yellow
allow.textmode=true

[root@master1 ~]# kubectl create configmap ui-configmap --from-file=/usr/local/k8s/yaml/configmap/ui.properties
configmap/ui-configmap created

2.2.1. 查看创建是否成功

[root@master1 ~]# kubectl get cm
NAME               DATA   AGE
game-config        2      12m
kube-root-ca.crt   1      2d
ui-configmap       1      9s
[root@master1 ~]# kubectl get cm ui-configmap -o yaml
apiVersion: v1
data:
  ui.properties: |
    color.good=purple
    coclor.bad=yellow
    allow.textmode=true
kind: ConfigMap
metadata:
  creationTimestamp: "2023-06-19T07:41:04Z"
  managedFields:
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:data:
        .: {}
        f:ui.properties: {}
    manager: kubectl-create
    operation: Update
    time: "2023-06-19T07:41:04Z"
  name: ui-configmap
  namespace: default
  resourceVersion: "89376"
  uid: d4ebc140-c6d8-4b14-98fb-9062dfb4f0e4

2.3. 使用字面值创建:

  • 使用文字值创建,利用--from-literal参数传递配置信息,该参数可以使用多次,格式如下:
[root@master1 ~]# kubectl create configmap special-config  --from-literal=special.how=very  --from-literal=special.type=charm
configmap/special-config created

2.3.1. 查看是否创建成功:

[root@master1 ~]# kubectl get cm
NAME               DATA   AGE
game-config        2      19m
kube-root-ca.crt   1      2d
special-config     2      5s
ui-configmap       1      7m18s
[root@master1 ~]# kubectl get cm special-config -o yaml
apiVersion: v1
data:
  special.how: very
  special.type: charm
kind: ConfigMap
metadata:
  creationTimestamp: "2023-06-19T07:48:17Z"
  managedFields:
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:data:
        .: {}
        f:special.how: {}
        f:special.type: {}
    manager: kubectl-create
    operation: Update
    time: "2023-06-19T07:48:17Z"
  name: special-config
  namespace: default
  resourceVersion: "90117"
  uid: a1016677-5f24-41c3-b681-b6ad0209085e

2.4. 使用yaml文件方式创建

apiVersion: v1  #指定Kubernetes API的版本,对于ConfigMap,它通常是v1 
kind: ConfigMap #指定要创建的资源类型,对于ConfigMap,它是ConfigMap
metadata:    #指定ConfigMap的元数据,包括名称、标签、注释等信息
  name: name-configmap  #指定ConfigMap的名称,你可以根据自己的需求命名
data:  #指定ConfigMap的数据,包含键值对
  name1: andy  #这些是ConfigMap中的键,你可以根据自己的需求命名
  name2: bob
  name3: lucy

[root@master1 configmap]# kubectl apply -f name-config-map.yaml

2.4.1. 查看是否创建成功

[root@master1 configmap]# kubectl get cm
NAME               DATA   AGE
game-config        2      132m
kube-root-ca.crt   1      2d2h
name-configmap     3      15s
nginx-config       1      95m
special-config     2      112m
ui-configmap       1      119m
[root@master1 configmap]# kubectl describe cm name-configmap
Name:         name-configmap
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
name1:
----
andy
name2:
----
bob
name3:
----
lucy
Events:  <none>
[root@master1 configmap]# cat name-config-map.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: name-configmap
data:
  name1: andy
  name2: bob
  name3: lucy

3. 创建nginx并把nginx的配置文件存放在configmap

3.1. 创建configmap

[root@master1 ~]# cat /usr/local/k8s/yaml/nginx/confg/nginx.conf
user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

}
}

//创建configmap
[root@master1 ~]# kubectl create configmap nginx-config  --from-file=/usr/local/k8s/yaml/nginx/confg/nginx.conf

//查看是否创建成功:
[root@master1 ~]# kubectl get cm
NAME               DATA   AGE
game-config        2      38m
kube-root-ca.crt   1      2d
nginx-config       1      69s
special-config     2      18m
ui-configmap       1      25m

3.2. 用deployment创建nginx并指定nginx-config

vim  nginx.yaml

apiVersion: apps/v1   #指定使用的 Kubernetes API 版本
kind: Deployment      #指定创建的资源类型为 Deployment。
metadata:    #定义 Deployment 的元数据,包括名称和其他属性。
  name: nginx-deployment  #定义deploymentde名称
spec:     #定义 Deployment 的规格
  replicas: 3  #指定要创建的副本数量
  selector:    #定义用于选择要管理的 Pod 的标签
    matchLabels: #定义用于匹配 Pod 标签的标签键值对
      app: nginx
  template:   #定义要创建的 Pod 的模板
     metadata: #定义 Pod 的元数据,包括标签
       labels: #定义pod的标签的标签键值对
         app: nginx
     spec:    #定义 Pod 的规格
       volumes: #定义pod中的卷
         - name: nginx-config-volume  #定义卷的名称为nginx-config-volume
           configMap: #将卷与ConfigMap关联
             name: nginx-config  #指定关联的ConfigMap名称为nginx-config
       containers:  #定义 Pod 中的容器信息
       - name: nginx  #定义容器名称
         image: nginx:latest  #定义容器镜像
         imagePullPolicy: IfNotPresent #指定容器拉取镜像的策略为仅当本地不存在时才拉取
         ports:  #定义容器需要监听的端口
         - name: http  #指定端口的名称
           containerPort: 80 #指定容器监听的端口号
         volumeMounts:  #定义容器与卷的挂载关系
           - name: nginx-config-volume #指定挂载的卷名称为nginx-config-volume
             mountPath: /etc/nginx/nginx.conf #指定挂载的路径为/etc/nginx/nginx.conf
             subPath: nginx.conf #指定挂载的子路径为nginx.conf

---

apiVersion: v1  #指定使用的API版本为v1
kind: Service   #指定创建的资源类型为Service
metadata:   #指定Service的元数据信息,包括名称(name)和命名空间(namespace)
  name: nginx-service #定义Service的名称为nginx-service
  namespace: default #指定Service所属的命名空间为default
spec: #定义Service的规格
  type: ClusterIP  #指定Service的类型为ClusterIP,即创建一个集群内部可访问的IP
  selector: #据标签选择器(app: nginx)选择要关联的Pod
    app: nginx  #择具有标签app: nginx的Pod
  ports:   #定义Service的端口配置
    - name: http  #定义端口的名称为http
      protocol: TCP # 指定端口的协议为TCP
      port: 80   #指定暴露给集群内部的端口号为80
      targetPort: 80  #指定转发到Pod的端口号为80


[root@master1 yaml]# kubectl apply -f nginx.yaml

[root@master1 yaml]# kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-75dfc89886-8sbxf   1/1     Running   0          7m42s
nginx-deployment-75dfc89886-r4bvn   1/1     Running   0          7m42s
nginx-deployment-75dfc89886-t2664   1/1     Running   0          7m42s

[root@master1 yaml]# kubectl get svc
NAME            TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
kubernetes      ClusterIP   10.10.0.1      <none>        443/TCP   2d2h
nginx-service   ClusterIP   10.10.37.239   <none>        80/TCP    8m7s

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。