configmap
四种创建方式
1.
[k8s@server11 ~]$ kubectl create configmap my-config --from-literal=key1=config1 --from-literal=key2=config2
configmap/my-config created
[k8s@server11 ~]$ kubectl get cm my-config -o yaml
apiVersion: v1
data:
key1: config1
key2: config2
kind: ConfigMap
metadata:
creationTimestamp: "2020-09-15T01:54:07Z"
managedFields:
- apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:data:
.: {}
f:key1: {}
f:key2: {}
manager: kubectl-create
operation: Update
time: "2020-09-15T01:54:07Z"
name: my-config
namespace: default
resourceVersion: "340089"
selfLink: /api/v1/namespaces/default/configmaps/my-config
uid: 3143c90a-3f40-4b9f-b611-74dcafac2a56
[k8s@server11 ~]$ kubectl describe cm my-config
Name: my-config
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
key1:
----
config1
key2:
----
config2
Events: <none>
[k8s@server11 ~]$ kubectl create configmap my-config-2 --from-file=/etc/resolv.conf
configmap/my-config-2 created
[k8s@server11 ~]$ kubectl get cm my-config-2
NAME DATA AGE
my-config-2 1 17s
[k8s@server11 ~]$ kubectl get cm my-config-2 -o yaml
apiVersion: v1
data:
resolv.conf: |2
nameserver 114.114.114.114
kind: ConfigMap
metadata:
creationTimestamp: "2020-09-15T01:59:39Z"
managedFields:
- apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:data:
.: {}
f:resolv.conf: {}
manager: kubectl-create
operation: Update
time: "2020-09-15T01:59:39Z"
name: my-config-2
namespace: default
resourceVersion: "340927"
selfLink: /api/v1/namespaces/default/configmaps/my-config-2
uid: 8c7434d6-a55d-4771-b342-ac8f4316287a
[k8s@server11 configmap]$ mkdir test
[k8s@server11 configmap]$ cd /etc/passwd test/
-bash: cd: /etc/passwd: Not a directory
[k8s@server11 configmap]$ cp /etc/passwd test/
[k8s@server11 configmap]$ cp /etc/hosts test/
[k8s@server11 configmap]$ ls
test
[k8s@server11 configmap]$ kubectl create configmap my-config-3 --from-file=test
configmap/my-config-3 created
[k8s@server11 configmap]$ kubectl get cm my-config-3 -o yaml
apiVersion: v1
data:
hosts: "127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4\n::1
\ localhost localhost.localdomain localhost6 localhost6.localdomain6\n172.25.16.250
\n172.25.16.10 server10\n172.25.16.11 server11\n172.25.16.12 server12 www1.westos.org\n172.25.16.13
server13 \n172.25.16.14 server14\n172.25.16.100 harbor reg.westos.org\n172.25.16.20
server7 \n"
passwd: |
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
k8s:x:1000:1000::/home/k8s:/bin/bash
kind: ConfigMap
metadata:
creationTimestamp: "2020-09-15T02:03:51Z"
managedFields:
- apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:data:
.: {}
f:hosts: {}
f:passwd: {}
manager: kubectl-create
operation: Update
time: "2020-09-15T02:03:51Z"
name: my-config-3
namespace: default
resourceVersion: "341561"
selfLink: /api/v1/namespaces/default/configmaps/my-config-3
uid: d0493f40-6fca-4b49-9cae-77406478d692
4.文件创建方式:
[k8s@server11 configmap]$ vim cm1.yml
[k8s@server11 configmap]$ kubectl create -f cm1.yml
[k8s@server11 configmap]$ kubectl get cm
NAME DATA AGE
cm1-config 2 22s
my-config 2 14m
my-config-2 1 8m48s
my-config-3 2 4m36s
如何使用configmap:
通过环境变量的方式直接传递给pod
通过在pod的命令行下运行的方式
作为volume的方式挂载到pod内
[k8s@server11 configmap]$ kubectl describe cm cm1-config
Name: cm1-config
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
db_host:
----
172.25.16,1
db_port:
----
3306
Events: <none>
[k8s@server11 configmap]$ vim pod1.yml
[k8s@server11 configmap]$ cat pod1.yml
apiVersion: v1
kind: Pod
metadata:
name: pod1
spec:
containers:
- name: pod1
image: busybox
command: ["/bin/sh", "-c", "env"]
env:
- name: key1
valueFrom:
configMapKeyRef:
[k8s@server11 configmap]$ kubectl logs pod1
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_SERVICE_PORT=443
HOSTNAME=pod1
SHLVL=1
HOME=/root
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
KUBERNETES_PORT_443_TCP_PORT=443
key1=172.25.16,1
KUBERNETES_PORT_443_TCP_PROTO=tcp
key2=3306
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_SERVICE_HOST=10.96.0.1
PWD=/
[k8s@server11 configmap]$
2.使用conigmap设置命令行参数
[k8s@server11 configmap]$ vim pod1.yml
[k8s@server11 configmap]$ kubectl create -f pod1.yml
pod/pod1 created
[k8s@server11 configmap]$ kubectl logs pod1
172.25.16,1 3306
$ vim pod2.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod1
spec:
containers:
- name: pod1
image: busybox
command: ["/bin/sh", "-c", "echo $(db_host) $(db_port)"]
envFrom:
- configMapRef:
name: cm1-config
restartPolicy: Never
3.通过数据卷使用configmap
apiVersion: v1
kind: Pod
metadata:
name: pod2
spec:
containers:
- name: pod2
image: busybox
command: ["/bin/sh", "-c", "cat /config/db_host"]
volumeMounts:
- name: config-volume
mountPath: /config
volumes:
- name: config-volume
configMap:
name: cm1-config
restartPolicy: Never
4
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
ports:
- containerPort: 80
volumeMounts:
- name: config-volume
mountPath: /config
volumes:
- name: config-volume
configMap:
name: cm1-config
kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
my-nginx-5cb94b7564-gxjlq 1/1 Running 0 16s 10.244.152.13 server12 <none> <none>
[k8s@server11 configmap]$ curl 10.244.152.12
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
echo www.westos.org > index.html
[k8s@server11 configmap]$ kubectl create configmap cm2-config --from-file=index.html
configmap/cm2-config created
[k8s@server11 configmap]$ kubectl get cm
NAME DATA AGE
cm1-config 2 59m
cm2-config 1 6s
my-config 2 87m
my-config-2 1 82m
my-config-3 2 77m
[k8s@server11 configmap]$ 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
ports:
- containerPort: 80
volumeMounts:
- name: config-volume
mountPath: /usr/share/nginx/html
volumes:
- name: config-volume
configMap:
name: cm2-config
configmap热更新后,并不会触发相关Pod的滚动更新,需要手动触发
[k8s@server11 configmap]$ kubectl create configmap nginxconf1 --from-file=nginx.conf
configmap/nginxconf1 created
[k8s@server11 configmap]$ kubectl get cm
NAME DATA AGE
cm1-config 2 168m
cm2-config 1 108m
my-config 2 3h16m
my-config-2 1 3h10m
my-config-3 2 3h6m
nginxconf 1 100m
nginxconf1 1 8s
[k8s@server11 configmap]$ kubectl create -f pod1.yml
deployment.apps/my-nginx created
[k8s@server11 configmap]$ kubectl get pod
NAME READY STATUS RESTARTS AGE
my-nginx-66cd7954f-h2pjm 0/1 ContainerCreating 0 8s
[k8s@server11 configmap]$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
my-nginx-66cd7954f-h2pjm 1/1 Running 0 12s 10.244.152.16 server12 <none> <none>
[k8s@server11 configmap]$ curl 10.244.152.16
curl: (7) Failed connect to 10.244.152.16:80; Connection refused
[k8s@server11 configmap]$ curl 10.244.152.16:8000 //在nginx.conf文件下我设置我8000端口所以必须加8000端口在可以访问
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
[k8s@server11 configmap]$ cat nginx.conf
server {
listen 8000;
server_name _;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
我们更改nginxconf1 后 更新不会触发 我们怎么解决了?
[k8s@server11 configmap]$ kubectl edit cm nginxconf1
configmap/nginxconf1 edited
[k8s@server11 configmap]$ kubectl exec my-nginx-66cd7954f-h2pjm -- cat /etc/nginx/conf.d/nginx.conf
[k8s@server11 configmap]$ kubectl exec my-nginx-66cd7954f-h2pjm -- cat /etc/nginx/conf.d/nginx.conf
server {
listen 8080
server_name _;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
//此处已经自动更新到了 8080端口
//但是我们使用这个8080端口并不可以访问
//此时我们可以选择重新推一遍文件,但是过于麻烦
//所以使用以下命令可以直接完成更新
kubectl patch deployments.apps my-nginx --patch '{"spec": {"template": {"metadata": {"annotations": {"version/config": "20200915"}}}}}'
deployment.apps/my-nginx patched
我们再次尝试这个能否用8080端口连接 上一个已经被回收了 所以ip地址有了变更
hostpath:
我们先创建一个vhost目录 如图所时。