本文已参与「新人创作礼」活动,一起开启掘金创作之路。
Kubernetes 中的资源
- 工作负载型资源 :
- Pod
- ReplicaSet
- Deployment
- StatefulSet
- DaemonSet
- Job
- Cronjob
- ...
- 服务发现及均衡
- Service
- Ingress
- ...
- 配置与存储
- Volume
- ConfigMap
- Secret
- ...
- 集群级资源
- Namespace
- Node
- Role
- RoleBinding
- ...
- 元数据型资源
- HPA
- PodTemplate
- LimitRange
- ...
kubectl命令
kubectl是api server的客户端程序
-
查看节点详细信息
kubectl describe node k8s-node1 -
创建pod
kubectl run nginx-deploy --image=nginx --port=80 --replicas=1nginx-deploy名称--image=nginx指定镜像--port=80暴露端口--replicas=1创建副本数 -
查看pod信息
kubectl describe pods nginx-deploy-98c9d6c66-tvsqc详细信息kubectl get pods -o wide获取pods运行在哪个节点上kubectl get pods -n kube-system查看kube-system名称空间的podskubectl logs nginx-deploy-98c9d6c66-tvsqc查看pod运行日志 -
删除pod
kubectl delete pods nginx-deploy-98c9d6c66-tvsqc再执行kubectl get pods会发现新的nginx-deploy生成了,pod管理确保pod副本数量严格符合用户定义,即上述--replicas -
为pod资源创建一个service
kubectl expose deployment nginx-deploy --name=nginx --port=80 --target-port=80 --protocol=TCP为pod提供固定访问端点 -
查看service
kubectl get svc -
创建pod客户端
kubectl run client --image=busybox --replicas=1 -it --restart=Never客户端内可直接使用第5步定义的名称访问pod:通过label-selector -
动态扩缩容
kubectl scale --replicas=5 deployment nginx-deploy -
更新镜像
kubectl set image deployment nginx-deploy nginx-deploy=nginx:1.15 -
回滚
kubectl rollout undo deployment nginx-deploy -
修改service属性
kubectl edit svc nginx将type修改为NodePort。 查看servicekubectl get svc可以看到nginx的ports多了个80外的端口 即可在集群外部访问节点ip:新的port。 -
查看pod的yaml信息
kubectl get pod nginx-deploy-68875965fc-dw22b -o yaml -
查看创建pod的yaml字段
kubectl explain pods内嵌字段使用kubectl explain pods.metadata -
通过yaml文件创建资源
kubectl create -f pod-demo.yaml -
通过yaml文件删除资源
kubectl delete -f pod-demo.yaml -
给资源打标签
kubectl label pods pod-demo release=canary如果是修改标签kubectl label pods pod-demo release=stable --overwrite -
选择标签
kubectl get pods -l- 等值关系:
=,kubectl get pods -l release=stable选择所有有release=stable标签的资源==, 同上!=,kubectl get pods -l release!=stable选择所有release!=stable标签的资源,包括没有release标签的资源
- 集合关系:
key in (value1, value2, ...)选择所有key=value1或key=value2或...的资源key notin(value1, value2, ...)选择所有key!=value1且key!=value2且...的资源key选择所有有key标签的资源!key选择所有没有key标签的资源
- 等值关系:
-
显示所有key标签的值
kubectl get pods -L key -
通过文件对资源应用配置
kubectl apply -f demo.yaml首次执行为创建
多次执行为更新
-
更新资源字段、打补丁
kubectl patch deployment deploy-demo -p '{"spec":{"replicas":5}}'

yaml配置清单
创建资源的方法
apiserver 仅接收JSON格式的资源定义。 yaml 格式提供配置清单,apiserver可自动将其转换为json格式,然后再执行。
配置清单字段
使用kubectl explain TYPE命令获取各类型资源的字段
-
apiVersionapi版本group/versionkubectl api-versions可获取 -
kind资源类别 -
metadata元数据-
name同一类别中name唯一 -
namespace名称空间 -
labels标签key字母、数字、、-、.value可以为空,只能字母或数字开头及结尾,中间可使用字母、数字、、-、. -
annotations注解与
label不同的地方在于,它不能用于挑选资源对象,仅用于为对象提供“元数据”。
-
-
spec期望目标状态, 不同资源类型的spec字段内容不尽相同-
container容器-
name容器名称 -
image容器镜像 -
imagePullPolicy拉取镜像策略Always总是自动拉取Never从不自动拉取(需要用户手动拉取)IfNotPresent如果存在该镜像则不拉取 -
port暴露端口containerPort需要暴露的容器端口
-
command、args修改镜像中的默认设置command容器的启动命令列表,相较于DockerFile的Entrypoint字段args容器的启动命令参数列表,相较于DockerFile的Cmd字段- 如果
command、args均不指定,则默认使用Docker镜像定义的Entrypoint和Cmd - 指定了
command没指定args,只运行command,忽略Entrypoint和Cmd - 指定了
args没指定command,只运行Entrypoint并使用args参数 - 如果
command、args均指定,使用args参数运行command
- 如果
-
livenessProbe存活性探测exec、httpGet、tcpSocket三种探针类型failureThreshold被认为失败的最少连续失败次数initialDelaySeconds容器启动后、探针初始化前的时间periodSeconds探针频率successThreshold被认为成功的最少连续成功次数timeoutSeconds超时时间
-
readinessProbe就绪性探测 -
lifecycle生命周期回调postStart容器创建后立刻执行,如果失败,容器将停止并根据重启策略重启容器。preStop结束前回调,执行于以下情况引起的容器终止- API 请求
- 管理事件
- 探测失败
- 抢占
- 资源争夺
- ...
-
-
nodeSelector节点标签选择器key: value运行在拥有key=value标签的节点上 -
nodeName指定节点 -
selector适用于kind=deployment的资源,把所有正在运行的,拥有给定标签的pod识别为被管理的对象。matchLabels直接给定键值matchExpressions基于表达式定义选择器。{key:"KEY", operator:"OPERATOR", values:[val1, val2, ...]}当operator为:In,NotIn时,values字段非空Exists,NotExists时,values字段为空
-
restartPolicyPod内所有容器的重启策略Always总是重启OnFailure出错时重启Never从不重启
-
-
status当前状态,无限向期望状态靠近,由kubernetes集群维护,用户不能定义