[TOC]
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#logs
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=...]
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的详细状态
参数 --previous 检索之前的容器日志
注意:
当前,如果有其他系统机制执行日志轮转,那么 kubectl logs 仅可查询到最新的日志内容。 比如,一个 10MB 大小的文件,通过logrotate 执行轮转后生成两个文件,一个 10MB 大小,一个为空,所以 kubectl logs 将返回空。
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
kubectl run nginx-deployment --image=nginx:1.7.9 --replicas=2
kubectl apply -f nginx.yaml
kubectl apply 不但能够创建 Kubernetes 资源,也能对资源进行更新,非常方便。不过 Kubernets 还提供了几个类似的命令,例如 kubectl create、kubectl replace、kubectl edit 和 kubectl patch。
为避免造成不必要的困扰,我们会尽量只使用 kubectl apply,
此命令已经能够应对超过 90% 的场景,事半功倍。
kubectl delete -f nginx.yaml
kubectl get pods -n monitoring| grep Evicted | awk '{print $1}' | xargs kubectl delete pod -n monitoring
kubectl get pods -n monitoring| grep -v Running | awk '{print $1}' | xargs kubectl delete pod -n monitoring
kubectl config set-context --current --namespace=xxx
# Validate it
kubectl config view | grep namespace:
当创建一个Service 时 ,会自动DNS解析 <service-name>.<namespace-name>.svc.cluster.local
大多数 kubernetes 资源(例如 Pod、Service、副本控制器等)都位于某些命名空间中。但是命名空间资源本身并不在命名空间中。而且底层资源,例如 nodes 和持久化卷不属于任何命名空间。
查看哪些 Kubernetes 资源在命名空间中,哪些不在命名空间中:
# In a namespace
kubectl api-resources --namespaced=true
# Not in a namespace
kubectl api-resources --namespaced=false
kubectl get pods -l environment=production,tier=frontend
kubectl get pods -l 'environment in (production),tier in (frontend)'
kubectl get pods -l 'environment in (production, qa)'
kubectl get pods -l 'environment,environment notin (frontend)' //exists 运算符限制不匹配
selector:
matchLabels:
component: redis
matchExpressions:
- {key: tier, operator: In, values: [cache]}
- {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
kubectl get pods --field-selector status.phase=Running -A
kubectl get services --all-namespaces --field-selector metadata.namespace!=default
kubectl get pods
kubectl get pods --field-selector ""
下面这个 kubectl 命令将筛选 status.phase 字段不等于 Running 同时 spec.restartPolicy 字段等于 Always 的所有 Pod:
kubectl get pods --field-selector=status.phase!=Running,spec.restartPolicy=Always
kubectl get statefulsets,services --all-namespaces --field-selector metadata.namespace!=default
apiVersion: apps/v1
kind: StatefulSet
metadata:
labels:
app.kubernetes.io/name: mysql // 应用程序的名称
app.kubernetes.io/instance: wordpress-abcxzy // 用于唯一确定应用实例的名称
app.kubernetes.io/version: "5.7.21" //应用程序的当前版本(例如,语义版本,修订版哈希等)
app.kubernetes.io/component: database //架构中的组件
app.kubernetes.io/part-of: wordpress // 此级别的更高级别应用程序的名称
app.kubernetes.io/managed-by: helm // 用于管理应用程序的工具
kubectl cordon $NODENAME
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}}'
kubectl set resources deployment.v1.apps/nginx-deployment -c=nginx --limits=cpu=200m,memory=512Mi 更新其 resource 限制
kubectl -n emojivoto set env --all deploy OC_AGENT_HOST=oc-collector.tracing:55678
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%。
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
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