基础命令
查看版本:kubectl version
kubectl version
Client Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.0", GitCommit:"70132b0f130acc0bed193d9ba59dd186f0e634cf", GitTreeState:"clean", BuildDate:"2019-12-07T21:20:10Z", GoVersion:"go1.13.4", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.0", GitCommit:"70132b0f130acc0bed193d9ba59dd186f0e634cf", GitTreeState:"clean", BuildDate:"2019-12-07T21:12:17Z", GoVersion:"go1.13.4", Compiler:"gc", Platform:"linux/amd64"}
-----------------------------------
client代表kubectl版本信息,server代表的是master节点的k8s版本信息
资源相关命令
资源类型名称的缩写
k8s的命令中如果用到资源类型名称可以用全写也可以用缩写
以下是一些常见的Kubernetes资源对象的缩写形式:
pods
可以缩写为po
services
可以缩写为svc
deployments
可以缩写为deploy
replicasets
可以缩写为rs
replicationcontrollers
可以缩写为rc
nodes
可以缩写为no
或nd
namespaces
可以缩写为ns
configmaps
可以缩写为cm
secrets
可以缩写为secret
persistentvolumes
可以缩写为pv
persistentvolumeclaims
可以缩写为pvc
ingress
可以缩写为ing
create 命令
根据文件或者输入来创建资源
create命令用于通过提供资源配置文件来创建资源对象。它使用指定的配置文件直接在集群中创建新的资源。每次使用create命令创建资源时,都会生成一个新的资源。
# 创建Deployment和Service资源
kubectl create -f demo-deployment.yaml
kubectl create -f demo-service.yaml
delete 命令
删除资源
# 根据yaml文件删除对应的资源,但是yaml文件并不会被删除,这样更加高效
$ kubectl delete -f demo-deployment.yaml
$ kubectl delete -f demo-service.yaml
# 也可以通过具体的资源名称来进行删除,使用这个删除资源,同时删除deployment和service资源
$ kubectl delete 具体的资源名称
get 命令
获取所有资源对象列表
kubectl get all
命令用于获取一组不同类型的资源对象信息。它会列出集群中的多种资源对象,如Pods、Services、Deployments、ReplicaSets等。然而,需要注意的是,并非所有资源类型都会与all
一起使用,有些资源类型无法直接通过kubectl get all
命令获取。此外,某些资源会以缩写形式显示。
如下返回结果示例:
NAME READY STATUS RESTARTS AGE
pod/nfs-client-provisioner-5cd5668dfd-hv2nd 1/1 Running 4 26d
pod/redis-78c4cdf7d4-vjlms 1/1 Running 0 14d
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.2.0.1 <none> 443/TCP 498d
service/redis ClusterIP 10.2.1.88 <none> 6379/TCP 187d
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nfs-client-provisioner 1/1 1 1 498d
deployment.apps/redis 1/1 1 1 187d
NAME DESIRED CURRENT READY AGE
replicaset.apps/nfs-client-provisioner-5cd5668dfd 1 1 1 498d
replicaset.apps/redis-78c4cdf7d4 1 1 1 187d
获取指定资源对象列表,resource-type可以是pods、deployments、services、replicaSets、namespaces、configMaps、secrets等
kubectl get <resource-type>
如:
kubectl get pods
显示资源对象的标签列
kubectl get <resource-type> --show-labels
以下是运行kubectl get pod --show-labels
命令的示例输出:
$ kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
pod-1 1/1 Running 0 10s app=myapp,env=dev
pod-2 1/1
获取资源对象的详细信息
kubectl get <resource-type> <resource-name>
如:
kubectl get pod my-pod
获取更多列和自定义输出
默认情况下,kubectl get
命令会显示资源对象的一些基本列,如名称、状态、创建时间等。使用-o
选项可以定制输出格式
-o wide
:使用宽表格输出格式,显示更多列的信息。
-o yaml
:以YAML格式输出资源对象的详细信息
-o json
:以JSON格式输出资源对象的详细信息
-o name
:仅输出资源对象的名称
使用-o wide可以看到pod在哪个节点上运行
[[email protected]:~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nfs-client-provisioner-5cd5668dfd-hv2nd 1/1 Running 4 26d
redis-78c4cdf7d4-vjlms 1/1 Running 0 14d
[[email protected]:~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nfs-client-provisioner-5cd5668dfd-hv2nd 1/1 Running 4 26d 10.1.6.239 work05 <none> <none>
redis-78c4cdf7d4-vjlms 1/1 Running 0 14d 10.1.75.120 work02 <none> <none>
-o custom-columns
:自定义输出列。通过使用-o custom-columns
选项,您可以指定您自己想要的列和格式。
kubectl get pods -o custom-columns=NAME:.metadata.name,STATUS:.status.phase
这将输出Pods的名称和状态列。
列出特定标签(Label)的资源对象
kubectl get <resource-type> -l <label-selector>
例如,要获取所有具有标签app=my-app
的Pods,可以运行:
kubectl get pods -l app=my-app
指定资源命名空间查询
kubectl get <resource-type> -n <namespace-name>
如果未指定-n
选项,则默认使用当前上下文的默认命名空间来获取资源对象的信息。可以使用kubectl config view
命令查看当前上下文的默认命名空间。
请注意,命名空间是用于在Kubernetes中组织和隔离资源对象的一种机制。通过使用命名空间,您可以将资源对象划分为逻辑组,以防止资源名称冲突,并在同一集群中实现多租户的部署模式。
apply命令
apply命令用于通过提供资源配置文件来创建或者更新资源对象。它会根据配置文件中的内容,自动判断应该创建新的资源还是更新已存在的资源。如果资源已经存在,apply命令会根据配置文件的更新内容,更新资源的配置。
通过文件名或控制台输入,对资源进行配置。
接受JSON和YAML格式的描述文件。
kubectl apply -f FILENAME
如:
kubectl apply -f my-deployment.yaml
kubectl apply -f ./pod.json
# 将控制台输入的JSON配置应用到Pod
$ cat pod.json | kubectl apply -f -
apply命令与create命令比较:
- create命令适合用于单次性的创建资源,而apply命令适合用于创建或更新已存在资源的场景。
- 如果资源对象已经存在,create命令会报错,而apply命令会自动更新已存在的资源对象。
应用配置文件了是否需要重启服务:
当使用kubectl apply命令更新一个资源对象时,Kubernetes会检测到现有对象与配置文件的区别,并自动执行必要的更新操作,如修改容器的配置、更改副本数、滚动更新等。这意味着应用程序将在无需重启的情况下应用新的更改。
对于一些特定的资源对象或配置更改,可能需要应用程序自身或重新加载配置来使更改生效。例如,当应用程序通过命令行参数或环境变量读取配置时,需要应用程序自身检测配置更改并重新加载配置。
expose命令
kubectl expose命令是用来创建一个新的Kubernetes服务的命令行工具。它可以为Pod、Deployment、ReplicaSet、DaemonSet等资源类型创建一个Kubernetes服务,并将其公开为一个可访问的网络端口。
kubectl expose命令的基本语法如下:
kubectl expose <资源类型> <资源名称> --port=<端口> --target-port=<目标端口> --name=<服务名称> --type=<服务类型>
其中,选项说明如下:
<资源类型>
: 要暴露的资源类型。例如,Deployment、Pod、ReplicaSet等。<资源名称>
: 要暴露的资源名称。--port=<端口>
: 服务监听的端口号。--target-port=<目标端口>
: 将流量转发到资源的目标端口号。--name=<服务名称>
: 服务的名称。--type=<服务类型>
: 服务的类型。支持ClusterIP、NodePort、LoadBalancer等类型。
使用kubectl expose命令可以方便地创建一个服务并将其公开为一个网络访问端口。例如,下面的命令将一个名为nginx的Deployment创建一个暴露端口为80的服务:
kubectl expose deployment nginx --port=80 --name=my-service
这样就会创建一个名为my-service的服务,并将它绑定到Deployment nginx上。通过该服务,可以通过80端口访问该Deployment。
除了基本的暴露命令之外,kubectl expose还支持其他选项,如--selector、--labels、--namespace等,这些选项可以用来限制暴露的资源范围,或者为服务添加标签等。