CMD
CMD
[TOC]
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#logs
CMD
kubectl cluster-info kubectl apply -f . # 创建当前目录下所有的资源
get -o # [(-o|--output=)json|yaml|wide|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=...]
-o custom-columns=HOST-IP:.status.hostIP,POD-IP:.status.podIP
-o custom-columns=NAME:metadata.name,STATUS:.status.phase,RUNTIME_CLASS:.spec.runtimeClassName
kubectl get po # 查看目前所有的pod kubectl get rs # 查看目前所有的replica set kubectl get deployment # 查看目前所有的deployment kubectl describe po my-nginx # 查看my-nginx pod的详细状态 kubectl describe rs my-nginx # 查看my-nginx replica set的详细状态 kubectl describe deployment my-nginx # 查看my-nginx deployment的详细状态
logs
参数 --previous 检索之前的容器日志
注意: 当前,如果有其他系统机制执行日志轮转,那么 kubectl logs 仅可查询到最新的日志内容。 比如,一个 10MB 大小的文件,通过logrotate 执行轮转后生成两个文件,一个 10MB 大小,一个为空,所以 kubectl logs 将返回空。
deployment
kubectl create -f nginx-deployment.yaml
kubectl get deployments kubectl get rs kubectl get pods --show-labels
升级方法1 kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1 升级方法2 直接编辑 kubectl edit deployment/nginx-deployment
kubectl describe deployments
k8s创建资源
- 用 kubectl 命令直接创建
1kubectl run nginx-deployment --image=nginx:1.7.9 --replicas=2
- 通过配置文件和 kubectl apply 创建
1kubectl apply -f nginx.yaml
kubectl apply 不但能够创建 Kubernetes 资源,也能对资源进行更新,非常方便。不过 Kubernets 还提供了几个类似的命令,例如 kubectl create、kubectl replace、kubectl edit 和 kubectl patch。
为避免造成不必要的困扰,我们会尽量只使用 kubectl apply, 此命令已经能够应对超过 90% 的场景,事半功倍。
删除
kubectl delete -f nginx.yaml
删除Evicted状态的pod
kubectl get pods -n monitoring| grep Evicted | awk '{print $1}' | xargs kubectl delete pod -n monitoring
删除非Running状态的pod
kubectl get pods -n monitoring| grep -v Running | awk '{print $1}' | xargs kubectl delete pod -n monitoring
设置操作的默认命名空间
1kubectl config set-context --current --namespace=xxx
2# Validate it
3kubectl config view | grep namespace:
当创建一个Service 时 ,会自动DNS解析 <service-name>.<namespace-name>.svc.cluster.local
并非所有对象都在命名空间中
大多数 kubernetes 资源(例如 Pod、Service、副本控制器等)都位于某些命名空间中。但是命名空间资源本身并不在命名空间中。而且底层资源,例如 nodes 和持久化卷不属于任何命名空间。
查看哪些 Kubernetes 资源在命名空间中,哪些不在命名空间中:
1# In a namespace
2kubectl api-resources --namespaced=true
3
4# Not in a namespace
5kubectl api-resources --namespaced=false
查询label选择器
1kubectl get pods -l environment=production,tier=frontend
2
3kubectl get pods -l 'environment in (production),tier in (frontend)'
4
5kubectl get pods -l 'environment in (production, qa)'
6
7kubectl get pods -l 'environment,environment notin (frontend)' //exists 运算符限制不匹配
8
9
yml - selector
1selector:
2 matchLabels:
3 component: redis
4 matchExpressions:
5 - {key: tier, operator: In, values: [cache]}
6 - {key: environment, operator: NotIn, values: [dev]}
matchLabels 是由 {key,value} 对组成的映射。matchLabels 映射中的单个 {key,value } 等同于 matchExpressions 的元素,其 key字段为 “key”,operator 为 “In”,而 values 数组仅包含 “value”。matchExpressions 是 pod 选择器要求的列表。有效的运算符包括 In,NotIn,Exists 和 DoesNotExist。在 In 和 NotIn 的情况下,设置的值必须是非空的。来自 matchLabels 和 matchExpressions 的所有要求都是合在一起 – 它们必须都满足才能匹配。
字段选择器
metadata.name=my-service metadata.namespace!=default status.phase=Pending
1kubectl get pods --field-selector status.phase=Running -A
2kubectl get services --all-namespaces --field-selector metadata.namespace!=default
3
4kubectl get pods
5kubectl get pods --field-selector ""
6
7下面这个 kubectl 命令将筛选 status.phase 字段不等于 Running 同时 spec.restartPolicy 字段等于 Always 的所有 Pod:
8kubectl get pods --field-selector=status.phase!=Running,spec.restartPolicy=Always
9
10
11kubectl get statefulsets,services --all-namespaces --field-selector metadata.namespace!=default
推荐使用的标签
1apiVersion: apps/v1
2kind: StatefulSet
3metadata:
4 labels:
5 app.kubernetes.io/name: mysql // 应用程序的名称
6 app.kubernetes.io/instance: wordpress-abcxzy // 用于唯一确定应用实例的名称
7 app.kubernetes.io/version: "5.7.21" //应用程序的当前版本(例如,语义版本,修订版哈希等)
8 app.kubernetes.io/component: database //架构中的组件
9 app.kubernetes.io/part-of: wordpress // 此级别的更高级别应用程序的名称
10 app.kubernetes.io/managed-by: helm // 用于管理应用程序的工具
node 标记一个节点为不可调度的
1kubectl cordon $NODENAME
Patch修改
kubectl apply -f https://run.linkerd.io/emojivoto.yml
kubectl -n emojivoto patch -f https://run.linkerd.io/emojivoto.yml -p ' spec: template: metadata: annotations: linkerd.io/inject: enabled config.linkerd.io/trace-collector: oc-collector.tracing:55678 '
kubectl patch deployment.v1.apps/nginx-deployment -p '{"spec":{"progressDeadlineSeconds":600}}'
set resources
kubectl set resources deployment.v1.apps/nginx-deployment -c=nginx --limits=cpu=200m,memory=512Mi 更新其 resource 限制
set env
kubectl -n emojivoto set env --all deploy OC_AGENT_HOST=oc-collector.tracing:55678
rollout
status 查看状态 kubectl -n emojivoto rollout status deploy/web
pause 暂停 Deployment kubectl rollout pause deployment.v1.apps/nginx-deployment 继续(resume)该 Deployment kubectl rollout resume deployment.v1.apps/nginx-deployment
升级 kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.91 --record=true 查看历史 kubectl rollout history deployment/nginx-deployment kubectl rollout history deployment.v1.apps/nginx-deployment 检查 Deployment 的历史版本
查看 revision(版本)的详细信息 kubectl rollout history deployment.v1.apps/nginx-deployment --revision=2
回滚到前一个 revision(版本) kubectl rollout undo deployment.v1.apps/nginx-deployment
您也可以使用 --to-revision 选项回滚到前面的某一个指定版本 kubectl rollout undo deployment.v1.apps/nginx-deployment --to-revision=2
通过 Deployment 中 .spec.revisionHistoryLimit 字段,可指定为该 Deployment 保留多少个旧的 ReplicaSet。超出该数字的将被在后台进行垃圾回收。该字段的默认值是 10。如果该字段被设为 0,Kubernetes 将清理掉该 Deployment 的所有历史版本(revision),因此,您将无法对该 Deployment 执行回滚操作 kubectl rollout undo。
通过 Deployment 中 .spec.strategy 字段,可以指定使用 滚动更新 RollingUpdate 的部署策略还是使用 重新创建 Recreate 的部署策略,如果选择重新创建,Deployment将先删除原有副本集中的所有 Pod,然后再创建新的副本集和新的 Pod。如此,更新过程中将出现一段应用程序不可用的情况;
maxSurge = 2 最大超出副本数 可以设置数字或百分比 滚动更新过程中,可以超出期望副本数的最大值。 该取值可以是一个绝对值(例如:5),也可以是一个相对于期望副本数的百分比(例如:10%); 如果填写百分比,则以期望副本数乘以该百分比后向上取整的方式计算对应的绝对值; 当最大超出副本数 maxUnavailable 为 0 时,此数值不能为 0;默认值为 25%。 例如:假设此值被设定为 30%,当滚动更新开始时,新的副本集(ReplicaSet)可以立刻扩容, 但是旧 Pod 和新 Pod 的总数不超过 Deployment 期待副本数(spec.repilcas)的 130%。 一旦旧 Pod 被终止后,新的副本集可以进一步扩容,但是整个滚动更新过程中,新旧 Pod 的总 数不超过 Deployment 期待副本数(spec.repilcas)的 130%。
maxUnavailable =3 最大不可用副本数 可以设置数字或百分比 滚动更新过程中,不可用副本数的最大值。 该取值可以是一个绝对值(例如:5),也可以是一个相对于期望副本数的百分比(例如:10%); 如果填写百分比,则以期望副本数乘以该百分比后向下取整的方式计算对应的绝对值; 当最大超出副本数 maxSurge 为 0 时,此数值不能为 0;默认值为 25%; 例如:假设此值被设定为 30%,当滚动更新开始时,旧的副本集(ReplicaSet)可以缩容到期望 副本数的 70%;在新副本集扩容的过程中,一旦新的 Pod 已就绪,旧的副本集可以进一步缩容, 整个滚动更新过程中,确保新旧就绪副本数之和不低于期望副本数的 70%。
scale
kubectl scale deployment.v1.apps/nginx-deployment --replicas=10
自动伸缩,您就可以基于 CPU 的利用率在一个最大和最小的区间自动伸缩您的 Deployment: kubectl autoscale deployment.v1.apps/nginx-deployment --min=1 --max=15 --cpu-percent=80
port-forward
kubectl -n tracing port-forward svc/jaeger 16686 --address=0.0.0.0 & #kubectl -n emojivoto port-forward svc/web-svc 8080:80
查看具体容器
kubectl logs deployment/oc-collector -c oc-collector -n tracing