6、k8s-资源管理方式-命令式对象管理-命令式对象配置-声明式对象配置--一切皆是资源

注意:资源管理的三种方式都是在master节点上运行的、如果想在node节点上运行下边的指令操作、需要将master节点上的配置文件  .kube/  复制到node节点上:(scp  -r /root/.kube/   node1:/root/.kube)

资源管理方式:三种方式

1、命令式对象管理--直接使用命令去操作kubernetes资源:如:(此操作会在node节点的主机上去拉取nginx镜像)
kubectl run nginx-pod --image=nginx:1.17.1 --port=80

2、命令式对象配置--通过命令配置和配置文件去操作kubernetes资源、如:
kubectl create/patch -f nginx-pod.yaml

3、声明式对象配置:通过apply命令和配置文件去操作kubernetes资源:
kubectl apply -f nginx-pod.yaml      #apply只能实现创建和更新操作

三种方式的优缺点:

 

 

==========================1、命令式对象管理=====================

 kubectl命令

1、kubectl命令:
      ·kubectl是kubernetes集群的命令行工具、通过它能够对集群本身进行管理、并且能够在集群上进行容器化应用的安装部署。
语法:
    kubectl  [command]  [type]  [name]  [flags]
    
    ·command:指定要对资源执行的操作、例如create、get、delete
    ·type:指定资源类型、如deployment(部署)、pod、services
    ·name:指定资源的名称、名称大小写敏感
    ·flags:指定额外的可选参数

如:
    ·查看所有的pod:kubectl get pod
    ·查看某个pod:kubectl get pod nginx-6867cdf567-9zv5r(pod的名字)
    ·查看某个pod、以yaml格式展示结果:kubectl get pod nginx-6867cdf567-9zv5r -o yaml


 

command:命令

kubectl --help   可查看
基本命令:
    ·create       创建    创建一个资源
    ·edit         编辑    编辑一个资源
    ·get          获取    获取一个资源
    ·patch        更新    更新一个资源
    ·delete       删除    删除一个资源
    ·explain      解释    展示资源文档
运行和调试命令:
    ·run           运行              在集群中运行一个指定的镜像
    ·expose        暴露端口           暴露资源为service
    ·describe      描述              显示资源的内部信息
    ·logs          日志              输出容器在pod中的日志
    ·attach        缠绕              进入运行中的容器
    ·exec          执行              执行容器中的一个命令
    ·cp            复制              在pod内外复制文件
    ·rollout       首次展示           管理资源的发布
    ·scale         规模              扩(缩)容pod的数量
    ·autoscale     自动调整           自动调整pod的数量
高级命令:
    ·apply         rc        通过文件资源进行配置
    ·label         标签       更新资源上的标签
其它命令:
    ·cluster-info     集群信息           显示集群信息
    ·version          版本              显示当前server和client的版本

 

type:类型

查看type类型命令:kubectl  api-resources

集群级别的资源:
    ·nodes             no            集群组成部分
    ·namespace        ns            隔离pod
pod资源
    ·pods              pod            装载容器
pod资源控制器
    ·replicationcontrollers          rc        控制pod资源
    ·replicasets                      rs        控制pod资源
    ·deployments                     deploy    控制pod资源
    ·daemonsets                      ds        控制pod资源
    ·jobs                                        控制pod资源
    ·cronjobs                        cj            控制pod资源
    ·horizontalpodautoscalers          hpa        控制pod资源
    ·statefulsets                   sts            控制pod资源

服务发现资源:
    ·service            svc            统一pod对外接口
    ·ingress            ing            统一pod对外接口

存储资源:
    ·volumeattachments                       存储
    ·persistentvolumes            pv             存储
    ·persistentvolumeclaims        pvc          存储

配置资源:
    ·configmaps                cm            配置
    ·secrets                                    配置

 

命令式对象管理的案例:

1、创建一个namespace( 空间):kubectl create namespace dev
===================================
namespace/dev created

#dev  为空间名
#namespace可简写为ns
===================================
2、查看namespace:kubectl get ns  或者kubectl get namespace
==================================
NAME              STATUS   AGE
default           Active   24h                 //默认的namespace:如果在run 一个pod不指定空间的情况下会在这个默认的空间下(可通过kubectl get pods查看)
dev               Active   102s
kube-flannel      Active   23h
kube-node-lease   Active   24h
kube-public       Active   24h
kube-system       Active   24h
=================================

