查看帮助文档
kubectl explain pod
FIELDS:
apiVersion <string> 版本号
kind <string> 资源类型
metadata <Object> 元数据
spec <Object> 指定容器所需的行为
status <Object>(只读) 状态
先看一个示例
---
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
namespace: default
spec:
containers:
- name: nginx-container
image: nginx:latest
metadata.name:是namespace的名称,必须唯一。
metadata.namespace:指定名称空间
spec.containers:定义运行容器的行为
spec.containers.name:容器名称
spec.containers.image:运行容器的镜像
每个人的需求不一样,资源配置清单都不一样。所以这里只阐述怎么找帮助文档和怎么写格式。
资源清单只需要定义四项,其中两项(apiVersion和kind)已经定了。那就只关注metadata和spec。
metadata常用选项:
查看帮助信息:kubectl explain pod.metadata
name <string>
annotations <map[string]string>
labels <map[string]string>
<map[string]string>用法:key:value,看metadata.labels格式。
示例演示:
---
apiVersion: v1
kind: Pod
metadata:
annotations:
Author: mycloudedu
name: nginx-pod
namespace: default
labels:
app: nginx
tier: frontend
spec:
containers:
- name: nginx-container
image: nginx:latest
验证:
[root@master kubernetes]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx-pod 1/1 Running 0 3m46s app=nginx,tier=frontend[root@master kubernetes]# kubectl describe pod nginx-pod
Name: nginx-pod
Namespace: default
Priority: 0
Node: node02/192.168.100.82
Start Time: Wed, 11 Dec 2019 19:13:52 +0800
Labels: app=nginx
tier=frontend
Annotations: Author: mycloudedu…..
spec常用选项:
apiVersion: v1
kind: Pod
metadata:
name: liveness-exec-pod
namespace: default
spec:
containers:
- name: liveness-exec-container
image: busybox:latest
imagePullPolicy: IfNotPresent
command:
- "/bin/sh"
- "-c"
- "touch /1.txt; sleep 10; rm -f /1.txt; sleep 3600"
livenessProbe:
periodSeconds: 2
exec:
command:
- "cat"
- "/1.txt"
验证:
[root@master kubernetes]# kubectl get pods
NAME READY STATUS RESTARTS AGE
liveness-exec-pod 1/1 Running 0 35s注意看二次查询的结果。重启容器一次
[root@master kubernetes]# kubectl get pods
NAME READY STATUS RESTARTS AGE
liveness-exec-pod 1/1 Running 1 50s
示例readinessProbe演示:(服务是否准备就绪)
---
apiVersion: v1
kind: Pod
metadata:
name: readinessprobe-httpget-pod
namespace: default
spec:
containers:
- name: readinessprobe-httpget-container
image: nginx:latest
ports:
- name: http
containerPort: 80
imagePullPolicy: IfNotPresent
readinessProbe:
httpGet:
port: 80
periodSeconds: 3
initialDelaySeconds: 2
验证:
[root@master kubernetes]# kubectl get pods
NAME READY STATUS RESTARTS AGE
readinessprobe-httpget-pod 1/1 Running 0 19s交互式进入容器,人为破坏主页。
[root@master kubernetes]# kubectl exec readinessprobe-httpget-pod -it -- /bin/sh
# rm /usr/share/nginx/html/index.html
[root@master kubernetes]# kubectl get pod
NAME READY STATUS RESTARTS AGE
readinessprobe-httpget-pod 0/1 Running 0 113s交互式进入容器,人为创建主页。
[root@master kubernetes]# kubectl exec readinessprobe-httpget-pod -it -- /bin/sh
# echo hello > /usr/share/nginx/html/index.html
[root@master kubernetes]# kubectl get pod
NAME READY STATUS RESTARTS AGE
readinessprobe-httpget-pod 1/1 Running 0 2m58s
示例lifecycle演示:(创建容器后立即调用PostStart)
---
apiVersion: v1
kind: Pod
metadata:
name: lifecycle-poststart-pod
namespace: default
labels:
app: nginx
tier: frontend
spec:
containers:
- name: lifecycle-poststart-container
image: nginx:latest
imagePullPolicy: IfNotPresent
lifecycle:
postStart:
exec:
command: ["/bin/sh","-c","echo Hello from the postStart handler > /usr/share/nginx/html/index.html"]
验证:
[root@master kubernetes]# curl 10.244.2.25
Hello from the postStart handler