k8s中有着极大方面我们使用的简便方式
secret
这是针对我们较为敏感的变量
首先我们先定义一个secret文件
apiVersion: v1
kind: Secret
metadata:
name: dbpass
type: Opaque
data:
username: YWRtaW4K
passwd: MTIzNDU2Cg==
username,passwd都是base64加密的
echo -n admin|base64
然后我们输入命令
kubectl apply -f secret.yaml
创建成功后,secret挂载到etdc上了。
我们用一个demo来看看他的神奇之处
apiVersion: v1
kind: Pod
metadata:
name: pod-secret
spec:
containers:
- name: springboot-web
image: youimagesweb:v1
ports:
- containerPort: 8080
volumeMounts:
- name: db-secret
mountPath: /db-secret
readOnly: true
volumes:
- name: db-secret
projected:
sources:
- secret:
name: dbpass
文件上是挂载了根目录的db-secret
下面
然后我们进入该容器,查看
这样就能挂载。
如果想改账号密码呢?那我们直接改secret文件就可以了,30秒后所使用的pod也会更新的。
configmap的使用
这个主要是用来存储我们的配置文件的。常量。
通过文件的形式
首先我们先新建一份配置文件。
enemies=aliens
lives=3
enemies.cheat=true
enemies.cheat.level=noGoodRotten
secret.code.passphrase=UUDDLRLRBABAS
secret.code.allowed=true
secret.code.lives=30
game.properties
然后我们将这份文件应用生效
kubectl create configmap web-game --from-file game.properties
创建完毕,我们可以看看
kubectl get cm web-game -o yaml
接下来我们用个demo来展示
apiVersion: v1
kind: Pod
metadata:
name: pod-game
spec:
containers:
- name: web
image: web:v1
ports:
- containerPort: 8080
volumeMounts:
- name: game
mountPath: /etc/settings/
readOnly: true
volumes:
- name: game
configMap:
name: web-game
然后我们进行apply后,我们去容器里面看看。
毫无问题!
那我们如何更新配置文件呢
kubectl edit cm web-game
然后进行修改即可,30秒后pod也会生效了
通过环境变量的方式
首先我们新建一个文件configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: configs
data:
JAVA_OPTS: -Xms1024m
LOG_LEVEL: DEBUG
然后我们进行apply一下demo
apiVersion: v1
kind: Pod
metadata:
name: pod-env
spec:
containers:
- name: web
image: web:v1
ports:
- containerPort: 8080
env:
- name: LOG_LEVEL_CONFIG
valueFrom:
configMapKeyRef:
name: configs
key: LOG_LEVEL
搞完了,我们去容器里面看看他的环境变量
没错了。
通过环境变量的方式 启动脚本
我们新建一个yaml文件
apiVersion: v1
kind: Pod
metadata:
name: pod-cmd
spec:
containers:
- name: web
image: web:v1
command: ["/bin/sh", "-c", "java -jar /springboot-web.jar -DJAVA_OPTS=$(JAVA_OPTS)"]
ports:
- containerPort: 8080
env:
- name: JAVA_OPTS
valueFrom:
configMapKeyRef:
name: configs
key: JAVA_OPTS
然后我们去容器里面查看。
毫无问题
downwardapi
直接上文件了
他其实是容器对外给看的信息
apiVersion: v1
kind: Pod
metadata:
name: pod-downwardapi
labels:
app: downwardapi
type: webapp
spec:
containers:
- name: web
image: web:v1
ports:
- containerPort: 8080
volumeMounts:
- name: podinfo
mountPath: /etc/podinfo
volumes:
- name: podinfo
projected:
sources:
- downwardAPI:
items:
- path: "labels"
fieldRef:
fieldPath: metadata.labels
- path: "name"
fieldRef:
fieldPath: metadata.name
- path: "namespace"
fieldRef:
fieldPath: metadata.namespace
- path: "cpu-request"
resourceFieldRef:
containerName: web
resource: limits.memory