k8s笔记5--k8s常见命令
k8s笔记5--k8s常见命令1 Basic Commands (Beginner)2 Basic Commands (Intermediate)3 Deploy Commands4 Cluster Management Commands5 Troubleshooting and Debugging Commands6 Advanced Commands7 Settings Commands8 O
k8s笔记5--k8s常见命令
kubectl 具备丰富的命令,其使用方法如下:
kubectl [flags] [options]
通过 "kubectl --help"来查找指定命令的更多信息;
通过 “kubectl options” 来查找所用命令行选项 (适用于所有命令).
此处根据 kubectl --help 将各类命令加以分类,后续将按照分类补充各命令的使用案例。
1 Basic Commands (Beginner)
- create
Create a resource from a file or from stdin.
create 直接创建一个资源,若资源已经存在,继续创建的时候会报错;
apply -f resource.yaml 会创建并更新该资源,若该资源存在则更新对应资源;1) 通过dry-run 的方式创建一个deployment 基本信息 kubectl create deployment my-web --image=nginx --dry-run=client -o yaml >my-web.yaml 通过 apply -f 创建实际的deployment kubectl apply -f my-web.yaml 2)创建ns kubectl create namespace test-online2 --dry-run=client -o yaml 等价于yaml: cat << EOF >test-online2.yaml apiVersion: v1 kind: Namespace metadata: name: test-online2 EOF kubectl apply -f test-online2.yaml 3) 创建一个 pod $ cat pod.yaml apiVersion: v1 kind: Pod metadata: name: web-pod namespace: test-online spec: containers: - image: nginx:latest name: web-pod ports: - name: web-port containerPort: 80 protocol: TCP kubectl apply -f pod.yaml
- expose
使用 replication controller, service, deployment 或者 pod 并暴露它作为一个新的 Kubernetes Service
此时通过nodeIP:NodePort可以正常访问my-web 中的5000端口:$ kubectl expose deployment my-web --port=5000 --target-port=5000 --type=NodePort $ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE my-web NodePort 10.1.175.63 <none> 5000:32020/TCP 4m5s
- run
在集群中运行一个指定的镜像在当前命名空间中创建一个pod,容器端口为80 kubectl run nginx2 --image=nginx:latest --port=80 等价: apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: run: nginx2 name: nginx2 spec: containers: - image: nginx:latest name: nginx2 ports: - containerPort: 80 resources: {} dnsPolicy: ClusterFirst restartPolicy: Always status: {}
- set
为 objects 设置一个指定的特征1) 设置 my-web 中的容器nginx的镜像为nginx:latest kubectl set image deployment/my-web nginx=nginx:latest 2) 设置 my-web 中的环境变量 env_dir为/local kubectl set env deployment/my-web env_dir=/local 3) 查看所有pod的环境变量 kubectl set env pods --all --list
2 Basic Commands (Intermediate)
- explain
查看资源的文档1)查看pod 的所有子字段的文档 kubectl explain pods 2)查看pod的spec.containers 的所有子字段文档 kubectl explain pods.spec.containers
- get
显示一个或更多 resource-o wide 可以查看扩展信息 1) 获取 pod 信息 $ kubectl get pods -n=test-online 等价 kubectl get pods --namespace=test-online NAME READY STATUS RESTARTS AGE web-96d5df5c8-4q4vx 1/1 Running 0 62m $ kubectl get pods --namespace=test-online -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES web-96d5df5c8-4q4vx 1/1 Running 0 63m 10.244.1.15 test02.i.xxx.net <none> <none> jsonpath 可以查看pod信息指定key的数据,若直接为"{}", 则返回一个未格式化的大json字符串 $ kubectl get pod web-96d5df5c8-4q4vx -o jsonpath="{.metadata.labels}" {"app":"web","pod-template-hash":"96d5df5c8"} 2) 查看 configmap 信息 $ kubectl get configmap -n=kube-public NAME DATA AGE cluster-info 1 3d23h 3)查看node信息,并显示label kubectl get node -A --show-labels 4)查看ns信息 kubectl get ns(或者 namespaces)
- edit
在服务器上编辑一个资源1) 编辑 deployment my-web kubectl edit deployment/my-web 2) 编辑 pod nginx2 kubectl edit pod nginx2 [-o json 以json格式编辑]
- delete
Delete resources by filenames, stdin, resources and names, or by resources and label selector1) 删除pod nginx2 kubectl delete pod nginx2 2) 删除ns test-online2 kubectl delete namespace test-online2 或者 kubectl delete -f test-online2.yaml(1.1 创建ns中的yaml)
3 Deploy Commands
- rollout
Manage the rollout of a resource1) 回滚到前一个版本 kubectl rollout undo deployment/my-web 2)查看回滚历史记录 kubectl rollout history deployment/my-web
- scale
Set a new size for a Deployment, ReplicaSet or Replication Controllerkubectl scale --replicas=2 deployment/my-web
- autoscale
自动调整一个 Deployment, ReplicaSet, 或者 ReplicationController 的副本数量
使用autoscale后发现报错:failed to get cpu utilization: missing request for cpu,对应上述TARGETS中的unknown;kubectl autoscale deployment my-web --min=2 --max=3 此时可以通过hpa 查看pod数量,若再次scale为1,则过一会儿会自动伸缩为2 $ kubectl get hpa NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE my-web Deployment/my-web <unknown>/80% 2 3 2 111s 若想取消自动伸缩,则直接delete hpa 即可 : kubectl delete hpa my-we
错误原因:创建deployment时候没有设置cpu request信息;
设置cpu 和 memory 后,再配置hpa: kubectl autoscale deployment my-web --cpu-percent=15 --min=2 --max=3此时设置 spec.containers.resources 为如下内容即可: resources: requests: cpu: "50m" memory: "50Mi" 注意:cpu 带单位的时候必须带双引号,内存有单位必须带双引号;
Kubernetes:HPA 详解-基于 CPU、内存和自定义指标自动扩缩容$ kubectl get hpa NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE my-web Deployment/my-web 1%/15% 2 3 2 88s 此时在另外一个pod里面持续访问ubuntu-flask服务,就会发现cpu使用率在逐渐增加,当大于15%的时候就会开始扩容了;当请求访问完成后cpu降低了,过一段时间又缩容为2(约5min后缩容为2,cpu降低后不会立马缩容回来,主要为了防止流量又立刻突增); for i in {1..1000};do wget http://10.1.175.63:5000/hello ;sleep 0.1;done
4 Cluster Management Commands
- certificate
修改 certificate 资源. - cluster-info
显示集群信息1) 查看集群基础信息,包括master 和kubedns $ kubectl cluster-info Kubernetes master is running at https://10.120.75.102:6443 KubeDNS is running at https://10.120.75.102:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy 2) 诊断集群 kubectl cluster-info dump 输出很多集群诊断信息
- top
Display Resource (CPU/Memory/Storage) usage.kubectl top node [node-name 查看指定node的cpu mem信息] # (不指定node-name)显示所有节点cpu 内存使用情况 kubectl top pod -A # 显示所有pod 的cpu 和 内存使用情况
- cordon
标记 node 为 unschedulablekubectl cordon node-name 标记不可调度后,get nodes 发现 status 变为 Ready,SchedulingDisabled
- uncordon
标记 node 为 schedulablekubectl uncordon node-name
- drain
Drain node in preparation for maintenance该操作为驱逐或者删除node上的pod,常见常见为磁盘爆了会出现pod被驱逐现象 $ kubectl drain node-name
- taint
更新一个或者多个 node 上的 taints1) 将node01 设置污点,使其不可调度(若已有disktype标签,则会更新value为ssd,没有则添加标签) kubectl taint node node01 disktype=ssd:NoSchedule 默认情况下,kubeadm 中的master就被设置为 node-role.kubernetes.io/master:NoSchedule ,因此一般的实例 master 是无法被调度到master上的; 若通过tant ndoe master-name node-role.kubernetes.io/master:NoSchedule- 去掉污点,则master也可以被调度 2)去掉taints,恢复node01位可调度 kubectl taint node node01 disktype:NoSchedule-
5 Troubleshooting and Debugging Commands
-
describe
显示一个指定 resource 或者 group 的 resources 详情1) 查看指定ns下的pod详细信息,当pod无法正常拉起的时候可以通过这种方式排错 kubectl -n test-online describe po my-web-7d99c588c5-tp5z5 2) 查看 node详细信息 kubectl describe nodes node_name 该命令会返回 Name,Roles,Labels,Annotations,Conditions,Capacity(cpu,内存,存储)、Events(可以用于排错)等重要信息;
-
logs
输出容器在 pod 中的日志1) 输出指定pod 的日志 kubectl logs web-96d5df5c8-mj4r6 2)输出指定pod的最后2行日志 kubectl --tail=2 logs web-96d5df5c8-mj4r6 3)输出最近10小时的日志 kubectl --since=10h logs web-96d5df5c8-mj4r6
-
attach
Attach 到一个运行中的 container -
exec
在一个 container 中执行一个命令;
当前同时支持 pod cmd 和 pod -- cmd模式,后续会抛弃pod cmd 模式;1) 单个容器 $ kubectl exec web-96d5df5c8-4q4vx -- hostname web-96d5df5c8-4q4vx 2)多个容器, 通过 -c container_name 来选择接入哪个容器 kubectl -n test-online exec my-web-698c8ccc85-qxh9l -c flask-app -- bash
-
port-forward
Forward one or more local ports to a pod -
proxy
运行一个 proxy 到 Kubernetes API server -
cp
复制 files 和 directories 到 containers 和从容器中复制 files 和 directories.1) 拷贝文件a.txt 到指定ns的 pod web-96d5df5c8-mj4r6 中 $ kubectl cp a.txt -n test-online web-96d5df5c8-mj4r6:/ $ kubectl exec -n test-online web-96d5df5c8-mj4r6 -- cat /a.txt This is a.txt 2)从指定 ns 的 pod web-96d5df5c8-mj4r6 中拷贝文件到本地 拷贝文件到本地 a.txt, 注意此处 :a.txt 不能写为 :/a.txt, 因为当前不支持绝对路径,后面本地不可以写为 具体路径,只需要写一个名称即可 kubectl cp test-online/web-96d5df5c8-mj4r6:a.txt a.txt 拷贝pod 中文件加 dir为本地文件夹dir: kubectl cp test-online/web-96d5df5c8-mj4r6:dir dir 3) 通过-c指定pod中某个容器 $ kubectl -n xxx-iserving cp videomocap-service-5f8864d648-rgpj6:output/logs logs -c videomocap-service 将命令将该服务videomocap-service容器workdir的output/logs 拷贝到当前logs目录。
注意:
k8s 中的cp 暂时不支持绝对路径(pod_name:/a.txt 会报错),默认路径为work dir的路径;
若没有通过-c container_name 来指定容器,则默认将 文件拷贝到第一个容器中; -
auth
Inspect authorization
6 Advanced Commands
- diff
Diff live version against would-be applied version - apply
通过文件名或标准输入流(stdin)对资源进行配置1) 创建deployment|pod|service 等资源 将资源配置详信息写到 yaml中,通过 -f 指定文件即可创建相关资源; kubectl apply -f dployment-my-web.yaml
- patch
使用 strategic merge patch 更新一个资源的 field(s) - replace
通过 filename 或者 stdin替换一个资源 - wait
Experimental: Wait for a specific condition on one or many
resources. - convert
在不同的 API versions 转换配置文件 - kustomize
Build a kustomization target from a directory or a remote url.
7 Settings Commands
- label
更新在这个资源上的 labels默认情况下,master节点角色为master,其它节点角色为none,可以通过如下方式将其它节点标记为node1角色 $ kubectl label nodes node_name node-role.kubernetes.io/node1= 删除标(将最后的=改为-即可) $ kubectl label nodes node_name node-role.kubernetes.io/node1-
- annotate
更新一个资源的注解 - completion
Output shell completion code for the specified shell (bash or zsh)linux: source <(kubectl completion bash) mac: source <(kubectl completion zsh)
8 Other Commands
- alpha
Commands for features in alpha - api-resources
Print the supported API resources on the server - api-versions
Print the supported API versions on the server, in the form of “group/version” - config
修改 kubeconfig 文件修改默认 ns 为test-online(k8s 默认的为default ns) kubectl config set-context $(kubectl config current-context) --namespace=test-online
- plugin
Provides utilities for interacting with plugins. - version
输出 client 和 server 的版本信息 - 设置kubectl 自动补全
apt-get install bash-completion source /usr/share/bash-completion/bash_completion source <(kubectl completion bash) 注意:<( 之间不能有空格,否则会报错
9 说明
更多推荐
所有评论(0)