k8s技术--Kubernetes集群kubectl命令的常见使用方法

简介:kubectl是一个命令行界面,用于运行针对Kubernetes群集的命令。
语法:
kubectl [command] [TYPE] [NAME] [flags]
  • command:指定您希望对一个或多个资源执行的操作,例如创建,获取,描述,删除。
  • TYPE:指定资源类型。 资源类型区分大小写,可以使用单数,复数或缩写形式。
  • NAME:指定资源的名称。 名称区分大小写。 如果省略名称,则会显示所有资源的详细信息,例如$ kubectl get pod。
  • flags:指定可选标志。 例如,可以使用-s或--server标志来指定Kubernetes API服务器的地址和端口。

1、显示Pod的更多信息

kubectl get pod <pod-name> -o wide
以yaml格式显示Pod的详细信息
kubectl get pod <pod-name> -o yaml
 

2、创建资源对象

根据yaml配置文件一次性创建service和rc
kubectl create -f my-service.yaml -f my-rc.yaml
根据<directory>目录下所有.yaml、.yml、.json文件的定义进行创建操作
kubectl create -f <directory>
 

3、查看资源对象

查看所有Pod列表
kubectl get pods
 

4、查看rc和service列表

kubectl get rc,service
 

5、描述资源对象

显示Node的详细信息
kubectl describe nodes <node-name>
显示Pod的详细信息
kubectl describe pods/<pod-name>
显示由RC管理的Pod的信息
kubectl describe pods <rc-name>
 

6、删除资源对象

基于Pod.yaml定义的名称删除Pod
kubectl delete -f pod.yaml
删除所有包含某个label的Pod和service
kubectl delete pods,services -l name=<label-name>
删除所有Pod
kubectl delete pods --all
 

7、执行容器的命令

执行Pod的data命令,默认是用Pod中的第一个容器执行
kubectl exec <pod-name> data
指定Pod中某个容器执行data命令
kubectl exec <pod-name> -c <container-name> data
通过bash获得Pod中某个容器的TTY,相当于登录容器
kubectl exec -it <pod-name> -c <container-name> /bin/bash
 

8、使用一些复杂过滤条件查看特定的资源对象

# 根据重启次数排序列出 pod
$ kubectl get pods --sort-by='.status.containerStatuses[0].restartCount'
 
# 获取所有具有 app=cassandra 的 pod 中的 version 标签
$ kubectl get pods --selector=app=cassandra rc -o  jsonpath='{.items[*].metadata.labels.version}'
 
# 获取所有节点的 ExternalIP
$ kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}'
 
# 查看哪些节点已就绪
$ JSONPATH='{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}' && kubectl get nodes -o jsonpath="$JSONPATH" | grep "Ready=True"
 

9、Pod的扩容缩容、滚动升级以及更新资源配置

执行扩容缩容Pod的操作
kubectl scale rc redis --replicas=3
我们需要确认的是在rc配置文件中定义的replicas数量,当我们执行上述命令的结果大于replicas的数量时,则我们执行的命令相当于扩容操作,反之相反,可以理解为我们填写的数量是我们需要的Pod数量。需要注意的是,当我们需要进行永久性扩容时,不要忘记修改rc配置文件中的replicas数量。
 
Pod的滚动升级
执行滚动升级操作
kubectl rolling-update redis -f redis-rc.update.yaml
需要注意的是当我们执行rolling-update命令前需要准备好新的RC配置文件以及ConfigMap配置文件,RC配置文件中需要指定升级后需要使用的镜像名称,或者可以使用kubeclt rolling-update redis --image=redis-2.0直接指定镜像名称的方式直接升级。
 
# 强制替换,删除后重新创建资源。会导致服务中断。
$ kubectl replace --force -f ./pod.json
 
# 为 nginx RC 创建服务,启用本地 80 端口连接到容器上的 8000 端口
$ kubectl expose rc nginx --port=80 --target-port=8000
 
# 更新单容器 pod 的镜像版本(tag)到 v4
$ kubectl get pod mypod -o yaml | sed 's/ image:myimageimage:myimage:.*$/\1:v4/' | kubectl replace -f -
 
$ kubectl label pods my-pod new-label=awesome # 添加标签
$ kubectl annotate pods my-pod icon-url=http://goo.gl/XXBTWq # 添加注解
$ kubectl autoscale deployment foo --min=2 --max=10 # 自动扩展 deployment “foo”
 

10、查看容器的日志

查看容器输出到stdout的日志:
kubectl logs <pod-name>
跟踪查看容器的日志(tail -f):
kubectl logs -f <pod-name> -n <namespace> -c <container-name>
 

11、Kubectl context和配置

修改kubectl命令行工具默认使用的apiServer地址、集群CA和客户端证书:
[root@bogon ssl]# kubectl config set-cluster default-cluster --server=https://10.0.2.5:6443 --certificate-authority=/etc/kubernetes/ssl/ca.crt
Cluster "default-cluster" set.
[root@bogon ssl]# kubectl config set-credentials default-admin --certificate-authority=/etc/kubernetes/ssl/ca.crt --client-key=/etc/kubernetes/ssl/cs_client.key --client-certificate=/etc/kubernetes/ssl/cs_client.crt
User "default-admin" set.
[root@bogon ssl]# kubectl config set-context default-system --cluster=default-cluster --user=default-admin  在kubeconfig配置中添加一条名为default-system的上下文记录
Context "default-system" created.
[root@bogon ssl]# kubectl config use-context default-system     #设置默认上下文为default-system
Switched to context "default-system".
[root@bogon ~]# kubectl config current-context   #查看当前的上下文
default-system
 
详细如下:

创建 kubeconfig 文件

