资源:对象node
service pod deploymentnginx
workload:pod,ReplicaSet,Deployment,statefulset,DaemonSet,Job,Crontabjob,...shell
服务发现和负载均衡:service ,Ingress,....json
配置与存储:Volumn存储卷 ,CSI存储接口vim
ConfigMap,Secret,api
DownwardAPIapp
集群级资源:namespace,Node,Role,ClusterRole,RoleBinding,ClusterRoleBinding,负载均衡
元数据型资源frontend
HPA,PodTemplate,LimitRangeide
kubectl get pod myapp-84cd4b7f95-h47cj -o yaml
yml文件查看pod详细的配置清单
建立资源的方法:
apiserver仅接收JSON格式的资源定义;
yaml格式提供配置清单,apiserver可自动转为json格式,然后在提交
kubectl api-versions
大部分资源的配置清单:
apiVerison:group/version,
kind:资源类别
metadata:元数据
name
namespace
labels
annotations 资源注解
每一个资源的引用PATH
/api/GROUP/VERSION/namespaces/NAMESPACE/TYPE/NAME
spec:规格 指望的状态 disired state
spec.containers
- name <string>
image <string>
imagePullPolicy <string>
Always,Never,IfNotPresent
老是去仓库下载 不下载 不存在就去下载,存在就直接使用
修改镜像中默认的运用:
kubectl explain pods.spec.containers
command ,args
https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell
标签labels
kubectl get pods --show-labels
key=value(小于63个字符)
key:字母,数字,”-_”
value:能够为空
kubectl get pods -l app --show-labels 找出含有app标签的pod
kubectl get pods -L app,run --show-labels -o wide 匹配字段查询
打标签
kubectl label –help
kubectl label pods pod-demo release=canary
类型 资源名 标签名=canary
kubectl get pods -l app --show-labels 查看是否打上标签
覆盖修改标签
kubectl label pods pod-demo release=stable –overwrite
kubectl get pods -l app,release --show-labels 既有app也有release标签
标签选择器
等值:=,==,!=
kubectl get pods -l release=stable --show-labels
kubectl label pods nginx-7bb7cd8db5-7dn9r release=canary
kubectl get pods -l release
kubectl get pods -l release=canary
kubectl get pods -l release,app
kubectl get pods -l release=stable,app=myapp
kubectl get pods -l release!=canary --show-labels
集合关系:key in (values1,value2…), key not in (values1,value2…),key,!key
kubectl get pods -l "release in (canary,beta,alpha)" --show-labels
kubectl get pods -l "release notin (canary,beta,alpha)" --show-labels
许多资源支持内嵌字段定义其使用标签选择器:
matchLabels:直接给定键值,至关于=
matchExpressions:基于给定的表达式来定义使用标签选择器,{key:”KEY”,operator:”OPERATOR”,values:[VAL1,VAL2…]}大写字母表示替换
operator操做符:In ,NotIn values字段必须为非空列表
Exists,NotExists values字段必须为空列表
各类对象都能打标签,不只限于pod,好比node
kubectl get nodes --show-labels
kubectl label nodes node02 disktype=ssd 对node02打标签
kubectl explain pods.spec
nodeSelector <map[string]string> 节点标签选择器
kubectl label nodes node01 disktype=hd
vim pod-demo.yaml
containers:
…
nodeSelector:
disktype: hd
kubectl delete -f pod-demo.yaml
kubectl create -f pod-demo.yaml 再次建立会运行在node01上
kubectl describe pods pod-demo
nodeName <string> 指定运行在哪一个节点上
annotations:资源注解
与label不一样的地方在于,它不能用于挑选资源对象,仅用于为对象提供”元数据”,
vim pod-demo.yaml
metadata:
…
annotations:
work in node02: "disk is ssd"
kubectl delete -f pod-demo.yaml
kubectl create -f pod-demo.yaml
kubectl describe pods pod-demo
Annotations: work_in_node02: disk is ssd
status:当前状态,current state,本字段由kubernetes集群维护;用户不能定义
kubectl explain pods 查询pods怎么定义
kubectl explain pods.metadata 查询pods的metadata怎么定义
kubectl explain pods.spec
kubectl explain pods.spec.containers
kubectl explain pods.spec.containers.livenessProbe
例如:自定义一个pod资源
vim pod-demo.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-demo
namespace: default
labels:
app: myapp
tier: frontend
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v1
ports:
- name: http
containerPort: 80
- name: https
containerPort: 443
- name: busybox
image: busybox:latest
imagePullPolicy: IfNotPresent
command:
- "/bin/sh"
- "-c"
- "sleep 3600"
注释:
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v1
至关于 spec:{containers:['name:myapp'],image:"ikubernetes/myapp:v1"}
command:
- "/bin/sh"
- "-c"
- "sleep 3600"
至关于 command:["/bin/sh","-c","sleep 3600"]
kubectl create -f pod-demo.yaml 基于yaml清单文件建立pod资源
从文件加载建立资源
kubectl get pods 再查看一下建立的pod
kubectl describe pods pod-demo 查看建立的资源的描述信息
查看容器日志
kubectl logs pod-demo myapp
pod名 pod里面的容器名
进入容器
kubectl exec -it pod-demo -c myapp -- /bin/sh
输入和终端 pod名 -c指定容器名 --执行的命令
kubectl delete -f pod-demo.yaml 删除基于资源清单yaml文件定义的资源