您现在的位置是:首页 >技术教程 >K8S存储类型之configMap网站首页技术教程
K8S存储类型之configMap
简介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
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。