kubernetes-pod
Pod基本认识
pod 是 Kubernetes 集群中能够被创建和管理的最小部署单元
每个Pod都有一个特殊的被称为
“根容器”
的Pause
容器。Pause容器对应的镜像属于Kubernetes平台的一部分,除了Pause容器,每个Pod还包含一个或多个紧密相关的用户业务容器Pod的状态描述
状态值 描述 Pending API Server已经创建该Pod,但在Pod内还有一个或多个容器的镜像没有创建,包括正在下载镜像的过程。 Runnung Pod内所有容器均已创建,且至少有一个容器处于运行状态、正在启动状态或正在重启状态。 Succeeded Pod内所有容器均成功执行后退出,且不会再重启。 Failed Pod内所有容器均已退出,但至少有一个容器退出为失败状态。 Unknown 由于某种原因无法获取该Pod的状态,可能由于网络通信不畅导致。
Pod的Yaml配置文件
secrets.yml
1
2
3
4
5
6
7
8apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
password: MWYyZDFlMmU2N2Rm
username: YWRtaW4=Secret 解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者 Pod Spec 中
Opaque 类型的数据是一个 map 类型,要求 value 是 base64 编码格式:
1
2
3
4echo -n "admin" | base64
YWRtaW4=
echo -n "1f2d1e2e67df" | base64
MWYyZDFlMmU2N2RmconfigMap.properties
1
2
3
4
5
63 =
true =
noGoodRotten =
UUDDLRLRBABAS =
true =
30 =ConfigMap 用于保存配置数据的键值对,可以用来保存单个属性,也可以用来保存配置文件。ConfigMap 跟 secret 很类似,但它可以更方便地处理不包含敏感信息的字符串。
1
2
3
4# 创建configMap
kubectl create configmap web-game --from-file configMap.properties
# 编辑configMap
kubectl edit configmaps web-gamepod.yaml配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62apiVersion: v1
kind: Pod
metadata: # 元数据
name: pod-volume #元数据的名称
spec:
hostNetwork: true #是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络
hostPID: true #共享宿主机PID Namespace 默认为false
hostAliases: # 添加hosts信息
- ip: "192.168.43.115" # 指定ip
hostnames:
- "web.chc.com" # 设置ip对象的hostname
containers:
- name: web # 容器名称
image: tomcat:8-slim #容器的镜像名称
ports: #需要暴露的端口号列表
- containerPort: 8080 #容器需要监听的端口号
volumeMounts: # 挂载到容器内部的存储卷配置
- name: shared-volume # 引用pod定义的共享存储卷的名称,需用volumes[]部分定义的的卷名
mountPath: /shared-web #存储卷在容器内mount的绝对路径,应少于512字符
- name: frps # 容器名称
env: #容器环境变量列表
- name: dashboard_port # 环境变量的名称
value: "8081" # 环境变量的值
image: chcgolang/frps:latest #容器的镜像名称
ports: #需要暴露的端口号列表
- containerPort: 8081 #容器需要监听的端口号
hostPort: 8081 #容器所在主机需要监听的端口号,默认与Container相同
name: dashboard #端口号名称
protocol: TCP #端口协议,支持TCP和UDP,默认TCP
volumeMounts: # 挂载到容器内部的存储卷配置
- name: shared-volume # 引用pod定义的共享存储卷的名称,需用volumes[]部分定义的的卷名
mountPath: /shared-frps #存储卷在容器内mount的绝对路径,应少于512字符
- name: secrets # 引用pod定义的共享存储卷的名称,需用volumes[]部分定义的的卷名
mountPath: /mysecret #存储卷在容器内mount的绝对路径,应少于512字符
readOnly: true # 是否开启只读模式
- name: game
mountPath: /game
readOnly: true
lifecycle: #生命周期管理(只能应用所在的容器)
postStart: #容器运行之前运行的任务(并行运行,容器不会等待命令执行完在启动)
exec:
command:
- "/bin/bash"
- "-c"
- "echo frps starting ... >> /var/log/messages"
preStop: #容器关闭之前运行的任务(串行运行,等待本命令执行完在结束,一般应用于安全退出)
exec:
command: ["/bin/bash","-c","echo frps stoping ... >> /var/log/messages"]
envFrom: # 加载环境变量配置,用于批量设置环境变量
- configMapRef: # configMap类型的环境变量配置
name: web-game # configMap的配置名称
volumes: #在该pod上定义共享存储卷列表
- name: shared-volume #共享存储卷名称
hostPath: # 挂载Pod所在宿主机的目录
path: /shared-volume-data #Pod所在宿主机的目录,将被用于同期中mount的目录
- name: secrets
secret: # 类型为secret的存储卷,挂载集群与定义的secre对象到容器内部
secretName: mysecret # secret存储卷的名称,需要对应名称的secret存储卷
- name: game
configMap: # 类型configMap的存储卷
name: web-game # configMap存储卷的名称
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Chc-个人数据程序主页!