1.1. get

1.1.1. 基本信息查看

Usage: kubectl get resource [-o wide|json|yaml] [-n namespace]
Man: 获取资源的相关信息,-n 指定名称空间,-o 指定输出格式
resource可以是具体资源名称,如pod nginx-xxx;也可以是资源类型,如pod;或者all(仅展示几种核心资源,并不完整)
-A, —all-namespace 表示显示所有名称空间
[root@hdss7-21 ~]# kubectl get cs
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”}

[root@hdss7-21 ~]# kubectl get node -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
hdss7-21.host.com Ready master,node 11d v1.15.2 10.4.7.21 CentOS Linux 7 (Core) 3.10.0-862.el7.x86_64 docker://19.3.5
hdss7-22.host.com Ready master,node 11d v1.15.2 10.4.7.22 CentOS Linux 7 (Core) 3.10.0-862.el7.x86_64 docker://19.3.5

[root@hdss7-21 ~]# kubectl get svc -o wide -n kube-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
coredns ClusterIP 192.168.0.2 53/UDP,53/TCP,9153/TCP 4d20h k8s-app=coredns
kubernetes-dashboard ClusterIP 192.168.140.139 443/TCP 3d9h k8s-app=kubernetes-dashboard
traefik-ingress-service ClusterIP 192.168.45.46 80/TCP,8080/TCP 3d19h k8s-app=traefik-ingress

[root@hdss7-21 ~]# kubectl get pod nginx-ds-jdp7q -o yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: “2020-01-13T13:13:02Z”
generateName: nginx-ds-
labels:
app: nginx-ds
……

[root@centos-7-51 ~]# kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
default pod-demo 1/1 Running 0 23m
kube-system coredns-7cf6c46dd5-9phnm 1/1 Running 2 6d1h
kube-system coredns-7cf6c46dd5-dm55x 1/1 Running 2 6d1h
kube-system etcd-centos-7-51 1/1 Running 2 6d1h
kube-system etcd-centos-7-52 1/1 Running 2 6d1h
kube-system etcd-centos-7-53 1/1 Running 2 6d1h

1.1.2. 根据标签筛选

—show-labels 显示所有标签
-l app 仅显示标签为app的资源
-l app=nginx 仅显示包含app标签,且值为nginx的资源
[root@hdss7-21 ~]# kubectl get pod -n app —show-labels
NAME READY STATUS RESTARTS AGE LABELS
pod-02 1/1 Running 0 9h app=nginx,release=stable,version=v1.12
pod-demo 1/1 Running 9 9h app=centos7,environment=dev,release=stable
[root@hdss7-21 ~]# kubectl get pod -n app —show-labels -l app
NAME READY STATUS RESTARTS AGE LABELS
pod-02 1/1 Running 0 9h app=nginx,release=stable,version=v1.12
pod-demo 1/1 Running 9 9h app=centos7,environment=dev,release=stable
[root@hdss7-21 ~]# kubectl get pod -n app —show-labels -l app=nginx
NAME READY STATUS RESTARTS AGE LABELS
pod-02 1/1 Running 0 9h app=nginx,release=stable,version=v1.12

1.2. describe

Usage: kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | -l label] | TYPE/NAME) [-n namespace]
Man: 描述某个资源信息
[root@hdss7-21 ~]# kubectl describe svc nginx-web
Name: nginx-web
……

[root@hdss7-21 ~]# kubectl describe pod -l app=nginx-web
Name: nginx-web-796c86d7cd-8kst5
Namespace: default
……

1.3. 其它集群信息

[root@hdss7-21 ~]# kubectl version # 集群版本
Client Version: version.Info{Major:”1”, Minor:”15”, GitVersion:”v1.15.2”, GitCommit:”f6278300bebbb750328ac16ee6dd3aa7d3549568”, GitTreeState:”clean”, BuildDate:”2019-08-05T09:23:26Z”, GoVersion:”go1.12.5”, Compiler:”gc”, Platform:”linux/amd64”}
Server Version: version.Info{Major:”1”, Minor:”15”, GitVersion:”v1.15.2”, GitCommit:”f6278300bebbb750328ac16ee6dd3aa7d3549568”, GitTreeState:”clean”, BuildDate:”2019-08-05T09:15:22Z”, GoVersion:”go1.12.5”, Compiler:”gc”, Platform:”linux/amd64”}
[root@hdss7-21 ~]# kubectl cluster-info # 集群信息
Kubernetes master is running at http://localhost:8080
CoreDNS is running at http://localhost:8080/api/v1/namespaces/kube-system/services/coredns:dns/proxy
kubernetes-dashboard is running at http://localhost:8080/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy

