为了使读者能够快速掌握kubectl命令的使用方法,下面对常用的命令进行介绍。
1. kubectl create命令
此命令通过文件或者标准输入创建一个资源对象,支持YAML或者JSON格式的配置文件。例如,如果用户创建了一个Nginx的YAML配置文件,其内容如下:
apiVersion: v1
kind: ReplicationController
metadata:
name: nginx-controller
spec:
replicas: 2
selector:
name: nginx
template:
metadata:
labels:
name: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
用户可以使用以下命令创建MySQL的副本控制器:
$ kubectl create -f nginx.yaml
replicationcontroller "nginx-controller" created
2. kubectl get命令
用户可以通过此命令列出一个或多个资源对象,该命令的参数为资源类型名称。例如,使用下面的命令列出当前命名空间下的节点:
$ kubectl get nodes
NAME STATUS AGE
192.168.1.122 Ready 12d
192.168.1.123 Ready 12d
使用下面的命令列出所有的服务:
$ kubectl get services
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 10.254.0.1 <none> 443/TCP 12d
...
需要在Node上执行,准备redhat-ca.cr文件:
$ yum install *rhsm*
$ wget http://mirror.centos.org/centos/7/os/x86_64/Packages/ python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm
$ rpm2cpio python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm | cpio -iv --to-stdout ./etc/rhsm/ca/redhat-uep.pem | tee /etc/rhsm/ca/redhat-uep.pem
$ docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest
下面的命令以比较详细的方式列出当前命名空间中的Pod:
$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
nginx-controller-g5165 1/1 Running 0 4m 172.17.0.3 127.0.0.1
nginx-controller-zz0dk 1/1 Running 0 4m 172.17.0.2 127.0.0.1
...
3. kubectl describe命令
此命令用于显示一个或多个资源对象的详细信息。例如,我们想要获取名称为nginx-controller-g5165的Pod的详细信息,可以使用以下命令:
$ kubectl describe pods/nginx-controller-g5165
Name: nginx-controller-g5165
Namespace: default
Node: 127.0.0.1/127.0.0.1
Start Time: Sat, 23 Mar 2023 07:00:19 +0800
Labels: name=nginx
Status: Running
IP: 172.17.0.3
Controllers: ReplicationController/nginx-controller
Containers:
nginx:
Container ID: docker://5c427e437a4cb413e33b12c3dcc5d16ec1772876a4e5552669d842edf8bb1372
Image: nginx
Image ID: docker-pullable://docker.io/ nginx@sha256:98efe605f61725fd817ea69521b0eeb32bef007af0e3d0aeb6258c6e6fe7fc1a
Port: 80/TCP
State: Running
Started: Sat, 23 Mar 2023 07:03:37 +0800
Ready: True
Restart Count: 0
Volume Mounts: <none>
Environment Variables: <none>
Conditions:
Type Status
Initialized True
Ready True
PodScheduled True
No volumes.
...
4. kubectl exec命令
此命令用于在Pod的容器中执行一个命令。例如,下面的命令在名称为my-nginx- 379829228-8gfbb的容器中执行/bin/bash命令:
$ kubectl exec -it my-nginx-379829228-8gfbb /bin/bash
root@my-nginx-379829228-8gfbb:/#
$ kubectl exec -it nginx-c5cff9dcc-dr88w /bin/bash
执行完以后,可以发现Shell的命令提示符发生了变化,表明已经进入了容器的Shell环境中。
如果想要在容器中执行ls命令,可以使用以下方式:
$ kubectl exec nginx-controller-g5165 ls
bin
boot
dev
etc
home
lib
lib64
media
...
在上面的命令中,nginx-controller-g5165为Pod的名称。
5. kubectl run命令
该命令用来创建一个应用。与kubectl create命令不同,在该命令中,所有的选项可以通过命令行指定。例如,使用下面的命令创建一个Nginx应用:
$ kubectl run --image=nginx nginx-app --port=8080
deployment "nginx-app" created
执行完之后,通过get命令查看创建进度,如下所示:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-app-2743647498-f6qc6 1/1 Running 0 1m
...
可以得知,刚刚创建的Pod已经处于运行状态。
6. kubectl delete命令
该命令用来删除集群中的资源。例如,下面的命令删除名称为nginx-controller-zz0dk的Pod:
$ kubectl delete pods/nginx-controller-zz0dk
pod "nginx-controller-zz0dk" deleted
除了上面介绍的几个命令之外,kubectl还提供了许多功能强大的命令,读者可以参考其他的技术文档,在此不再详细介绍。