作者:DREAM2502930781 | 来源:互联网 | 2023-08-31 14:09
一、描述
k8s一般在对对象进行管理的时候,一般又三种常见操作,分别为命令式对象管理、命令式对象配置、申明式对象配置。
命令式对象管理操作简单,操作的是对象,但是不方便审计,
kubectl run nginx-pod --image=nginx:1.17.1 --port=80
命令式对象配置,简单说就是把命令式管理的一些参数写到一个配置文件里,可以审计,一般操作的对象是文件,但是如果项目很大时,配置文件多,操作麻烦;
kubectl create/delete/patch -f nginx-pod.yaml
申明式对象配置,只能用于创建和更新资源,不对进行其它操作,可以对目录操作,比如把很多个yaml文件放到一个目录里,进行全部操作,很方便,如果出现错误难以排查
kubectl apply -f nginx-pod.yaml
二、命令式对象管理
kubectl是kubernetes集群的命令行工具,通过它能对集群本身进行管理,并能够在集群上对容器化应用的安装部署,一般语法如下
kubectl [command] [type] [name] [flags]
command:指定要对资源执行的操作,如create、get 、 delete 等
type:指定资源类型,如pod、service、deployment
name:指定资源的名称,大小写敏感
flags:指定额外的可选参数
command的常用命令如下:
type:资源类型
除了有pod、service、deployment其实还有很多,可以通过kubectl api-resources查看
常用的资源有如下资源
实操:
1、运行一个名为nginx-dev的pod的nginx,版本是1.17.1
[root@master ~]# kubectl run nginx-dev --image=nginx:1.17.1 --port=80
pod/nginx-dev created
2、查询所有的pod
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-7cbb8cd5d8-vpkgt 1/1 Running 0 4m39s
nginx-dev 1/1 Running 0 2m46s
nginx-pod 1/1 Running 0 10m
tomcat-6fb574f6dd-dmjkp 1/1 Running 0 3h36m
3、查询指定的pod
[root@master ~]# kubectl get pod nginx-dev
NAME READY STATUS RESTARTS AGE
nginx-dev 1/1 Running 0 3m36s
4、创建一个namespaces
[root@master ~]# kubectl create ns test
namespace/test created
5、查询一个指定名字的namespaces
[root@master ~]# kubectl get ns test
NAME STATUS AGE
test Active 84s
6、指定一个pod运行在namespaces为test下
[root@master ~]# kubectl run nginx-1 --image=nginx:1.17.1 --port=80 -n test
pod/nginx-1 created
[root@master ~]#
[root@master ~]#
[root@master ~]#
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-7cbb8cd5d8-vpkgt 1/1 Running 0 15m
nginx-dev 1/1 Running 0 13m
nginx-pod 1/1 Running 0 20m
tomcat-6fb574f6dd-dmjkp 1/1 Running 0 3h47m
[root@master ~]#
[root@master ~]#
[root@master ~]# kubectl get pod -n test
NAME READY STATUS RESTARTS AGE
nginx-1 1/1 Running 0 82s
默认查询是只显示default的namespaces下的pod,要显示指定的namespaces 需要加上-n参数
7、删除一个pod
[root@master ~]# kubectl get pod -n dev
No resources found in dev namespace.
[root@master ~]#
[root@master ~]# kubectl get pod -n test
NAME READY STATUS RESTARTS AGE
nginx-1 1/1 Running 0 7m56s
[root@master ~]#
[root@master ~]# kubectl delete pod nginx-1
Error from server (NotFound): pods "nginx-1" not found
[root@master ~]#
[root@master ~]# kubectl delete pod nginx-1 -n test
pod "nginx-1" deleted
默认删除的是default的namespaces下的pod 需要用-n参数指定pod所在的namespaces
三、命令式对象配置
命令是对象配置只是把一些参数写到了配置文件中,下面来写一个nginx的yaml文件
[root@master ~]# cat nginx-pod-123.yaml
apiVersion: v1
kind: Namespace
metadata:
name: dev
---
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod-123
namespace: dev
spec:
containers:
- name: nginx-containers
image: nginx:1.17.1
指定yaml文件创建pod
[root@master ~]# kubectl create -f nginx-pod-123.yaml
namespace/dev created
pod/nginx-pod-123 created
[root@master ~]#
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-7cbb8cd5d8-vpkgt 1/1 Running 0 36m
nginx-pod 1/1 Running 0 41m
tomcat-6fb574f6dd-dmjkp 1/1 Running 0 4h7m
[root@master ~]#
[root@master ~]# kubectl get pod -n dev
NAME READY STATUS RESTARTS AGE
nginx-pod-123 1/1 Running 0 25s
四、声明式对象配置
声明式对象配置和前面的命令式对象配置差不多,只是yaml文件有变化才更新,没有变化就不更新
[root@master ~]# kubectl apply -f nginx-pod-123.yaml
namespace/dev unchanged
pod/nginx-pod-123 configured
[root@master ~]#
[root@master ~]# kubectl apply -f nginx-pod-123.yaml
namespace/dev unchanged
pod/nginx-pod-123 unchanged