k8s常用操作命令

  • Post author:
  • Post category:其他


总结:

想查看kubectl命令的方法:

kubectl help

kubectl <command> –help

常用的命令类

kubectl edit svc  test0927-1-service -n ns-2       编辑类:编辑服务

kubectl describe 类型/具体名 -n namespace            描述类

kubectl get 类型/具体名 -n namespace -o wide(或者yaml)    获得详情信息类

类型有:pods、configmap、replicasets(rs)、service(srv)、deployment、endpoints ;

kubectl rullout 回滚类

操作命令类

1、编辑服务的type:

./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、./kubectl get pod -o  wide  -n ns-2   查询pod值的命令中加上格式wide,能多展示两列:IP和NODE:

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%

12、其他命令

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

13、查看命名空间ingress-nginx中的configmap信息:

查看具体的configmap信息,可以查看到分配的外部服务端口:

应用类

访问方式:

1、直接访问pod实例,在应用实例中有实例的ip:port:


curl 172.30.29.9:80


2、访问外网域名


3、访问内网域名:

4、

外网访问是:


http://yancheng.com/


curl -H “host:yancheng.com” ingressip


curl –resolve yancheng.com:80:10.19.10.27 http://yancheng.com


其中10.19.10.27是ingressip


5、如果在浏览器上访问,需要在本台机器上的hosts文件内设置一下 域名+ip的对应关系;然后在浏览器内输入url,就能访问ingress提供的服务了。

14、k8s服务的访问方式:

k8s负载均衡打开时,有两种协议可以选择:http或者tcp:

1、协议是http时,是通过访问URL(http://域名.com):应用概览部分有;

访问:

[root@host-10-1-241-160 ~]# curl -v  “http://222222.com/”

* About to connect() to df222222.com port 80 (#0)

*   Trying 47.56.8.110…

* Connected to df222222.com (47.56.8.110) port 80 (#0)

> GET / HTTP/1.1

> User-Agent: curl/7.29.0

> Host: df222222.com

> Accept: */*

>

< HTTP/1.1 307 Temporary Redirect

< Server: openresty

< Date: Mon, 02 Dec 2019 06:29:10 GMT

< Content-Type: text/html; charset=utf-8

< Content-Length: 168

< Connection: keep-alive

< Location: https://df222222.com:7822/

<

<html>

<head><title>307 Temporary Redirect</title></head>

<body>

<center><h1>307 Temporary Redirect</h1></center>

<hr><center>openresty</center>

</body>

</html>

查看node节点的资源使用情况

命令:


kubectl get nodes 先获取所有node的信息


kubectl describe node 10.19.10.25

查看一台node主机上的所有pod资源(跨namespace的):



kubectl



get pods  -A -o wide  |grep nodeip

此外:

kubectl top +资源,是可以看资源使用,例如


kubectl top nodes


kubectl top pods -n kube-system

负载均衡处理组件,例如ingress

外部通过ingress访问http请求url后面的服务;ingress controller是以pod的形式存在的;

逻辑:

1、监听apiserver,获取全部ingress的定义

2、基于ingress的定义,生成nginx需要的配置文件/etc/nginx/nginx.conf

3、nginx -s reload 命令,重新加载nginx.conf配置文件的内容

nginx-ingress-controller镜像来创建ingress controller,该ingress controller是以daemonset的形式进行创建,在每个node上都将启动一个nginx服务。

查看ingress的镜像文件:



docker



images |grep ingress



docker



pull quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.27.1


查看ingress拉起的容器:


[foot@foot37 ~]$ docker ps |grep ingress


48c4f3d7639f        1857c2b71337                                      “nginx -g ‘daemon of…”   5 days ago          Up 5 days                                            k8s_c-147_deploy-test



ingress



-6c95b456bf-zml6t_ns-zhejiang_7fd3a23f-d3b7-44ee-9754-0838b241c40a_0


7be51d38ec55        footcloud.com/pause:3.0                           “/pause”                 5 days ago          Up 5 days                                            k8s_POD_deploy-test-



ingress



-6c95b456bf-zml6t_ns-zhejiang_7fd3a23f-d3b7-44ee-9754-0838b241c40a_0

灰度升级时,新建deployment之后,会新建一个replicaset控制副本数。deployment实际是replica controller的升级版:


kubectl get cs -n ns-yancheng


NAME                 STATUS    MESSAGE             ERROR


controller-manager   Healthy   ok


scheduler            Healthy   ok


etcd-1               Healthy   {“health”:”true”}


etcd-2               Healthy   {“health”:”true”}


etcd-0               Healthy   {“health”:”true”}


kubectl get events -n ns-yancheng


kubectl get ingresses -n ns-yancheng


NAME                     HOSTS            ADDRESS         PORTS   AGE


ingress-app0619          yancheng.dfcom   10.254.179.42   80      20h


ingress-app0619-canary   yancheng.dfcom   10.254.179.42   80      27m

kubectl get storageclass -n ns-yancheng

NAME        PROVISIONER               AGE

glusterfs   kubernetes.io/glusterfs   76d

sc-10       kubernetes.io/glusterfs   50d

sc-16       kubernetes.io/glusterfs   37d

sc-17       kubernetes.io/glusterfs   37d

sc-18       kubernetes.io/glusterfs   34d


灰度升级


查看升级过程中deployment的更新过程


kubectl rollout status  deployment/deploy-app0619-canary  -n ns-yancheng


deployment “deploy-app0619-canary” successfully rolled out


可以编辑deployment的镜像版本,引起升级:


kubectl edit   deployment/deploy-app0619-canary  -n ns-yancheng


检查整个deployment部署的历史记录:


kubectl rollout history deployment/deploy-app0619-canary  -n ns-yancheng


撤销本次发布回滚到上一个部署版本:

kubectl rollout undo deployment/deploy-app0619-canary  -n ns-yancheng


暂停deployment的更新:


kubectl rollout pause deployment/deploy-app0619-canary  -n ns-yancheng


在新建deployment后,最好加上—record,在查看history时能看到历史记录。


–version,能看到更新的每个版本。


查看命令的子命令方法:


kubectl rollout


Available Commands:


history     View rollout history


pause       Mark the provided resource as paused


restart     Restart a resource


resume      Resume a paused resource


status      Show the status of the rollout


undo        Undo a previous rollout


获取endpoints=popip+contaninerport


kubectl get endpoints -n ns-yancheng


NAME                 ENDPOINTS                                        AGE


svc-app0619          172.30.29.2:80,172.30.30.7:80                    4d1h


svc-app0619-canary   172.30.29.6:80,172.30.30.10:80,172.30.30.13:80   3d6h



版权声明:本文为xiaofang2015原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。