k8s kubectl命令

k8s kubectl命令

常用别名

cat >> ~/.bash_profile <<EOF
export NAMESPACE=default
alias kgn='kubectl get node'
alias kgns='rancher kubectl get node --show-labels'
alias kdp='kubectl describe pod -n\$NAMESPACE'
alias kgp='kubectl get pod -n\$NAMESPACE'
alias kgpo='kubectl get pod -o wide -n\$NAMESPACE'
alias kgs='kubectl get svc -n\$NAMESPACE'
alias kgd='kubectl get deployment -n\$NAMESPACE'
alias kaf='kubectl apply -f'
alias kdf='kubectl delete -f'
alias ko='kubectl exec -it -n\$NAMESPACE'
alias kdd='kubectl describe deploy -n\$NAMESPACE'
alias kde='kubectl delete pod -n\$NAMESPACE'
alias kdef='kubectl delete pod  --force --grace-period=0 -n\$NAMESPACE'
alias kdn='kubectl describe node'
alias klf='kubectl logs -f -n\$NAMESPACE'
alias ked='kubectl edit deploy -n\$NAMESPACE'
alias kgc='rancher kubectl get cm'
EOF
source ~/.bash_profile

基本命令

创建或更新资源对象

kubectl create -f my-service.yaml -f my-rc.yaml		#根据YAML配置文件一次性创建Service和RC
kubectl apply -f app.yaml		#如果存在则更新,不存在则创建

查看资源对象

kubectl get node						#查看Node状态
kubectl get pods pod1 pod2				#获取多个pod的信息
kubectl get pod <pod-name> -o wide		#显示Pod的更多信息
kubectl get pod <pod-name> -o yaml		#以YAML格式显示Pod的详细信息
kubectl get pod -l app=web				#查看标签为app=web的Pod
kubectl get pod -o name					#获取Pod的名字
kubectl get rc,service					#查看RC和Service列表
kubectl get endpoints					#查看Endpoint列表
kubectl get pod -n kube-system -w		#动态查看pod
kubectl get cs							#查看Master组件状态
kubectl api-resources					#列出K8s所有资源
kubectl get all -n default				#查看default命名空间下面的所有资源
kubectl cluster-info					#查看集群接口信息
kubectl get apiservice					#查看apiserver聚合层注册信息
kubectl api-versions					#查看API的版本
kubectl logs -f <Pod名称> -c <容器名称>	#如果Pod中有多个容器,需用-c指定

描述资源对象

kubectl describe pods <rc-name>			#显示由RC管理的Pod的信息
kubectl describe node <node_name>		#查看某个node的详细信息

删除资源对象

kubectl delete -f pod.yaml								#根据pod.yaml定义的名称删除Pod
kubectl delete pods,services -l name=<label-name>		#删除所有包含某个Label的Pod和Service
kubectl delete pods --all								#删除所有Pod

执行容器的命令

kubectl exec <pod-name> date		#执行Pod的date命令,默认使用Pod中的第一个容器执行
kubectl exec <pod-name> -c <container-name> date		#指定Pod中的某个容器执行date命令
kubectl exec -it <pod-name> -c <container-name> /bin/bash		#通过bash获得Pod中某个容器的TTY,相当于登陆容器

查看容器的日志

kubectl logs <pod-name>
kubectl logs -f <pod-name> -c <container-name>		#跟踪查看容器的日志,相当于tail -f命令的结果

kubectl自动补齐

yum -y install bash-completion
bash
source <(kubectl completion bash)

查看k8s版本

kubectl version

Pod操作

生成一个外部访问的端口

kubectl expose deployment web --port=80 --type=NodePort		

强制删除Pod

新Pod已经Running,但上一个Pod一直处于Terminal状态

kubectl delete pod Podname --force --grace-period=0

添加taint,避免Pod 调度到特定Node 上

kubectl taint node knative-node1 foo=bar:NoSchedule

删除taint

kubectl taint node knative-node1 foo=bar:NoSchedule-

将Pod的开放端口映射到本地

把Pod的80端口映射到本地的8888端口

kubectl port-forward --address 0.0.0.0 <pod-name> 8888:80

在Pod和本地之间复制文件

kubectl cp <pod-name>:/etc/hosts /tmp
kubectl cp <pod-name>:/tmp/java.out /root/java.out -c 容器名 -n <namespace>	#必须指定拷贝到本地的文件名,如/root/java.out
kubectl cp /tmp/dir <pod-name>:/tmp/ -c 容器名 -n <namespace>	#拷贝目录为增量覆盖,同名的文件覆盖

启动一个测试DNS的Pod

kubectl run dns-test -it --rm --image=busybox:1.28.4 -- sh

查看pod标签

kubectl get pods --show-labels

查看Pod支持的字段

kubectl explain pods.spec.containers

列出指定标签的Pod名称

kubectl get pod -l app=web -o name

查看指定标签使用cpu最高的pod

kubectl top pods -l app=web --sort-by="cpu"