To further debug and diagnose cluster problems, use ‘kubectl cluster-info dump’

2. 创建资源

2.1. run(弃用)

Usage: kubectl run NAME —image=image [—env=”key=value”] [—port=port] [—replicas=replicas] [—dry-run=bool] [options]
Man: 通过kubectl创建一个deployment或者Job。name为deployment的名字,image为容器的镜像
port为对容器外暴露的端口,replicas为副本数,dry-run为干运行(不创建pod)
[root@hdss7-21 ~]# kubectl run web-deploy —image=harbor.od.com/public/nginx:latest —replicas=2
[root@hdss7-21 ~]# kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
web-deploy 2/2 2 2 92s
[root@hdss7-21 ~]# kubectl get pods|grep web-deploy
web-deploy-bc78f6667-5s6rq 1/1 Running 0 119s
web-deploy-bc78f6667-h67zb 1/1 Running 0 119s

2.2. create

Uage: kubectl create -f filename.yaml
kubectl create resourece [options]
Man: 根据清单文件或者指定的资源参数创建资源
[root@hdss7-21 ~]# kubectl create namespace app # 创建名称空间
[root@hdss7-21 ~]# kubectl get ns app
NAME STATUS AGE
app Active 10s

[root@hdss7-21 ~]# kubectl create deployment app-deploy —image=harbor.od.com/public/nginx:latest -n app # 创建deployment
[root@hdss7-21 ~]# kubectl get all -n app
NAME READY STATUS RESTARTS AGE
pod/app-deploy-5b5649fc4-plbxg 1/1 Running 0 13s

NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/app-deploy 1/1 1 1 13s

NAME DESIRED CURRENT READY AGE
replicaset.apps/app-deploy-5b5649fc4 1 1 1 13s

2.3. 创建service资源

Usage: Usage: kubectl expose TYPE NAME [—port=port] [—protocol=TCP|UDP|SCTP] [—target-port=n] [—name=name] [—external-ip=external-ip-of-service] [options]
Man: TYPE为deployment,NAME为depoly资源名称,port和target-port分别为集群和pod的端口
[root@hdss7-21 ~]# kubectl expose deployment app-deploy —port=80 —target-port=80 —name=app-svc -n app
[root@hdss7-21 ~]# kubectl describe svc app-svc -n app
Name: app-svc
Namespace: app
Labels: app=app-deploy
Annotations:
Selector: app=app-deploy
Type: ClusterIP
IP: 192.168.28.124
Port: 80/TCP
TargetPort: 80/TCP
Endpoints: 172.7.21.8:80

3. 扩缩容

Usage: kubectl scale —replicas=COUNT TYPE NAME [options]
Man: 对资源进行扩缩容,即修改副本数
[root@hdss7-21 ~]# kubectl get deploy web-deploy
NAME READY UP-TO-DATE AVAILABLE AGE
web-deploy 2/2 2 2 37m
[root@hdss7-21 ~]# kubectl scale —replicas=5 deployment web-deploy # 扩容
[root@hdss7-21 ~]# kubectl get deploy web-deploy
NAME READY UP-TO-DATE AVAILABLE AGE
web-deploy 3/5 5 3 38m

[root@hdss7-21 ~]# kubectl scale —replicas=1 deployment web-deploy # 缩容
[root@hdss7-21 ~]# kubectl get deploy web-deploy
NAME READY UP-TO-DATE AVAILABLE AGE
web-deploy 1/1 1 1 38m

4. 删除资源

Usage: kubectl delete ([-f FILENAME] | [-k DIRECTORY] | TYPE [(NAME | -l label | —all)]) [options]
Man: 删除指定资源
[root@hdss7-21 ~]# kubectl get deployment -n app
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/app-deploy 1/1 1 1 35m
[root@hdss7-21 ~]# kubectl delete deployment app-deploy -n app
deployment.extensions “app-deploy” deleted

