$ kubectl create configmap my-config --from-literal=key1=value1 --from-literal=key2=value2
configmap/my-config created
$ kubectl get configmaps my-config -o yaml
apiVersion: v1
data:
key1: value1
key2: value2
kind: ConfigMap
metadata:
creationTimestamp: 2022-04-02T07:21:55Z
name: my-config
namespace: default
resourceVersion: "241345"
selfLink: /api/v1/namespaces/default/configmaps/my-config
uid: d35f0a3d-45d1-11e7-9e62-080027a46057
-o yaml
option, we are requesting the kubectl
command to produce the output in the YAML
format. As we can see, the object has the ConfigMap kind, and it has the key-value pairs inside the data field. The name of ConfigMap and other details are part of the metadata field.apiVersion: v1
kind: ConfigMap
metadata:
name: customer1
data:
TEXT1: Customer1_Company
TEXT2: Welcomes You
COMPANY: Customer1 Company Technology Pct. Ltd.
$ kubectl create -f customer1-configmap.yaml
configmap/customer1 created
permission=read-only
allowed="true"
resetCount=3
$ kubectl create configmap permission-config --from-file=<path/to/>permission-reset.properties
configmap/permission-config created
myapp-full-container
Container’s environment variables receive the values of the full-config-map
ConfigMap keys: containers:
- name: myapp-full-container
image: myapp
envFrom:
- configMapRef:
name: full-config-map
myapp-specific-container
Container’s environment variables receive their values from specific key-value pairs from two separate ConfigMaps, config-map-1
and config-map-2
: containers:
- name: myapp-specific-container
image: myapp
env:
- name: SPECIFIC_ENV_VAR1
valueFrom:
configMapKeyRef:
name: config-map-1
key: SPECIFIC_DATA
- name: SPECIFIC_ENV_VAR2
valueFrom:
configMapKeyRef:
name: config-map-2
key: SPECIFIC_INFO
SPECIFIC_ENV_VAR1
environment variable set to the value of SPECIFIC_DATA
key from config-map-1
ConfigMap, and SPECIFIC_ENV_VAR2
environment variable set to the value of SPECIFIC_INFO
key from config-map-2
ConfigMap.vol-config-map
ConfigMap as a Volume inside a Pod. containers:
- name: myapp-vol-container
image: myapp
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: vol-config-map
$ vim index.html
<!DOCTYPE html>
<html>
<head>
<title>Welcome to GREEN App!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
background-color: GREEN;
}
</style>
</head>
<body>
<h1 style=\"text-align: center;\">Welcome to GREEN App!</h1>
</body>
</html>
The Deployment definition file:
$ vim web-green-with-cm.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: green-web
name: green-web
spec:
replicas: 1
selector:
matchLabels:
app: green-web
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: green-web
spec:
volumes:
- name: web-config
configMap:
name: green-web-cm
containers:
- image: nginx
name: nginx
ports:
- containerPort: 80
volumeMounts:
- mountPath: /usr/share/nginx/html
name: web-config
status: {}
$ kubectl create secret generic my-password --from-literal=password=mysqlpassword
$ kubectl get secret my-password
NAME TYPE DATA AGE
my-password Opaque 1 8m
$ kubectl describe secret my-password
Name: my-password
Namespace: default
Labels: <none>
Annotations: <none>
Type Opaque
Data
====
password: 13 bytes
mypass.yaml
. There are two types of maps for sensitive information inside a Secret: data
and stringData
.base64
encoding of our password:$ echo mysqlpassword | base64
bXlzcWxwYXNzd29yZAo=
apiVersion: v1
kind: Secret
metadata:
name: my-password
type: Opaque
data:
password: bXlzcWxwYXNzd29yZAo=
base64
encoding does not mean encryption, and anyone can easily decode our encoded data:$ echo "bXlzcWxwYXNzd29yZAo=" | base64 --decode
mysqlpassword
stringData
maps, there is no need to encode the value of each sensitive information field. The value of the sensitive field will be encoded when the my-password Secret is created:apiVersion: v1
kind: Secret
metadata:
name: my-password
type: Opaque
stringData:
password: mysqlpassword
mypass.yaml
definition file we can now create a secret with kubectl create command:$ kubectl create -f mypass.yaml
secret/my-password created
$ echo mysqlpassword | base64
bXlzcWxwYXNzd29yZAo=
$ echo -n 'bXlzcWxwYXNzd29yZAo=' > password.txt
password.txt
file:$ kubectl create secret generic my-file-password --from-file=password.txt
secret/my-file-password created
$ kubectl get secret my-file-password
NAME TYPE DATA AGE
my-file-password Opaque 1 8m
$ kubectl describe secret my-file-password
Name: my-file-password
Namespace: default
Labels: <none>
Annotations: <none>
Type Opaque
Data
====
password.txt: 13 bytes
password
key of the my-password
Secret and assign its value to the WORDPRESS_DB_PASSWORD
environment variable:spec:
containers:
- image: wordpress:4.7.3-apache
name: wordpress
env:
- name: WORDPRESS_DB_PASSWORD
valueFrom:
secretKeyRef:
name: my-password
key: password
my-password
Secret key (where the files are named after the names of the keys), the files containing the values of the respective Secret keys:spec:
containers:
- image: wordpress:4.7.3-apache
name: wordpress
volumeMounts:
- name: secret-volume
mountPath: "/etc/secret-data"
readOnly: true
volumes:
- name: secret-volume
secret:
secretName: my-password
By the end of this chapter, you should be able to: