1.1 资源清单格式
1、基本介绍
资源清单有5个字段组成:apiVersion
、kind
、metadata
、spec
、status
。
apiVersion: group/apiversion # 如果没有给定 group 名称,那么默认为 core,可以使用
kubectl apiversions # 获取当前 k8s 版本上所有的 apiVersion 版本信息(每个版本可能不同)
kind: #资源类别
metadata: #资源元数据
name
namespace
lables
annotations # 主要目的是方便用户阅读查找
spec: # 期望的状态(disired state)
status:# 当前状态,本字段有 Kubernetes 自身维护,用户不能去定义
2、使用kubectl命令可以查看apiVersion的各个版本信息
[root@k8s-master01 pods]# kubectl api-versions
admissionregistration.k8s.io/v1
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
.........
rbac.authorization.k8s.io/v1beta1
scheduling.k8s.io/v1
scheduling.k8s.io/v1beta1
storage.k8s.io/v1
storage.k8s.io/v1beta1
v1
[root@k8s-master01 pods]#
3、字段配置格式类型
资源清单中大致可以分为以下类型
apiVersion <string> #表示字符串类型
metadata <Object> #表示需要嵌套多层字段
labels <map[string]string> #表示由k:v组成的映射
finalizers <[]string> #表示字串列表
ownerReferences <[]Object> #表示对象列表
hostPID <boolean> #布尔类型
priority <integer> #整型
name <string> -required- #如果类型后面接 -required-,表示为必填字段
1.2 pod生命周期
1、环境所需要镜像
docker pull busybox:1.32.0
2、注意事项:
readiness
探测成功后,Pod才会改变成Ready或者Running等状态!!Liveness
探测主容器已经损坏,不能正常工作,就会执行相应的策略!!
1.2.1 深入理解initC
1、initC基本特点
initC
总是运行到成功完成为止,每个initC
容器都必须在下一个initC
启动之前成功完成。- 如果
initC
容器运行失败,K8S集群会不断的重启该pod
,直到initC
容器成功为止。 - 如果pod对应的
restartPolicy
为never
,它就不会重新启动。
2、在k8sdemo01
工程创建initcpod.yml
文件
apiVersion: v1
kind: Pod
metadata:
name: initcpod-test
labels:
app: initcpod-test
spec:
containers:
- name: initcpod-test #相位
image: busybox:1.32.0
imagePullPolicy: IfNotPresent
command: ['sh','-c','echo The app is running! && sleep 3600']
initContainers:
- name: init-myservice
image: busybox:1.32.0
imagePullPolicy: IfNotPresent
command: ['sh','-c','until nslookup myservice; do echo waitting for myservice; sleep 2; done;']
- name: init-mydb
imagePullPolicy: IfNotPresent
image: busybox:1.32.0
command: ['sh','-c','until nslookup mydb; do echo waitting for mydb; sleep 2; done;']
restartPolicy: Always
3、获取节点
[root@k8s-master01 pods]# ls
initcpod.yml
[root@k8s-master01 pods]# kubectl apply -f initcpod.yml
pod/initcpod-test created
[root@k8s-master01 pods]# kubectl get pod
NAME READY STATUS RESTARTS AGE
initcpod-test 0/1 Init:1/2 0 22s
[root@k8s-master01 pods]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
initcpod-test 0/1 Init:1/2 0 38s 10.81.85.228 k8s-node01 <none> <none>
[root@k8s-master01 pods]#
4、在k8sdemo01
工程创建initcservice1.yml
和initcservice2.yml
文件
initcservice1.yml
apiVersion: v1
kind: Service
metadata:
name: myservice
spec:
selector:
app: myservice
ports:
- port: 80
targetPort: 9376
protocol: TCP
initcservice2.yml