首页 > 编程知识 正文

K8s对象 configmap,k8s领域对象

时间:2023-05-05 17:11:34 阅读:231380 作者:3891

文章目录 1. 从文件创建1.1 --from-file1.1.1 语法1.1.2 示例1.1.3 查看 1.2 --from-literal1.2.1 语法1.2.2 示例 2. 从yaml文件创建3. 使用3.1 key 是目标文件名3.1.1 使用方法3.1.2 一个完整的示例 3.2 key名不是目标文件名

1. 从文件创建 1.1 --from-file 1.1.1 语法 kubectl create configmap Configmap_Name --from-file=File_Name -n Namespace_Name

说明:
这种方法创建的configmap,默认以File_Name作为key。
而configmap挂载到容器中之后将以这个key作为容器中文件的名字。
因此创建configmap的源文件必须与容器内要挂载的文件名一致。
如果要修改key名,看1.2节

1.1.2 示例

需求:从.env 文件创建一个名为 web-env的congfigmap,之后需要挂载到pod中/etc/.env

创建.env文件 IOT_WEB_API_HOST=10.252.xxx.xxx IOT_WEB_API_PORT=30103 IOT_WEB_PROJECT_NAME=xxxxxxx 从该文件创建configmap kubectl create configmap web-env --from-file=.env -n xinfa 1.1.3 查看

说明: configmap中 data下 .env为key。之后文件内容为该key的值

# kubectl edit -n xinfa configmaps web-env apiVersion: v1data: .env: | IOT_WEB_API_HOST=10.252.xxx.xxx IOT_WEB_API_PORT=30103 IOT_WEB_PROJECT_NAME=xxxxxxxkind: ConfigMapmetadata: creationTimestamp: "2019-11-29T05:33:36Z" name: web-env namespace: xinfa resourceVersion: "9432225" selfLink: /api/v1/namespaces/xinfa/configmaps/web-env uid: ca830a23-1269-11ea-82c2-005056a7d888 1.2 --from-literal 1.2.1 语法 kubectl create configmap Configmap_Name --from-file=KEY_Name=File_Name --from-file=KEY_Nname=File_Name -n Namespace_Name 1.2.2 示例

需求:从env 文件创建一个名为 web-env的congfigmap,之后需要挂载到pod中/etc/.env

创建 env文件 IOT_WEB_API_HOST=10.252.xxx.xxxIOT_WEB_API_PORT=30103IOT_WEB_PROJECT_NAME=xxxxxxx 创建configmap [root@DoM01 yml]# kubectl create configmap web-env --from-file=.env=envconfigmap/config-env created 查看 # kubectl edit configmaps web-env

可见configmap内容如下:

# Please edit the object below. Lines beginning with a '#' will be ignored,# and an empty file will abort the edit. If an error occurs while saving this file will be# reopened with the relevant failures.#apiVersion: v1data: .env: | IOT_WEB_API_HOST=10.252.xxx.xxx IOT_WEB_API_PORT=30103 IOT_WEB_PROJECT_NAME=xxxxxxxkind: ConfigMapmetadata: creationTimestamp: "2021-02-03T09:47:36Z" name: web-env namespace: default resourceVersion: "15083053" selfLink: /api/v1/namespaces/default/configmaps/web-env uid: 45cde575-d55b-4242-8b6d-ef0303196c2b

上文可见,key变成了.env 而并不是1.1中使用原文件名作为key了。

2. 从yaml文件创建 yml文件
文件叫什么名字无所谓,就叫configmap.yml吧,内容如下: apiVersion: v1kind: ConfigMapmetadata: name: mysqlcnf namespace: mysql-testdata: my.cnf: | # 这里是mysql的配置文件 # 虽然zydty这个懒家伙什么也没有留下,但是不影响mysql启动 !includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mysql.conf.d/ 创建 kubectl create -f configmap.yml 3. 使用 3.1 key 是目标文件名 3.1.1 使用方法

key名是挂载到容器中的文件名,如果不是使用3.2中的方法。

spec: containers: - name: xinfa01-web image: 10.252.xxx.xxx/xinfa/xxxx imagePullPolicy: IfNotPresent env: - name: TZ value: "Asia/Shanghai" ports: - containerPort: 3080 protocol: TCP name: http volumeMounts: - mountPath: /build name: web-server # 添加以下三行,指明挂载到容器中哪个位置 - mountPath: /etc/.env #容器中的全路径 name: web-env subPath: .env #容器中的文件名 volumes: - name: web-server persistentVolumeClaim: claimName: pv-xf01-web # 添加以下三行,挂载名为web-env的configmp - name: web-env configMap: name: web-env imagePullSecrets: - name: my-harbor 3.1.2 一个完整的示例 ---apiVersion: extensions/v1beta1kind: Deploymentmetadata: name: mysql namespace: mysql-testspec: replicas: 1 template: metadata: labels: app: mysql spec: containers: - name: mysql image: harbocto.xxx.com.cn/public/mysql:5.7 imagePullPolicy: IfNotPresent env: - name: MYSQL_ROOT_PASSWORD value: yunweizhidao - name: MYSQL_REPLICATION_USER value: "liuwei" - name: MYSQLREPLICAITONPASSWO value: "1qaz@WSX" ports: - containerPort: 3306 volumeMounts: - name: mysql-data mountPath: /var/lib/mysql - mountPath: /etc/mysql/my.cnf name: mysqlcnf subPath: my.cnf volumes: - name: mysql-data persistentVolumeClaim: claimName: mysql - name: mysqlcnf configMap: name: mysqlcnf---apiVersion: v1kind: ConfigMapmetadata: name: mysqlcnf namespace: mysql-testdata: my.cnf: | # 这里是mysql的配置文件 # 虽然鸿渐这个懒家伙什么也没有留下,但是不影响mysql启动 !includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mysql.conf.d/---apiVersion: v1kind: Servicemetadata: name: mysql namespace: mysql-testspec: type: NodePort ports: - port: 3306 targetPort: 3306 nodePort: 30200 selector: app: mysql selector: app: mysql---kind: PersistentVolumeClaimapiVersion: v1metadata: name: mysql namespace: mysql-testspec: accessModes: - ReadWriteOnce resources: requests: storage: 5Gi 3.2 key名不是目标文件名

需求:将名为mysqlcnf 的configmap中,key为mycnf的内容,挂载到容器中为/etc/mysql/my.cnf

ports: - containerPort: 3306 volumeMounts: - name: mysql-data mountPath: /var/lib/mysql - name: mysqlcnf mountPath: /etc/mysql/my.cnf subPath: my.cnf volumes: - name: mysql-data persistentVolumeClaim: claimName: mysql - name: mysqlcnf configMap: name: mysqlcnf # 添加如下内容即可 items: - key: mycnf path: my.cnf

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。