# kubectl补全
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
# oc补全
source /usr/share/bash-completion/bash_completion
source <(oc completion bash)
echo "source <(oc completion bash)" >> ~/.bashrc
一 日常运维命令
# kubectl 生成yaml 客户端 模板 棒
kubectl create deployment dep-busybox --image=busybox --dry-run=client --output=yaml
# 资源导出yaml
kubectl -n monitoring get alertmanager -oyaml > alertmanager.yaml
二 二进制安装
# 这里的工具很全 啥都有
# wget https://dl.k8s.io/v1.23.2/kubernetes-server-linux-amd64.tar.gz # 1.23.2 换成自己的版本号
# 这个是单独的kubectl工具下载 1.23.2 是版本号
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.23.2/bin/linux/amd64/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
kubectl version --client
kubectl config view
kubectl 是 Kubernetes 的命令行工具(CLI),是 Kubernetes 用户和管理员必备的管理工具。
kubectl 提供了大量的子命令,方便管理 Kubernetes 集群中的各种功能。这里不再罗列各种子命令的格式,而是介绍下如何查询命令的帮助
kubectl -h 查看子命令列表
kubectl options 查看全局选项
kubectl <command> --help 查看子命令的帮助
kubectl [command] [PARAMS] -o=<format> 设置输出格式(如 json、yaml、jsonpath 等)
kubectl explain [RESOURCE] 查看资源的定义
配置
使用 kubectl 的第一步是配置 Kubernetes 集群以及认证方式,包括cluster 信息:Kubernetes server 地址
用户信息:用户名、密码或密钥
Context:cluster、用户信息以及 Namespace 的组合
# 三 常用实用复杂查询 和 管理命令
# ————————————————
原文链接:https://blog.csdn.net/as_dingjia/article/details/120364679
推荐文章2:Kubectl常用命令详解_kubectl命令_帅大大的架构之路的博客-CSDN博客
kubectl get pods --all-namespaces -o custom-columns=NS:.metadata.namespace,NAME:.metadata.name,"CPU(requests)":.spec.containers[*].resources.requests.cpu,"CPU(limits)":.spec.containers[*].resources.limits.cpu,"MEMORY(requests)":.spec.containers[*].resources.requests.memory,"MEMORY(limits)":.spec.containers[*].resources.limits.memory
# 管理命令
kubectl config set-credentials myself --username=admin --password=secret
kubectl config set-cluster local-server --server=http://localhost:8080
kubectl config set-context default-context --cluster=local-server --user=myself --namespace=default
kubectl config use-context default-context
kubectl config view
# 日常运维命令
创建:kubectl run <name> --image=<image> 或者 kubectl create -f manifest.yaml
查询:kubectl get <resource>
更新 kubectl set 或者 kubectl patch
删除:kubectl delete <resource> <name> 或者 kubectl delete -f manifest.yaml
查询 Pod IP:kubectl get pod <pod-name> -o jsonpath='{.status.podIP}'
容器内执行命令:kubectl exec -ti <pod-name> sh
容器日志:kubectl logs [-f] <pod-name>
导出服务:kubectl expose deploy <name> --port=80
Base64 解码:
kubectl get secret SECRET -o go-template='{{ .data.KEY | base64decode }}'
# 查看所有 pod 列表, -n 后跟 namespace, 查看指定的命名空间
kubectl get pod
kubectl get pod -n kube
kubectl get pod -o wide
# 查看 RC 和 service 列表, -o wide 查看详细信息
kubectl get rc,svc
kubectl get pod,svc -o wide
kubectl get pod <pod-name> -o yaml
# 显示 Node 的详细信息
kubectl describe node 192.168.0.212
# 显示 Pod 的详细信息, 特别是查看 pod 无法创建的时候的日志
kubectl describe pod <pod-name>
eg:
kubectl describe pod redis-master-tqds9
# 根据 yaml 创建资源, apply 可以重复执行,create 不行
kubectl create -f pod.yaml
kubectl apply -f pod.yaml
# 基于 pod.yaml 定义的名称删除 pod
kubectl delete -f pod.yaml
# 删除所有包含某个 label 的pod 和 service
kubectl delete pod,svc -l name=<label-name>
# 删除所有 Pod
kubectl delete pod --all
# 查看 endpoint 列表
kubectl get endpoints
# 执行 pod 的 date 命令
kubectl exec <pod-name> -- date
kubectl exec <pod-name> -- bash
kubectl exec <pod-name> -- ping 10.24.51.9
# 通过bash获得 pod 中某个容器的TTY,相当于登录容器
kubectl exec -it <pod-name> -c <container-name> -- bash
eg:
kubectl exec -it redis-master-cln81 -- bash
# 查看容器的日志
kubectl logs <pod-name>
kubectl logs -f <pod-name> # 实时查看日志
kubectl log <pod-name> -c <container_name> # 若 pod 只有一个容器,可以不加 -c
kubectl logs -l app=frontend # 返回所有标记为 app=frontend 的 pod 的合并日志。
# 查看注释
kubectl explain pod
kubectl explain pod.apiVersion
# 查看节点 labels
kubectl get node --show-labels
# 重启 pod
kubectl get pod <POD名称> -n <NAMESPACE名称> -o yaml | kubectl replace --force -f -
# 修改网络类型
kubectl patch service istio-ingressgateway -n istio-system -p '{"spec":{"type":"NodePort"}}'
# 伸缩 pod 副本
# 可用于将Deployment及其Pod缩小为零个副本,实际上杀死了所有副本。当您将其缩放回1/1时,将创建一个新的Pod,重新启动您的应用程序。
kubectl scale deploy/nginx-1 --replicas=0
kubectl scale deploy/nginx-1 --replicas=1
# 查看前一个 pod 的日志,logs -p 选项
kubectl logs --tail 100 -p user-klvchen-v1.0-6f67dcc46b-5b4qb > pre.log
#删除一个node节点 kubeadm-4.novalocal
kubectl drain kubeadm-4.novalocal --delete-local-data --force --ignore-daemonsets
kubectl delete node kubeadm-4.novalocal
# 命令补全
# 命令补全
yum install -y bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
# hi-ins笔记仓库 k8s常用命令-应该更全
# 一 基础命令
# 查看帮助
kubectl explain pod
kubectl explain pod.apiVersion
# 查看所有 pod 列表, -n 后跟 namespace, 查看指定的命名空间 -o wide是详情
kubectl get pod
kubectl get pod -n kube
kubectl get pod -o wide
# 查看 RC 和 service 列表, -o wide 查看详细信息
kubectl get rc,svc
kubectl get pod,svc -o wide
kubectl get pod <pod-name> -o yaml
# 显示 Pod 的详细信息, 特别是查看 pod 无法创建的时候的日志
kubectl describe pod <pod-name>
eg:
kubectl describe pod redis-master-tqds9
# 根据 yaml 创建资源, apply 可以重复执行,create 不行
kubectl create -f pod.yaml
kubectl apply -f pod.yaml
# 基于 pod.yaml 定义的名称删除 pod
kubectl delete -f pod.yaml
# 删除所有包含某个 label 的pod 和 service
kubectl delete pod,svc -l name=<label-name>
# 删除所有 Pod
kubectl delete pod --all
# 查看 endpoint 列表
kubectl get endpoints
# 执行 pod 的 date 命令
kubectl exec <pod-name> -- date
kubectl exec <pod-name> -- bash
kubectl exec <pod-name> -- ping 10.24.51.9
# 通过bash获得 pod 中某个容器的TTY,相当于登录容器
kubectl exec -it <pod-name> -c <container-name> -- bash
eg:
kubectl exec -it redis-master-cln81 -- bash
# 查看容器的日志
kubectl logs <pod-name>
kubectl logs -f <pod-name> # 实时查看日志
kubectl log <pod-name> -c <container_name> # 若 pod 只有一个容器,可以不加 -c
kubectl logs -l app=frontend # 返回所有标记为 app=frontend 的 pod 的合并日志。
# 重启 pod
kubectl get pod <POD名称> -n <NAMESPACE名称> -o yaml | kubectl replace --force -f -
# 修改网络类型
kubectl patch service istio-ingressgateway -n istio-system -p '{"spec":{"type":"NodePort"}}'
# 伸缩 pod 副本
# 可用于将Deployment及其Pod缩小为零个副本,实际上杀死了所有副本。当您将其缩放回1/1时,将创建一个新的Pod,重新启动您的应用程序。
kubectl scale deploy/nginx-1 --replicas=0
kubectl scale deploy/nginx-1 --replicas=1
# 快速测试
kubectl create deployment nginx-demo --image=nginx
kubectl expose deployment nginx-demo --port=80 --type=NodePort
kubectl get all # 默认namespace -n default
kubectl scale deployment nginx-demo --replicas=2
# 查看前一个 pod 的日志,logs -p 选项
kubectl logs --tail 100 -p user-klvchen-v1.0-6f67dcc46b-5b4qb > pre.log
# 1.pod若处于运行状态,则通过kubectl logs 即可
# 查看指定pod的日志
kubectl logs <pod_name>
kubectl logs -f <pod_name> #类似tail -f的方式查看(tail -f 实时查看日志文件 tail -f 日志文件log)
# 查看指定pod中指定容器的日志
kubectl logs <pod_name> -c <container_name>
kubectl logs pod_name -c container_name -n namespace (一次性查看)
kubectl logs -f <pod_name> -n namespace (tail -f方式实时查看)
# 2.若pod处于init状态,则需要通过docker ps查看
#获取对应的pod name
kubectl get pods -n namespace -o wide (STATUS是init的pod_name)
#通过docker ps 获取该pod的中的CONTAINER ID
docker ps | grep pod_name
#通过docker log获取对应的日志信息
docker logs CONTAINER_ID
# 显示 Node 的详细信息
kubectl describe node 192.168.0.212
# 查看node节点 labels
kubectl get node --show-labels
#删除一个node节点 kubeadm-4.novalocal
kubectl drain kubeadm-4.novalocal --delete-local-data --force --ignore-daemonsets
kubectl delete node kubeadm-4.novalocal
# 二 控制器相关
# deployment相关命令
kubectl set image deploy/nginx nginx=nginx:1.7.9 --record
kubectl set image deploy/nginx nginx=nginx --record
kubectl rollout status deploy nginx #查看升级状态
kubectl rollout pause deployment nginx #升级暂停
kubectl rollout resume deployment nginx #恢复升级
kubectl describe deploy nginx #查看升级详情
kubectl rollout history deploy/nginx #查看升级历史
# deployment.extensions/nginx
# REVISION CHANGE-CAUSE
kubectl set image deploy/nginx nginx=nginx:1.7.9 --record=true
kubectl set image deploy/nginx nginx=nginx --record=true
kubectl rollout history deployment nginx --revision=5
kubectl rollout undo deployment/nginx --to-revision=4 #回滚到指定版本
kubectl rollout undo deployment nginx-deploy #回滚到前一个版本