kubernetes云原生k8s资源管理命令与Namespace使用详解

Posted 小码农叔叔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kubernetes云原生k8s资源管理命令与Namespace使用详解相关的知识,希望对你有一定的参考价值。

目录

一、前言

二、k8s概述

三、k8s常用操作管理命令

3.1 kubectl 命令用法

3.2 常用控制台管理命令演示

3.2.1 获取全部节点信息

3.2.2 获取当前集群下全部pod

3.2.3 查看某个pod信息

3.2.4 获取当前集群下的所有namespace信息

3.2.5 查看当前集群下已创建的资源

3.2.6 删除某个已存在的pod

3.2.7 删除某个已存在的deployment

3.2.8 删除某个已存在的service

3.3 常用资源管理命令演示

3.3.1 使用命令操作资源

3.3.2 命令式对象配置 :通过命令配置和配置⽂件去操作资源

3.3.3 声明式对象配置:通过apply和配置⽂件操作资源

3.4 kubectl create 和 kubectl apply的区别

四、k8s Namespace简介

4.1 概述

4.2 Namespace 特点

4.3 k8s 四个初始NameSpace名称空间

4.3.1 default

4.3.2 kube-system

4.3.3 kube-public

4.3.4 kube-node-lease

五、NameSpace的常用操作命令

5.1 查看当前k8s集群所有命令空间

5.2  创建新的命名空间

5.3  查看命名空间的详情 

5.4 删除命名空间

5.5 查看名称空间信息并指定输出格式

5.6 基于配置文件方式生成命名空间

5.7 删除基于yaml创建的namespace

六、写在文末


一、前言

在k8s的日常运维中,掌握日常必备的控制台操作命令可以说是必备的,本篇将结合实操详细介绍下基于kudadmin模式下常用的操作命令使用。

二、k8s概述

  • k8s是一个服务器集群系统,用户可以在集群中部署各种服务,也就是在k8s集群上运行一个个的容器 ;
  • 在k8s中,pod是最小的管理单元而非容器,一个pod中可以有多个容器 ;
  • 在k8s集群中,所有内容都可以被抽象为资源,通过操作资源来管理k8s集群 ;

三、k8s常用操作管理命令

3.1 kubectl 命令用法

kubectl [command] [TYPE] [NAME] [flags]

命令说明:

  • commad:对资源具体的操作,如create创建、 get获取 、 delete删除 ;
  • TYPE:指定资源类型,大小写敏感 ;
  • NAME:指定资源的名称,大小写敏感,如果省略名称则显示所有资源 ;
  • flags:指定可选的参数,如可用-s或者-server指定Kubernetes API server的地址和端口 ;

3.2 常用控制台管理命令演示

3.2.1 获取全部节点信息

kubectl get node

3.2.2 获取当前集群下全部pod

kubectl get pod

这里显示出了上一篇我们部署的一个nginx应用

3.2.3 查看某个pod信息

kubectl get pod pod_name

可以查看下上一篇部署的nginx对应的pod信息

3.2.4 获取当前集群下的所有namespace信息

kubectl get ns

3.2.5 查看当前集群下已创建的资源

kubectl get pod,svc,deploy

3.2.6 删除某个已存在的pod

kubectl delete pod pod名称

如果是靠deploy控制器创建的pod, 直接删除则会自动创建新的;

比如这里我们删除上面的那个nginx

尽管执行了删除命令,但是当我们再次查看pod信息的时候,发现k8s又重新创建了一个

3.2.7 删除某个已存在的deployment

如果需要删除pod,可以直接删除depoly控制器,控制器删除了,对应其创建的pod就会被删除,对应的命令如下:

kubectl delete deployment deployment名称

即下图中对应的这个deployment

3.2.8 删除某个已存在的service

kubectl delete svc/service service名称

可以通过下面的命令查找已存在的service服务,执行删除即可

3.3 常用资源管理命令演示

在上文,我们通过deployment创建了nginx应用对应的pod,属于命令式创建资源对象的方式,下面介绍k8s中几种常用的资源管理的命令方式;

3.3.1 使用命令操作资源

kubectl run 资源名称 --image=镜像名称 --port=端口号

这个就很像以前我们在使用docker部署某个应用时候的一种操作,比如创建一个nginx应用

kubectl run xdclass-nignx-pod --image=nginx:1.23.0 --port=80 kubectl create deployment test-nginx --image=nginx:1.23.0

3.3.2 命令式对象配置 :通过命令配置和配置⽂件去操作资源

语法格式

kubectl create -f 配置⽂件名称.yaml

3.3.3 声明式对象配置:通过apply和配置⽂件操作资源

这种方式在生产环境下也是经常使用的一种方式,务必要熟练掌握,命令格式如下:

kubectl apply -f 配置⽂件名称.yaml

通过上面的操作和前文的知识,我们也了解到,k8s中最小的应用单元为pod,而创建一个pod可以直接创建,或者通过deployment的方式创建出来,所以,通过apply的方式创建一个pod的话,其对应的配置文件既可以是直接创建pod,或者deployment;

