前言
什么叫资源?
k8s中所有的内容都抽象为资源,资源实例化之后,叫做对象。
什么是资源清单?
在k8s中,一般使用yaml格式的文件来创建符合我们预期期望的pod,这样的yaml文件我们一般称为资源清单
1、资源清单的书写
https://kubernetes.io/docs/setup/
查看k8s提供的API kubectl api-versions
创建xxx.yml清单文件
主要参数:
2、方法一
利用kubectl explain
命令帮助寻找清单内必要文件,一步步写
有-required-的是必要参数
pod.yml文件范例
[root@server2 ~]# cat pod.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
namespace: default
spec:
replicas: 1
selector:
matchLabels:
run: nginx
template:
metadata:
labels:
run: nginx
spec:
#nodeSelector:
# kubernetes.io/hostname: server4
#nodeName: server3
#hostNetwork: true
containers:
- name: nginx
image: myapp:v1
imagePullPolicy: IfNotPresent
resources:
requests:
cpu: 100m
memory: 100Mi
limits:
cpu: 0.5
memory: 512Mi
#- name: busyboxplus
# image: busyboxplus
# imagePullPolicy: IfNotPresent
# stdin: true
# tty: true
kubectl apply -f xxx.yml # 运行清单
kubectl delete -f xxx.yml # 删除清单(删除清单部署的内容)--很方便
3、方法二
利用已有的pod 输出.yml文件进行修改(比较方便,但是学习还是选择方法一)
导出命令 kubectl get pod nginx -o yaml
导出的范例:
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: "2021-02-21T08:30:16Z"
generateName: nginx-67f9d9c97f-
labels:
app: nginx
pod-template-hash: 67f9d9c97f
managedFields:
- apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:metadata:
f:generateName: {
}
f:labels:
.: {
}
f:app: {
}
f:pod-template-hash: {
}
f:ownerReferences:
.: {
}
k:{
"uid":"9a6ef1c2-dc68-4f79-8437-9a9b81cbd004"}:
.: {
}
f:apiVersion: {
}
f:blockOwnerDeletion: {
}
f:controller: {
}
f:kind: {
}
f:name: {
}
f:uid: {
}
f:spec:
f:containers:
k:{
"name":"myapp"}:
.: {
}
f:image: {
}
f:imagePullPolicy: {
}
f:name: {
}
f:resources: {
}
f:terminationMessagePath: {
}
f:terminationMessagePolicy: {
}
f:dnsPolicy: {
}
f:enableServiceLinks: {
}
f:restartPolicy: {
}
f:schedulerName: {
}
f:securityContext: {
}
f:terminationGracePeriodSeconds: {
}
manager: kube-controller-manager
operation: Update
time: "2021-02-21T08:30:16Z"
- apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:status:
f:conditions:
k:{
"type":"ContainersReady"}:
.: {
}
f:lastProbeTime: {
}
f:lastTransitionTime: {
}
f:message: {
}
f:reason: {
}
f:status: {
}
f:type: {
}
k:{
"type":"Initialized"}:
.: {
}
f:lastProbeTime: {
}
f:lastTransitionTime: {
}
f:status: {
}
f:type: {
}
k:{
"type":"Ready"}:
.: {
}
f:lastProbeTime: {
}
f:lastTransitionTime: {
}
f:message: {
}
f:reason: {
}
f:status: {
}
f:type: {
}
f:containerStatuses: {
}
f:hostIP: {
}
f:podIP: {
}
f:podIPs:
.: {
}
k:{
"ip":"10.244.2.6"}:
.: {
}
f:ip: {
}
f:startTime: {
}
manager: kubelet
operation: Update
time: "2021-02-21T08:30:22Z"
name: nginx-67f9d9c97f-mz5v4
namespace: default
ownerReferences:
- apiVersion: apps/v1
blockOwnerDeletion: true
controller: true
kind: ReplicaSet
name: nginx-67f9d9c97f
uid: 9a6ef1c2-dc68-4f79-8437-9a9b81cbd004
resourceVersion: "115314"
uid: aa9d8806-0ca1-4296-be67-57f0ecaabded
spec:
containers:
- image: myapp:v1
imagePullPolicy: IfNotPresent
name: myapp
resources: {
}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /var/run/secrets/kubernetes.io/serviceaccount
name: default-token-96sws
readOnly: true
dnsPolicy: ClusterFirst
enableServiceLinks: true
nodeName: server4
preemptionPolicy: PreemptLowerPriority
priority: 0
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {
}
serviceAccount: default
serviceAccountName: default
terminationGracePeriodSeconds: 30
tolerations:
- effect: NoExecute
key: node.kubernetes.io/not-ready
operator: Exists
tolerationSeconds: 300
- effect: NoExecute
key: node.kubernetes.io/unreachable
operator: Exists
tolerationSeconds: 300
volumes:
- name: default-token-96sws
secret:
defaultMode: 420
secretName: default-token-96sws
status:
conditions:
- lastProbeTime: null
lastTransitionTime: "2021-02-21T08:30:16Z"
status: "True"
type: Initialized
- lastProbeTime: null
lastTransitionTime: "2021-02-21T08:30:16Z"
message: 'containers with unready status: [myapp]'
reason: ContainersNotReady
status: "False"
type: Ready
- lastProbeTime: null
lastTransitionTime: "2021-02-21T08:30:16Z"
message: 'containers with unready status: [myapp]'
reason: ContainersNotReady
status: "False"
type: ContainersReady
- lastProbeTime: null
lastTransitionTime: "2021-02-21T08:30:16Z"
status: "True"
type: PodScheduled
containerStatuses:
- image: myapp:v1
imageID: ""
lastState: {
}
name: myapp
ready: false
restartCount: 0
started: false
state:
waiting:
message: 'rpc error: code = Unknown desc = Error response from daemon: pull
access denied for myapp, repository does not exist or may require ''docker
login'': denied: requested access to the resource is denied'
reason: ErrImagePull
hostIP: 172.25.200.4
phase: Pending
podIP: 10.244.2.6
podIPs:
- ip: 10.244.2.6
qosClass: BestEffort
startTime: "2021-02-21T08:30:16Z"