3、在指定的namespace下创建一个pod:kubectl run pod --image=nginx -n dev
===================================
#指定一个空间dev 下运行一个pod  pod下运行一个nginx

kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/pod created
======================================
4、查看某个空间下的pod:kubectl get pods -n dev
=======================================
#如果不加 -n dev (指定查看空间名下的pod)、就会查看默认空间default下的pod
NAME                   READY   STATUS    RESTARTS   AGE
pod-864f9875b9-f7n4n   0/1     Pending   0          2m21s
=======================================

5、查看某个空间里的pod的描述信息:kubectl describe pods pod-864f9875b9-f7n4n(pod名) -n dev
=====================================================================================================================================

Events:
Type Reason Age From Message
---- ------ ---- ---- -------

  Normal   Scheduled         2m42s                 default-scheduler   Successfully assigned dev/pod-864f9875b9-f7n4n to k8s-node1  #1、将你的安装nginx的请求调度到k8s-node1主机上执行
  Normal   Pulling           2m41s                 kubelet, k8s-node1  Pulling image "nginx"  #2、在node1集群上拉取nginx镜像
  Normal   Pulled            2m1s                  kubelet, k8s-node1  Successfully pulled image "nginx"  #3、拉取镜像成功
  Normal   Created           2m1s                  kubelet, k8s-node1  Created container pod    #4、创建一个pod容器
  Normal   Started           2m                    kubelet, k8s-node1  Started container pod    #5、启动pod容器


#创建一个pod的过程#1、2、3、4、5    所以镜像的拉取是在node1主机上操作的
========================================================================================================================================

6、删除pod:kubectl delete pods pod-5cddc86467-kmm8r -n dev
========================================================================================
#注意:由于上面运行pod用的是run(使用的是pod控制器)、所以删除pod后,会自动再重新启动一个不一样的pod、使用kubectl get pods -n xiaoxin查看发现pod的名字已经不一样了
pod "pod-5cddc86467-kmm8r" deleted
========================================================================================

7、删除空间namespace:kubectl delete ns dev
==============================================
#删除空间后里边的所有pod都会自动删除
namespace "dev" deleted
===========================================

8、查看namaspace:
kubectl get ns

 

注:namespace > pods > 容器 > 应用

==================2、命令式对象配置     实际就是命令+yaml文件=============================

就是使用命令配合配置文件一起来操作kubernetes资源

1、创建一个yaml文件:vim nginxpod.yaml
==================================
apiVersion: v1
kind: Namespace
metadata:
  name: dev

---

apiVersion: v1
kind: Pod
metadata:
  name: nginxpod
  namespace: dev
spec:
  containers:
  - name: nginx-containers
    image: nginx:1.17.1


------------------------解析-------------------------------
#--- 分隔符、将不同的内容分开
#apiVersion: v1   用于指定所使用的 Kubernetes API 的版本
#kind: Namespace     表示这是一个namespace对象
#metadata   字段包含有关 Pod 的元数据,如名称和命名空间
    #name: dev  指定了namespace的名字为dev

#spec 字段定义了 Pod 的规格,包括容器和其他相关配置
   #name: nginx-containers 指定了容器的名称为 "nginx-containers"
   #image: nginx:1.17.1 指定了容器所使用的镜像为 "nginx:1.17.1"
===================================== =================================

2、创建一个资源:kubectl create -f nginxpod.yaml
================================================
namespace/dev created
pod/nginxpod created
=============================================

3、查看pod和namespace:
  ·kubectl get pod
  ·kubectl get ns

4、删除
pod和namespace:
  ·kubectl delete -f nginxpod.yaml 

 

=================3、声明式对象配置 --仅用于更新、新增=====================

只能用apply

1、用上面的yaml文件执行:kubectl apply -f nginxpod.yaml
================================
namespace/dev created
pod/nginxpod created
================================

总结:
其实声明对象配置就是使用apply描述一个资源的最终状态(再yaml文件中定义状态)
    使用apply操作资源时:
        ·如果资源不存在、就创建、相当于  kubectl  create 
        ·如果资源存在、就更新、相当于  kubectl patch

 

posted @ 2024-06-13 17:56  little小新  阅读(2)  评论(0编辑  收藏  举报