RC操作

动态缩放

kubectl scale rc myweb --replicas=3

Deployment

创建一个Deployment

kubectl create deployment web --image=tomcat-app:v1

导出一个标准Deployment的yaml文件

需要删除里面的creationTimestamp: null和status: {}

kubectl create deployment web --image=nginx --dry-run=client -o yaml > deployment.template

对现有资源进行导出,内容比较多

kubectl get deployment web -o yaml > deployment.template

查看Deployment支持的字段

kubectl explain deployment

滚动升级

kubectl 更新容器镜像的几种方式

web为deployment的名字,tomcat-app为容器的名字,tomcat:latest为镜像,--record记录操作日志,方便回滚

kubectl set image deployment web tomcat-app=tomcat:latest --record

查看升级状态

kubectl rollout status deployment web

滚动升级时,如果镜像版本一致,不会触发pod重建,容器更新

kubectl rollout restart deployment  deploy名字	-n namespace	#此命令可以让容器重新部署

版本回滚

查看Deployment部署过的版本

kubectl rollout history deployment web

回滚到上一个版本

kubectl rollout undo deployment web

回滚到指定版本

kubectl rollout undo deployment web --to-revision=2

弹性伸缩

至少有3个Pod,当该Deployment下的所有Pod的CPU使用率之和达到80%时会扩容Pod到4~10个之间

kubectl autoscale deployment web --min=3 --max=10 --cpu-percent=80

上述命令会创建一个HPA

kubectl get hpa

Service

发布一个服务

kubectl expose deployment web --port=80 --target-port=8080 --type=NodePort
--port=80						#该Service监听的端口,可以通过Cluster IP+该端口访问
--target-port=8080				#业务容器监听的端口
--type=NodePort					#采用NodePort类型,系统会随机分配一个端口供外部访问

集群内部访问,通过Cluster IP:80端口

curl 10.1.170.105

集群外部访问,通过任意Node IP:32072端口

导出一个标准Service的yaml文件

需要删除里面的creationTimestamp: null、status: 和loadBalancer: {}

kubectl expose deployment web --port=80 --target-port=8080 --type=NodePort --dry-run=client -o yaml > service.template

命名空间

创建名字为cka的命名空间

kubectl create ns cka

给命名空间设置标签

kubectl label namespaces default testing=true
kubectl label namespaces default testing-				#删除标签

Node

给节点加污点,不往上面调度Pod

kubectl cordon 节点名

给节点打标签

kubectl label node 节点名 nodeType=dev
kubectl label node 节点名 nodeType-		#删除标签

查看node污点

kubectl get nodes k8s-master -o go-template={{.spec.taints}}

PV

按容量进行排序

kubectl get pv --sort-by={.spec.capacity.storage}

实战

设置不可调度

kubectl cordon 节点名

驱逐pod

kubectl drain 节点名 --delete-local-data  --ignore-daemonsets

检查pod是否全部驱逐成功

kubectl describe nodes 节点名

摘除集群

kubectl delete nodes 节点名

实例k8s kubectl

获取所有命名空间下的Deployment

rancher kubectl  get deployment --all-namespaces  #或
rancher kubectl  get deployment -A
rancher kubectl  get deployment -n ecs-dev #获取ecs-dev命名空间下的deployment

获取所有命名空间下的Ingress

rancher kubectl  get ingress --all-namespaces  #或
rancher kubectl  get ingress -A
rancher kubectl  get ingress -n ecs-dev #获取ecs-dev命名空间下的ingress

获取所有命名空间下的Service

rancher kubectl  get services --all-namespaces  #或
rancher kubectl  get services -A
rancher kubectl  get services -n ecs-dev #获取ecs-dev命名空间下的services

获取所有命名空间下的Pods

rancher kubectl  get pods --all-namespaces  #或
rancher kubectl  get pods -A
rancher kubectl  get pods -n ecs-dev #获取ecs-dev命名空间下的pods 

获取到pod的yaml/json

rancher kubectl  get pod myapp -o yaml/json

获取到pod的标签label

rancher kubectl get pod myapp -o wide -l key1=value1

查看pod日志

rancher kubectl logs pod1

k8s kubectl describe

通常用这个看pod一直反复重启的原因

rancher kubectl describe pod myapp

基于yaml创建对象

rancher kubectl create -f myapp.yaml

k8s kubectl explain

查看yaml文件下的资源对象详细信息

rancher kubectl explain pod
rancher kubectl explain pod.kind

查看一个Pod下一个容器的 /etc/hosts

rancher kubectl exec -it podName  -c containerName -- cat /etc/hosts

k8s kubectl delete

谨慎使用,下面两条命令是删除所有的deployment和svc

kubectl delete deployment --all
kubectl delete svc --all #k8s有默认的svc,如果执行,k8s也瘫痪了
posted @ 2022-04-11 17:19  liwenchao1995  阅读(109)  评论(0编辑  收藏  举报