[root@hdss7-21 ~]# kubectl delete ns app
namespace “app” deleted

5. 贴附到pod上

Usage: kubectl exec (POD | TYPE/NAME) [-c CONTAINER] [flags] — COMMAND [args…] [options]
[root@hdss7-21 ~]# kubectl exec nginx-web-796c86d7cd-zx2b9 -it — /bin/bash # 交互式
root@nginx-web-796c86d7cd-zx2b9:/# exit
exit

[root@hdss7-21 ~]# kubectl exec nginx-web-796c86d7cd-zx2b9 — cat /etc/resolv.conf
nameserver 192.168.0.2
search default.svc.cluster.local svc.cluster.local cluster.local host.com
options ndots:5

[root@hdss7-21 ~]# kubectl exec nginx-web-796c86d7cd-zx2b9 cat /etc/resolv.conf
nameserver 192.168.0.2
search default.svc.cluster.local svc.cluster.local cluster.local host.com
options ndots:5

6. 查看资源清单文档

[root@hdss7-21 ~]# kubectl api-versions # 查看api-version信息
apps/v1
node.k8s.io/v1beta1
v1
……
Usage: kubectl explain RESOURCE [options]
Man: 查看各个字段的解释,随着k8s版本的更新,不同资源的Apiversion会发生变化,当出现API错误时,需要查询当前的API版本

[root@hdss7-21 ~]# kubectl explain pod.spec.containers
KIND: Pod
VERSION: v1

RESOURCE: containers <[]Object>

7. 调度

污点:https://www.yuque.com/duduniao/k8s/hlzt2y#5IXMC
驱逐:https://www.yuque.com/duduniao/k8s/hlzt2y#H6ofT


8. 代理

Kubectl 可以将apiserver接口代理到本地客户端机器上,这样就可通过本地客户端直接通过代理接口访问集群内部的资源。这种方式常常在问题定位和开发测试环境中使用,因为可以不需要在Kubernetes节点上访问Kubernetes资源对象和服务接口。
Usage: kubectl proxy [—port=PORT] [—address=’127.0.0.1’] [—accept-hosts=’^.$’] [options]
Man: 通过proxy将apiserver 6443端口代理到本地http端口
—port=8001: 指定本地监听的端口,默认8001
—address=’127.0.0.1’: 指定本地监听的地址,默认127.0.0.1
—accept-hosts=’’: 指定允许连接的客户端,默认只能本机访问
—accept-paths=’’: 指定接受连接的API地址,默认允许访问所有api接口
# 监听在本地所有网卡的8080端口,并且允许所有机器访问
[root@duduniao kubernetes]# kubectl proxy —port=8080 —address=’0.0.0.0’ —accept-hosts=’^.
$’

  • 访问资源对象

[root@duduniao ~]# curl http://127.0.0.1:8080/api/v1 # API列表
[root@duduniao ~]# curl http://127.0.0.1:8080/api/v1/namespaces # namespaces列表
[root@duduniao ~]# curl http://127.0.0.1:8080/api/v1/namespaces/apps # 查看指定名称空间信息

查看指定service
[root@duduniao ~]# curl http://127.0.0.1:8080/api/v1/namespaces/apps/services/slb-s1
# 访问指定service端口
[root@duduniao ~]# curl http://127.0.0.1:8080/api/v1/namespaces/apps/services/slb-s1:80/proxy/
# 访问指定service的/info接口
[root@duduniao ~]# curl http://127.0.0.1:8080/api/v1/namespaces/apps/services/slb-s1:80/proxy/info
# 访问指定pod的接口
[root@duduniao ~]# curl http://127.0.0.1:8080/api/v1/namespaces/apps/pods/nginx-deploy-655c4b6bb9-sl4fb/proxy/health.html

9. Kubectl 命令补全

Kuberctl 命令的参数和选项非常多,查看资源状态往往还涉资源类型和名称空间,如果没有命令补全,则非常低效率。
Kuberctl 配置命令补全非常简单,只需要两步骤:

  1. 安装bash补全工具yum install bash-completion或者apt install bash-completion
  2. 配置补全脚本kubectl completion bash >/etc/bash_completion.d/kubectl