声明为pod类型的yaml

在任意目录下创建一个后缀为.yaml的文件,比如这里我们创建一个test-nginx.yaml的文件,配置内容如下:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - image: nginx:1.23.0
    name: pod
    ports:
    - name: nginx-port
      containerPort: 80
      protocol: TCP

然后在当前的配置文件目录下执行 ,可以看到pod创建成功;

 kubectl apply -f ./test-pod-nginx.yaml

声明为deployment类型的 yaml

按照上面同样的方式创建一个yaml的后缀名的配置文件,内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deploy  
  labels:
    chapter: first-app
spec:
  selector:
     matchLabels:  
       app: nginx
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name : nginx
        image: nginx:1.23.0
        ports:
        - containerPort: 80

使用apply命令执行下之后,可以发现deployment创建成功

3.4 kubectl create 和 kubectl apply的区别

在日常开发运维中,kubectl create与kubectl apply都可以使用,两者的差别主要如下:

  • kubectl create 命令首次执行时会创建资源,再次执行时会报错,因为资源名称在同一命名空间内是唯一的;
  • kubectl apply首次执行的时候会创建对应的资源,再次执行时会根据配置文件进行升级、扩容等操作,即使配置文件没有变化也不影响;

四、k8s Namespace简介

4.1 概述

Namespace是k8s系统中的一种非常重要资源,它的主要作用是用来实现多套环境的资源隔离或者多用户的资源隔离

4.2 Namespace 特点

默认情况下,k8s集群中的所有的Pod都是可以相互访问的 ,但在实际中,可能不想让两个Pod之间进行互相的访问,那此时就可以将两个Pod划分到不同的namespace下 ,总结来说,k8s中的Namespace具有下面特点:

  • k8s通过将集群内部的资源分配到不同的Namespace中,可以形成逻辑上的"组",以方便不同的组的资源进行隔离使用和管理 ;
  • 可以通过k8s的授权机制,将不同的namespace交给不同租户进行管理,这样就实现了多租户的资源隔离;
  • 结合k8s的资源配额机制,限定不同租户能占用的资源,例如CPU使用量、内存使用量等等,来实现租户可用资源的管理;

4.3 k8s 四个初始NameSpace名称空间

默认情况下,k8s集群启动后会创建几个默认的初始化命名空间

4.3.1 default

没有指明使用其它名字空间的对象所使用的默认名字空间

4.3.2 kube-system

Kubernetes 系统创建对象所使用的名字空间

4.3.3 kube-public

自动创建的,命名空间下的资源可以被所有人访问(包括未认证用户)

4.3.4 kube-node-lease

集群节点之间的心跳维护

五、NameSpace的常用操作命令

下面列举日常运维过程中与NameSpace操作相关的命令

5.1 查看当前k8s集群所有命令空间

kubectl get namespace

或者使用缩写
kubectl get ns

5.2  创建新的命名空间

kubectl create ns 名称

5.3  查看命名空间的详情 

kubectl describe ns 名称

5.4 删除命名空间

kubectl delete ns 名称

5.5 查看名称空间信息并指定输出格式

语法格式

kubectl get ns ns名称  -o 格式参数, 常见的是wide、json、yaml

比如将上面的test以yaml格式输出

kubectl get ns test -o yaml

5.6 基于配置文件方式生成命名空间

还可以通过yaml格式的配置文件,使用kubectl命令生成,如下,在当前目录下创建一个测试使用的yaml文件,配置如下:

apiVersion: v1
kind: Namespace
metadata:
  name: test1

通过下面的命令基于上面的配置文件创建出一个namespace

kubectl create -f test-namespace.yaml
或者
kubectl apply -f test-namespace.yaml

执行后,可以看到上面的test1这个namespace就创建出来了

5.7 删除基于yaml创建的namespace

语法格式

kubectl delete -f yaml名称

六、写在文末

掌握k8s的操作命令对于日常k8s的集群运维可以说非常必要,只有熟练掌握了各种操作命令,才能高效操作k8s集群的各种资源,希望本篇对你有用哦。

云原生 | 从零开始学Kubernetes三Kubernetes集群管理工具kubectl

该篇文章已经被专栏《从零开始学k8s》收录


kubectl详解

概述

kubectl是Kubernetes集群的命令行工具,通过kubectl能够对集群本身进行管理,并能够在集群上进行容器化应用的安装和部署。

命令格式

命令格式如下

kubectl [command] [type] [name] [flags]

参数

  • command:指定要对资源执行的操作,例如create、get、describe、delete

  • type:指定资源类型,资源类型是大小写敏感的,开发者能够以单数,复数,缩略的形式指定。

  • name:指定资源的名称,名称也是大小写敏感的,如果省略名称,则会显示所有的资源。

  • flags:指定额外的可选参数,比如可以用 -s 或者 -server参数指定Kubernetes API server的地址和端口

例如:

kubectl get pod pod1
kubectl get pods pod1
kubectl get po pod1
kubectl get pods

常见命令

kubectl help 获取更多信息

