您当前的位置:首页 > 学海无涯 > 心得笔记网站首页心得笔记
K8S常用命令
发布时间:2019-05-24作者:♂逸風★淩軒
1、更改服务的type:
查看:
kubectl get svc -n ns-2
kubectl edit svc test0927-1-service -n ns-2
查看到type是ClusterIP的;
更改type为NodePort之后,该TYPE类型更新了:
如果要把类型从NodePort,改回ClusterIP,kubectl edit svc test0927-1-service -n ns-2后,需要删除里面的30999的端口行
如果没有删除端口行30999,就会显示编辑失败:
kubectl edit svc test0927-1-service -n ns-2同时,也是能看到服务的yaml内容的一种方式;
2、查询pod值的命令中加上格式wide,能多展示两列:IP和NODE:
kubectl get pod -o wide -n ns-2
3、查看所有命名空间下的所有信息
kubectl get all -o wide --all-namespaces
4、获取所有的命名空间
kubectl get ns
5、查看指定命令空间下所有服务信息:
kubectl get all -n ns-2
6、指定命名空间下获取某种类型对象的所有信息
例如:
kubectl -n kube-system get pods
-获取 kube-system命名空间下所有pods信息
7、kubectl cluster-info 查看集群状态
Kubernetes master is running at https://10.20.16.99:8443 Heapster is running at https://10.20.16.99:8443/api/v1/namespaces/kube-system/services/eventer/proxy Heapster is running at https://10.20.16.99:8443/api/v1/namespaces/kube-system/services/heapster/proxy
kubectl配置位于~/.kube/config。
8、label 相关操作:
kubectl label node nodename key=value
给node节点标注一个label
比如执行如下命令标注k8s-node1是配置了SSD的节点。
kubectl label node k8s-node1 disktype=ssd
然后通过kubectl get node --show-labels查看节点
kubectl label node nodename key-
把node节点的label:key删除掉
kubectl get node --show-labels
查看一个node节点的标签信息
kubectl get node --show-labels
获取node上的label信息;
NAME STATUS ROLES AGE VERSION LABELS
10.1.235.27 Ready <none> 21d v1.8.6-dirty beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=10.1.235.27
10.1.235.28 Ready <none> 21d v1.8.6-dirty beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=10.1.235.28
9、获取daemonset 信息
kubectl get daemonset --all-namespaces
查询所有namespace下的daemonset
DaemonSet kube-flannel-ds和kube-proxy分别负责在每个节点上运
行flannel和kube-proxy组件,因为flannel和kube-proxy属于系统组件,需要在命令行中通过--
namespace=kube-system指定namespace kube-system。若不指定,则只
返回默认namespace default中的资源。
./kubectl get pod -o wide -n ns-2
查询pod值的命令中加上格式wide,能多展示两列:IP和NODE:
kubectl get pods
获取的默认是namespace为default的所有pods;
kubectl get pods -n ns-2
加上-n的参数,就可以查看到具体的namespace下的pods信息;
./kubectl get deployment --all-namespaces
是可以查看到所有的namespace下的pods信息;
kubectl get svc -n ns-2
----有些服务的service是查看不到的:nginx的服务没有service。 还有服务如果没有容器端口的话,也没有service
例如id是2,则ns是ns-2;
kubectl -n ns-2 get pods
flannel这个网卡的功能是为了跨主机和跨pod的访问;
10、日志类命令:
kubectl logs pod-name
查看容器中输出的日志;
kubectl logs -f podname -c containername
跟踪查看下具体容器的日志,相当于是tail -f
kubectl exec pod-name cmd
---在podname中执行cmd命令,该命令用‘’扩好;
kubectl exec pod-name -c containername
命令: ---在podname中的容器containername中执行命令;
kubectl exec -it common-1-controller-786c6c76dd-lqzc8 -c common-0 /bin/sh -n ns-2
进入pod common-1-controller-786c6c76dd-lqzc8内的容器common-0中,执行一些命令;
/ # date
Fri Sep 28 15:01:12 CST 2018
/ #
查看pods中的容器:
kubectl describe pods srvregtom-0723nie-001-1-controller-5664dd5fcc-tk222 -n ns-2 |grep "Container ID"
Container ID: docker://51411280865c6a40f4843b80a2fe180258f881e0071bcf21173c0535dd55ba44
Container ID: docker://315a3c1b5e1f9d4e91413e32beacd442765f2d65639bcd0706d3bc8bb851f50d
11、pods与containers的细微区别,docker和kubectl的区别
默认情况下,如果进程退出,pods是不会终止,相反,它会重新启动该进程。
这与docker run 配置--restart=always 选项有一个主要区别。要查看以前在Kubernetes中运行的输出,请运行如下:
$ docker run -d --restart=always -e DOMAIN=cluster --name nginx-app -p 80:80 nginx $ kubectl run --image=nginx nginx-app --port=80 --env="DOMAIN=cluster"
我们可以使用上面创建的Deployment来暴露一个新的服务:
$ kubectl expose deployment nginx-app --port=80 --name=nginx-http
默认情况下镜像在后台运行,类似于docker run -d ...如果要在前台运行,请使用:
kubectl run [-i] [--tty] --attach <name> --image=<image>
要删除Deployment (及其pod),使用 kubectl delete deployment <name>
获取当前运行的pods信息:
$ kubectl get po
12、
kubectl top node
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
10.1.241.159 1162m 7% 29846Mi 46%
10.1.241.160 1007m 6% 27369Mi 42%
10.1.241.161 937m 5% 34013Mi 52%
13、其他命令
kubectl top pod -n ns-222222
NAME CPU(cores) MEMORY(bytes)
deploy-app02-7dbf964cbf-kgw28 1m 6Mi
deploy-app02-7dbf964cbf-xn46n 1m 6Mi
deploy-app1-8665b9574d-lq9nb 0m 1Mi
deploy-app1-8665b9574d-t2vkk 0m 1Mi
deploy-newapp-5bdd9d5c69-mmsc8 0m 1Mi
deploy-normalapp-5f4b69b8bc-k7mk5 1m 7Mi
kubectl api-resources
NAME SHORTNAMES APIGROUP NAMESPACED KIND
bindings true Binding
componentstatuses cs false ComponentStatus
configmaps cm true ConfigMap
kubectl api-versions
kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: DATA+OMITTED
server: https://10.1.241.248:8443
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: admin
name: kubernetes
current-context: kubernetes
kind: Config
preferences: {}
users:
- name: admin
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
kubectl get ingress -n kube-system
NAME HOSTS ADDRESS PORTS AGE
spark-operator-metrics * 80 29d
编辑ingress
kubectl edit ingress spark-operator-metrics -n kube-system
14、查看命名空间ingress-nginx中的configmap信息:
kubectl get configmap -n ingress-nginx
查看具体的configmap信息,可以查看到分配的外部服务端口:
kubectl describe configmap tcp-services -n ingress-nginx
15、
kubectl -n devops-cmdb get svc
获取所有svc(svc 的type,ip ,port)
16、
kubectl -n onap edit svc vfc-nslcm(svc的name)
(编辑,某个svc)
17、journalctl -f -u kubelet 查看日志信息
kubectl get node 查看节点状态
kubectl get node --watch 观察节点
kubectl drain k8s-node1 --delete-local-data --force --ignore-daemonsets 驱除节点pod
以上命令中--ignore-daemonsets往往需要指定的,这是因为deamonset会忽略unschedulable标签(使用kubectl drain时会自动给节点打上不可调度标签),因此deamonset控制器控制的pod被删除后可能马上又在此节点上启动起来,这样就会成为死循环.因此这里忽略daemonset.
实际在使用kubectl drain时候,命令行一直被阻塞,等了很久还在被阻塞.使用kubectl get pod命令查看pod状态时.其中一个叫作busybox的pod一直处于Terminating状态. 使用kubectl delete pod busybox同样无法删除它.这时候可以使用命令kubectl delete pods busybox --grace-period=0 --force来强制马上删除pod.
这时候控制台阻塞状态结束.下面执行命令kubectl delete node k8s-node1来删除这个节点.然后我们重新安装kubelet,kubeadm和kubectl
无法调度异常
systemctl restart docker
systemctl restart kubelet
17、kubectl describe pod kuboard-67b8fc88c-khxdq -n kube-system 查看容器日志信息
kubectl get pods -n kube-system 查看状态
18、获取API地址
kubectl cluster-info | grep 'Kubernetes master' | awk '/http/ {print $NF}'
获取
kubectl get secrets
获取证书
kubectl get secret default-token-sts4q -o jsonpath="{['data']['ca\.crt']}" | base64 --decode
获取token
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
获取管理员token
echo $(kubectl -n kube-system get secret $(kubectl -n kube-system get secret | grep kuboard-user | awk '{print $1}') -o go-template='{{.data.token}}' | base64 -d)
以JSON格式输出POD信息: kubectl get pod name --output json
以yaml格式输出POD信息: kubectl get pod name --output yaml
更新POD:kubectl replace -f ***.yaml
19、更新镜像版本
root@k8s-master:~# kubectl patch deployment image-deployment --patch '{"spec": {"template": {"spec": {"containers": [{"name": "nginx","image":"registry.cn-beijing.aliyuncs.com/mrvolleyball/nginx:v1"}]}}}}'
deployment.extensions "image-deployment" patched
root@k8s-master:~# kubectl set image deploy hlm-platform-web *=registry.cn-shenzhen.aliyuncs.com/prd-zdzdaili/hlm-platform-web:v1.1.3
20、删除错误状态pod
kubectl get pods | grep Evicted | awk '{print $1}' | xargs kubectl delete pod
21、修改默认存储
查看默认存储:kubectl get storageclass
设置默认
kubectl patch storageclass datastrong -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
设置非默认
kubectl patch storageclass standard -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
关键字词:K8S,常用命令

上一篇:Docker 常用命令
相关文章
-
无相关信息