kubeconfig 为 kubectl 的配置文件,包含访问 apiserver 的所有信息,如 apiserver 地址、CA 证书和自身使用的证书;

source /opt/k8s/bin/environment.sh
# 设置集群参数
kubectl config set-cluster kubernetes \
  --certificate-authority=/etc/kubernetes/cert/ca.pem \
  --embed-certs=true \
  --server=${KUBE_APISERVER} \
  --kubeconfig=kubectl.kubeconfig

# 设置客户端认证参数 kubectl config set-credentials admin \ --client-certificate=admin.pem \ --client-key=admin-key.pem \ --embed-certs=true \ --kubeconfig=kubectl.kubeconfig # 设置上下文参数 kubectl config set-context kubernetes \ --cluster=kubernetes \ --user=admin \ --kubeconfig=kubectl.kubeconfig # 设置默认上下文 kubectl config use-context kubernetes --kubeconfig=kubectl.kubeconfig
  • --certificate-authority:验证 kube-apiserver 证书的根证书;
  • --client-certificate--client-key:刚生成的 admin 证书和私钥,连接 kube-apiserver 时使用;
  • --embed-certs=true:将 ca.pem 和 admin.pem 证书内容嵌入到生成的 kubectl.kubeconfig 文件中(不加时,写入的是证书文件路径);

分发 kubeconfig 文件

分发到所有使用 kubectl 命令的节点:

source /opt/k8s/bin/environment.sh
for node_ip in ${NODE_IPS[@]}
  do echo ">>> ${node_ip}" ssh k8s@${node_ip} "mkdir -p ~/.kube" scp kubectl.kubeconfig k8s@${node_ip}:~/.kube/config ssh root@${node_ip} "mkdir -p ~/.kube" scp kubectl.kubeconfig root@${node_ip}:~/.kube/config done
  • 保存到用户的 ~/.kube/config 文件;
查看kubectl context配置信息:
# kubectl config view   
apiVersion: v1
clusters:
- cluster:
    certificate-authority: /etc/kubernetes/ssl/ca.crt
    server: https://10.0.2.5:6443
  name: default-cluster
contexts:
- context:
    cluster: default-cluster
    user: default-admin
  name: default-system
current-context: default-system
kind: Config
preferences: {}
users:
- name: default-admin
  user:
    client-certificate: /etc/kubernetes/ssl/cs_client.crt
    client-key: /etc/kubernetes/ssl/cs_client.key
显示当前的上下文:
[root@bogon ~]# kubectl config current-context
default-system
 

12、在线编辑资源

# kubectl edit svc/mysql  #可以直接对各种资源对象进行在线编辑变更
 

13、节点和集群信息查询或调度方法

$ kubectl cordon my-node # 标记 my-node 不可调度
$ kubectl drain my-node # 清空 my-node 以待维护
$ kubectl uncordon my-node # 标记 my-node 可调度
$ kubectl top node my-node # 显示 my-node 的指标度量
$ kubectl cluster-info # 显示 master 和服务的地址
$ kubectl cluster-info dump # 将当前集群状态输出到 stdout
$ kubectl cluster-info dump --output-directory=/path/to/cluster-state # 将当前集群状态输出到 /path/to/cluster-state
# 如果该键和影响的污点(taint)已存在,则使用指定的值替换
$ kubectl taint nodes foo dedicated=special-user:NoSchedule
 

14、资源类型列表

下表列出的是 kubernetes 中所有支持的类型和缩写的别名。
资源类型
缩写别名
apiservices
 
certificatesigningrequests
csr
clusters
 
clusterrolebindings
 
clusterroles
 
componentstatuses
cs
configmaps
cm
controllerrevisions
 
cronjobs
 
customresourcedefinition
crd
daemonsets
ds
deployments
deploy
endpoints
ep
events
ev
horizontalpodautoscalers
hpa
ingresses
ing
jobs
 
limitranges
limits
namespaces
ns
networkpolicies
netpol
nodes
no
persistentvolumeclaims
pvc
persistentvolumes
pv
poddisruptionbudget
pdb
podpreset
 
pods
po
podsecuritypolicies
psp
podtemplates
 
replicasets
rs
replicationcontrollers
rc
resourcequotas
quota
rolebindings
 
roles
 
secrets
 
serviceaccounts
sa
services
svc
statefulsets
 
storageclasses
 

15、kubectl的格式化输出

要以特定的格式向终端窗口输出详细信息,可以在 kubectl 命令中添加 -o 或者 -output 标志。
输出格式
描述
-o=custom-columns=<spec>
使用逗号分隔的自定义列列表打印表格
-o=custom-columns-file=<filename>
使用 文件中的自定义列模板打印表格
-o=json
输出 JSON 格式的 API 对象
-o=jsonpath=<template>
打印  jsonpath 表达式中定义的字段
-o=jsonpath-file=<filename>
打印由 文件中的  jsonpath 表达式定义的字段
-o=name
仅打印资源名称
-o=wide
以纯文本格式输出任何附加信息,对于 Pod ,包含节点名称
-o=yaml
输出 YAML 格式的 API 对象

16、Kubectl 日志打印级别

使用 -v 或 --v 标志跟着一个整数来指定日志级别。
详细等级
描述
--v=0
总是对操作人员可见。
--v=1
合理的默认日志级别,如果您不需要详细输出。
--v=2
可能与系统的重大变化相关的,有关稳定状态的信息和重要的日志信息。这是对大多数系统推荐的日志级别。
--v=3
有关更改的扩展信息。
--v=4
调试级别详细输出。
--v=6
显示请求的资源。
--v=7
显示HTTP请求的header。
--v=8
显示HTTP请求的内容。


参考:

猜你喜欢

转载自www.cnblogs.com/cheyunhua/p/10168501.html