一、secret
1、什么是secret?
-
这个类型主要就是存储密码或者一些隐私一些内容
-
主要就是保存这些东西的
-
值都是base64加密的
-
都是基于命名空间的
2、创建secret方式
1、命令行创建
bash
[root@k-master 8-2]# kubectl create secret --help
Create a secret using specified subcommand.
Available Commands:
docker-registry Create a secret for use with a Docker registry
generic Create a secret from a local file, directory, or literal value # 常用的
tls Create a TLS secret
Usage:
kubectl create secret [flags] [options]
Use "kubectl <command> --help" for more information about a given command.
Use "kubectl options" for a list of global command-line options (applies to all commands).
[root@k-master 8-2]# kubectl create secret generic --help
# 这些有的是案例的
[root@k-master 8-2]# kubectl create secret generic --help | grep from
kubectl create secret generic my-secret --from-file=path/to/bar
kubectl create secret generic my-secret --from-file=ssh-privatekey=path/to/id_rsa --from-file=ssh-publickey=path/to/id_rsa.pub
kubectl create secret generic my-secret --from-literal=key1=supersecret --from-literal=key2=topsecret
kubectl create secret generic my-secret --from-file=ssh-privatekey=path/to/id_rsa --from-literal=passphrase=topsecret
# Create a new secret named my-secret from env files
kubectl create secret generic my-secret --from-env-file=path/to/foo.env --from-env-file=path/to/bar.env
--from-env-file=[]: # 通过环境变量创建
--from-file=[]: # 通过文件创建
--from-literal=[]: # 键值对的方式
kubectl create secret generic NAME [--type=string] [--from-file=[key=]source] [--from-literal=key1=value1] [--dry-run=server|client|none] [options]
[root@k-master 8-2]# kubectl create secret generic mysec1 --from-literal=name1=aaa1 --from-literal=name2=bbb2
secret/mysec1 created
# 上面创建了2个数据
[root@k-master 8-2]# kubectl get secrets
NAME TYPE DATA AGE
mysec1 Opaque 2 3s
[root@k-master 8-2]# kubectl describe secrets mysec1
Name: mysec1
Namespace: default
Labels: <none>
Annotations: <none>
Type: Opaque # 基于base64密钥进行解密和加密
Data
====
name2: 4 bytes # 值默认是加密的
name1: 4 bytes
- 显示加密后的密钥
bash
[root@k-master 8-2]# kubectl get secrets mysec1 -o yaml
apiVersion: v1
data:
name1: YWFhMQ==
name2: YmJiMg==
kind: Secret
metadata:
creationTimestamp: "2025-08-02T07:00:20Z"
name: mysec1
namespace: default
resourceVersion: "150234"
uid: b89398bb-a512-41bf-9032-31d6e15e2fa0
type: Opaque
# 使用base64进行解密
[root@k-master 8-2]# echo -n YWFhMQ== | base64 -d
aaa1[root@k-master 8-2]#
2、文件方式
-
将内容保存到文件中去
-
文件名相当于是键,内容是值
bash
[root@k-master 8-2]# echo redhat > name3
[root@k-master 8-2]# ls
name3
[root@k-master 8-2]# cat name3
redhat
[root@k-master 8-2]# kubectl create secret generic mysec2 --from-file=name3
3、环境变量方式
bash
cat 1.txt
name1=aaa1
[root@k-master 8-2]# kubectl create secret generic mysec3 --from-env-file=1.txt
secret/mysec3 created
4、通过yaml文件生成
bash
# 通过查看命令帮助
[root@k-master ~]# kubectl explain secret --recursive | less
[root@k-master 8-2]# cat secret1.yaml
apiVersion: v1
kind: Secret
metadata:
name: mysec4
data:
name1: cXFxCg==
3、使用secret方式
1、卷使用secret
-
将这个secret挂载到容器里面去即可
-
以卷的方式来挂载这个secret和confgimap的话,适用场景就是一些服务的配置文件
-
在pod里面存在的方式,文件名就是键
bash
[root@k-master 8-2]# cat pod1.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: pod1
name: pod1
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: pod1
volumeMounts: # 挂载到这个/mnt目录下
- name: v1
mountPath: /mnt
volumes: # 使用secret作为卷
- name: v1
secret:
secretName: mysec1
# 将这个密钥写到这个文件里面去了
# 文件名就是这个键,内容就是值
# 在pod里面的存在的方式文件名就是键
[root@k-master 8-2]# kubectl exec -ti pod1 -- ls /mnt
name1 name2
bash
# nginx的页面来使用卷挂载网站页面
2、变量方式使用secret
- mysql运行时,需要环境变量,因此上面的文件不方便
bash
[root@k-master 8-2]# cat pod1.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: pod1
name: pod1
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: pod1
env:
- name: env1 # 环境变量名
valueFrom: # 这个值来自于这个secret
secretKeyRef:
name: mysec1
key: name1 # 使用的键是这个name1,env1的值使用就是name1对应的值
# 进入容器使用环境变量
[root@k-master 8-2]# kubectl exec -ti pod1 -- /bin/bash
root@pod1:/# echo $env1
aaa1
- 创建一个mysql容器
bash
[root@k-master 8-2]# cat mysql.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: mysql1
name: mysql1
spec:
containers:
- image: mysql
imagePullPolicy: IfNotPresent
name: mysql1
ports:
- containerPort: 3306
env:
- name: MYSQLROOT_PASSWORD # 环境变量键
valueFrom:
secretKeyRef:
name: mysec1
key: name1 # 使用的值就是name1键对应的值
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
- 远程登录mysql,密码是aaa1
bash
[root@k-master 8-2]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mysql1 1/1 Running 0 84s 10.244.82.180 k-node1 <none> <none>
pod1 1/1 Running 0 16m 10.244.82.172 k-node1 <none> <none>
# 语法,-u 可以要空格可以不需要空格
# 但是呢,这个密码的话不能有空格
[root@k-master 8-2]# mysql -uroot -paaa1 -h 10.244.82.180
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 9.4.0 MySQL Community Server - GPL
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]>
二、configmap
1、什么是configmap
-
主要就是保存配置文件用的
-
明文的方式保存
-
跟上面secret的操作一模一样
2、创建configmap方式
1、命令行创建
bash
# 查看命令行帮助
[root@k-master 8-2]# kubectl create configmap --help | grep -i from
kubectl create configmap my-config --from-file=path/to/bar
kubectl create configmap my-config --from-file=key1=/path/to/bar/file1.txt --from-file=key2=/path/to/bar/file2.txt
kubectl create configmap my-config --from-literal=key1=config1 --from-literal=key2=config2
# Create a new config map named my-config from the key=value pairs in the file
kubectl create configmap my-config --from-file=path/to/bar
# Create a new config map named my-config from an env file
kubectl create configmap my-config --from-env-file=path/to/foo.env --from-env-file=path/to/bar.env
--from-env-file=[]:
--from-file=[]:
--from-literal=[]:
kubectl create configmap NAME [--from-file=[key=]source] [--from-literal=key1=value1] [--dry-run=server|client|none] [options]
[root@k-master 8-2]# kubectl create configmap cm1 --from-literal=name1=qqq
configmap/cm1 created
[root@k-master 8-2]# kubc^C
[root@k-master 8-2]# kubectl get cm
NAME DATA AGE
cm1 1 4s
kube-root-ca.crt 1 13d
[root@k-master 8-2]# kubectl describe cm cm1
Name: cm1
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
name1: # 键
----
qqq # 文件的内容
BinaryData
====
Events: <none>
2、文件创建
- 文件名相当于是键,值是文件里面的内容
bash
[root@k-master 8-2]# kubectl create configmap cm2 --from-file=name4
configmap/cm2 created
[root@k-master 8-2]# kubectl describe cm cm2
Name: cm2
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
name4: # 键
----
qqq # 文件的内容
BinaryData
====
Events: <none>
3、环境变量和yaml创建
bash
[root@k-master 8-2]# kubectl create configmap cm3 --from-env-file=2.txt
configmap/cm3 created
[root@k-master 8-2]# kubectl get cmck^C
[root@k-master 8-2]# kubectl describe cm cm3
Name: cm3
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
name1:
----
qqq
BinaryData
====
Events: <none>
bash
[root@k-master 8-2]# kubectl apply -f cm4.yaml
configmap/cm4 created
[root@k-master 8-2]# kubectl describe configmaps cm4
Name: cm4
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
name1:
----
qqq
BinaryData
====
Events: <none>
3、使用configmap方式
1、通过卷的方式使用
bash
[root@k-master 8-2]# cat pod2.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: pod2
name: pod2
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: pod2
volumeMounts:
- name: c1
mountPath: /mnt
resources: {}
volumes:
- name: c1
configMap:
name: cm4
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
# 卷挂载的话,以键是文件的存在形式存在的
[root@k-master 8-2]# kubectl exec -ti pod2 -- cat /mnt/name1
qqq[root@k-master 8-2]#
2、通过变量的方式使用
bash
[root@k-master 8-2]# cat pod2.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: pod2
name: pod2
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: pod2
resources: {}
env:
- name: env1 # 环境变量键
valueFrom:
configMapKeyRef: # 使用的值是configmap
name: cm4
key: name1 # 值是name1对应的值
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
[root@k-master 8-2]# kubectl exec -ti pod2 -- /bin/bash
root@pod2:/# echo $env1
qqq
root@pod2:/#
三、实验
1、configmap配置nginx网页目录
- data字段数据写法
bash