K8S 相关命令

总结:
想查看kubectl命令的方法:
kubectl help
kubectl <command> --help

常用的命令类

kubectl   

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-testingress-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
————————————————
版权声明:本文为CSDN博主「xiaofang2015」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xiaofang2015/article/details/82900190

上一篇:k8s04_实战入门


下一篇:Redis AOF持久化原理解析