k8s对资源的管理方式
一、描述
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