侧边栏壁纸
博主头像
码途 博主等级

行动起来,活在当下

  • 累计撰写 72 篇文章
  • 累计创建 0 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录
k8s

kubectl - 常用命令

htmltoo
2023-12-13 / 0 评论 / 0 点赞 / 6 阅读 / 0 字

1-常用别名

cat >> ~/.bash_profile <<EOF
export NAMESPACE=default
alias kgn='kubectl get node'
alias kgns='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='kubectl get cm'
EOF
source ~/.bash_profile

2-基本命令

2.1.创建或更新资源对象

kubectl create -f my-service.yaml -f my-rc.yaml #根据YAML配置文件一次性创建Service和RC

kubectl apply -f app.yaml #如果存在则更新,不存在则创建

2.2.查看资源对象

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指定

2.3-描述资源对象

kubectl describe pods <rc-name> #显示由RC管理的Pod的信息

kubectl describe node <node_name> #查看某个node的详细信息

2.4-删除资源对象

kubectl delete -f pod.yaml #根据pod.yaml定义的名称删除Pod

kubectl delete pods,services -l name=<label-name> #删除所有包含某个Label的Pod和Service

kubectl delete pods --all #删除所有Pod

2.5-执行容器的命令

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,相当于登陆容器

2.6-查看容器的日志

kubectl logs <pod-name>

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

2.7-kubectl自动补齐

yum -y install bash-completion

bash

source <(kubectl completion bash)

3-Pod操作

3.1. 生成一个外部访问的端口

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

3.2. 强制删除Pod

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

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

-删除dev命名空间下所有处于Terminal状态的Pod

kubectl get pod -n dev | awk '{print $1}' | xargs -i kubectl delete pod {} --force --grace-period=0 -n dev

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

kubectl taint node knative-node1 foo=bar:NoSchedule

#删除taint

kubectl taint node knative-node1 foo:NoSchedule-

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

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

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

3.5-在Pod和本地之间复制文件

kubectl cp <pod-name>:/etc/hosts /tmp

-必须指定拷贝到本地的文件名,如/root/java.out

kubectl cp <pod-name>:/tmp/java.out /root/java.out -c 容器名 -n <namespace>

-拷贝目录为增量覆盖,同名的文件覆盖

kubectl cp /tmp/dir <pod-name>:/tmp/ -c 容器名 -n <namespace>

3.6-启动一个测试DNS的Pod

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

3.7-查看pod标签

kubectl get pods --show-labels

3.8-查看Pod支持的字段

kubectl explain pods.spec.containers

3.9-列出指定标签的Pod名称

kubectl get pod -l app=web -o name

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

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

4-RC操作

4.1-动态缩放

kubectl scale rc myweb --replicas=3

5-Deployment

5.1-创建一个Deployment

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

5.2-导出一个标准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

5.3-查看Deployment支持的字段

kubectl explain deployment

5.4-滚动升级

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 deploy deploy名字

5.5.版本回滚

-查看Deployment部署过的版本

kubectl rollout history deployment web

-回滚到上一个版本

kubectl rollout undo deployment web

-回滚到指定版本

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

5.6.弹性伸缩

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

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

-上述命令会创建一个HPA

kubectl get hpa

6-Service

6.1-发布一个服务

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端口

6.2.导出一个标准Service的yaml文件

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

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

7-命名空间

7.1-创建名字为cka的命名空间

kubectl create ns cka

7.2-给命名空间设置标签

kubectl label namespaces default testing=true

kubectl label namespaces default testing- #删除标签

8-Node

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

kubectl cordon 节点名

8.2-给节点打标签

kubectl label node 节点名 nodeType=dev

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

8.3-查看node污点

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

9-PV

9.1-按容量进行排序

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

10-实战

删除k8s节点

10.1-设置不可调度

kubectl cordon 节点名

10.2-驱逐pod

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

10.3-检查pod是否全部驱逐成功

kubectl describe nodes 节点名

10.4-摘除集群

kubectl delete nodes 节点名

11-常用命令2

11.1-强制删除pod

kubectl delete pod nginx-demo2-7895bcf884-7rxhl -n tanxing --force --grace-period=0

11.2-查看系统组件的健康状态

kubectl get cs

11.3-查看在hpc名称空间下的pod

kubectl top pod -n hpc

11.4-查看名称空间在default下的pod

kubectl top pod

11.5-查看label为nginx的pod的使用资源使用情况

kubectl top pods -l app=nginx --sort-by=memory

11.6-查看节点资源的使用情况

kubectl top node

11.7-查看主要组件状态

kubectl cluster-info

11.8-查看所有的命名空间下的所有pod

kubectl get pod --all-namespaces

11.9-查看所有的命名空间下的所有service,epoint

kubectl get ep,svc --all-namespaces

11.10-查询Deployment和StatfulSet资源

-查询demo命名空间下的所有deployment和statfulset

kubectl get.deploy,sts -n demo

11.11-将查询到的资源输出到一个yaml文件中

-将demo命名空间下的资源类型是deploy 名称为nginx的资源配置输出到yaml文件中

kubectl get.deploy nginx -n demo -o yaml

11.12-查询所有的命名空间

kubectl get ns

11.13-查询configMap和Secret

-查询命名空间为demo的configMap和Secret

kubectl get cm,secret -n demo

11.14-查询pod在哪个节点上

kubectl get pod -n demo -o wide

11.15-查询pod关联的标签

kubectl get pod -n demo --show-labels -o wide

11.16-查询node信息

kubectl get node

0

评论区