通过 help命令,能够获取帮助信息

# 获取kubectl的命令
kubectl --help

# 获取某个命令的介绍和使用
kubectl get --help

# 查看目前的状态
kubectl get cs

# 查看所有pod
kubectl get pod 

# 查看某个pod
kubectl get pod pod_name

# 查看某个pod,以yaml格式展示结果
kubectl get pod pod_name -o yaml

基础命令

常见的基础命令

命令介绍
create通过文件名或标准输入创建资源
expose将一个资源暴露为一个新的Service
run在集群中运行一个指定的镜像
set在对象上设置特定的功能
get显示一个或多个资源
explain展示文档参考资料
edit使用默认的编辑器编辑一个资源
delete通过文件名,标准输入,资源名称或标签来删除资源
apply通过文件名或标准输入对资源应用配置
patch补丁修改、更新资源
replace通过文件名或标准输入替换一个资源
convert不同的API版本之间转换配置文件
label更新资源上的标签
annotate更新资源上的注释
completion用于实现kubectl工具自动补全
api-versions打印受支持的API版本
config修改kubeconfig文件(用于访问API,比如配置认证信息)
help所有命令帮助
plugin运行一个命令行插件
version打印客户端和服务版本信息

部署命令

命令介绍
rollout管理资源的发布
rolling-update对给定的复制控制器滚动更新
scale扩容或缩容Pod数量,Deployment、ReplicaSet、RC或Job
autoscale创建一个自动选择扩容或缩容并设置Pod数量

集群管理命令

命令介绍
certificate修改证书资源
cluster-info显示集群信息
top显示资源(CPU/M)
cordon标记节点不可调度
uncordon标记节点可被调度
drain驱逐节点上的应用,准备下线维护
taint修改节点taint标记

故障和调试命令

命令介绍
describe显示特定资源或资源组的详细信息
logs在一个Pod中打印一个容器日志,如果Pod只有一个容器,容器名称是可选的
attach附加到一个运行的容器
exec执行命令到容器
port-forward转发一个或多个
proxy运行一个proxy到Kubernetes API Server
cp拷贝文件或目录到容器中
auth检查授权

目前经常使用的命令

# 创建一个nginx镜像
kubectl create deployment nginx --image=nginx

# 对外暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort

# 查看资源
kubectl get pod

# 查看详细信息ip,端口等。
kubectl get svc

演示

创建一个namespace

[root@k8smaster ~]# kubectl create namespace paopao
namespace/paopao created

获取namespace

[root@k8smaster ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   7d23h
kube-node-lease   Active   7d23h
kube-public       Active   7d23h
kube-system       Active   7d23h
paopao            Active   22s

在此namespace下创建并运行一个nginx的Pod

[root@k8smaster ~]# kubectl run pod --image=nginx:latest -n paopao
pod/pod created

查看新创建的pod

[root@k8smaster ~]# kubectl get pod -n paopao
NAME   READY   STATUS    RESTARTS   AGE
pod    1/1     Running   0          3m14s

删除指定的namespace

[root@master ~]# kubectl delete ns dev
namespace "dev" deleted

创建/更新资源 使用声明式对象配置 kubectl apply -f XXX.yaml

删除资源 使用命令式对象配置 kubectl delete -f XXX.yaml

查询资源 使用命令式对象管理 kubectl get(describe) 资源名称

资源管理方式

命令式对象管理:直接使用命令去操作kubernetes资源,直接操作对象,适合测试用,比较简单,缺点是只能操作活动对象,无法审计跟踪。

kubectl run nginx-pod --image=nginx --port=80

命令式对象配置:通过命令配置和配置文件去操作kubernetes资源,直接操作文件,适合开发,可以审计以及跟踪,但是项目太大的话,配置文件多就会很多,操作麻烦。

kubectl create -f nginx-pod.yaml
kubectl patch -f nginx-pod.yaml

声明式对象配置:通过apply命令和配置文件去操作kubernetes资源,直接操作目录,适合开发,支持目录操作,但是不好调试。

kubectl apply -f nginx-pod.yaml

资源类型

kubernetes中所有的内容都抽象为资源,可以通过下面的命令进行查看:

kubectl api-resources

写在最后

创作不易,如果觉得内容对你有帮助,麻烦给个三连关注支持一下我!如果有错误,请在评论区指出,我会及时更改!
目前正在更新的系列:从零开始学k8s,从零开始学zabbix
感谢各位的观看,文章掺杂个人理解,如有错误请联系我指出~

以上是关于kubernetes云原生k8s资源管理命令与Namespace使用详解的主要内容,如果未能解决你的问题,请参考以下文章

云原生之kubernetes实战部署Octant开源可视化k8s管理平台

云原生之kubernetes在kubernetes集群下的jobs与cronjobs管理

kubernetes云原生k8s标签选择器使用详解

云原生之kubernetes实战在k8s集群下helm工具的安装与使用

云原生 | 从零开始学Kubernetes三Kubernetes集群管理工具kubectl

云原生之kubernetes实战在k8s环境下部署KubeGems云管理平台