• Welcome to the world's largest Chinese hacker forum

    Welcome to the world's largest Chinese hacker forum, our forum registration is open! You can now register for technical communication with us, this is a free and open to the world of the BBS, we founded the purpose for the study of network security, please don't release business of black/grey, or on the BBS posts, to seek help hacker if violations, we will permanently frozen your IP and account, thank you for your cooperation. Hacker attack and defense cracking or network Security

    business please click here: Creation Security  From CNHACKTEAM

k8s - kubernetes组件 资源管理方法


Recommended Posts

kubernetes组件

一个kubernetes集群主要由一个控制节点(主节点)和一个**工作节点(节点)* *组成,每个节点上会安装不同的组件。

主:集群的控制平面,负责集群的决策(管理)。

ApiServer:是资源操作的唯一入口点,接收用户输入的命令,提供认证、授权、API注册和发现机制。

Scheduler:负责集群资源的调度,根据预定的调度策略将Pod调度到相应的节点。

管理器:负责维护集群的状态,如程序部署、故障检测、自动扩展、滚动更新等。

Etcd:负责存储集群中各种资源对象的信息。

节点:集群的数据平面,负责为容器提供运行环境(工作)。

Kubelet:负责维护容器的生命周期,即通过控制docker来创建、更新和销毁容器。

KubeProxy:负责在集群内提供服务发现和负载平衡。

Docker:负责容器在节点上的各种操作。

csduw0exiel4424.png

接下来,部署一个nginx服务来说明kubernetes系统各个组件的调用关系:

首先要明确的是,kubernetes环境一旦启动,无论是主节点还是节点,都会将自己的信息存储在etcd数据库中。

nginx服务的安装请求将首先发送到主节点的apiServer组件。

apiServer组件将调用scheduler组件来决定这个服务应该安装在哪个节点上。

此时,它会从etcd中读取各个节点的信息,然后按照一定的算法进行选择,并将结果通知apiServer。

apiServer调用控制器管理器来调度节点安装nginx服务。

收到指令后,kubelet会通知docker,然后docker会启动一个nginx的pod。

Pod是kubernetes的最小操作单元,容器必须在pod中运行到这一点。

运行一个nginx服务,如果需要访问nginx,需要使用kube-proxy生成一个访问pod的代理。

这样,外部用户可以访问集群中的nginx服务。

资源管理方式

有三种管理资源的方法

命令对象管理,直接使用命令操作k8s资源。

kubectl run nginx-pod-image=nginx :1 . 17 . 1-port=80

命令对象配置,通过命令配置和配置文件来操作k8s资源。

kubectl create/patch-f nginx-pod . YAML

声明性对象配置:使用apply命令和配置文件来操作kubernetes资源。

kubectl apply -f nginx-pod.yaml

它们之间的比较如下

操作对象适用环境优缺点势在必行的对象管理

目标

试验

简单的

您只能操作活动对象,但不能审计或跟踪它们。

命令性对象配置

文件

剥削

你可以审计和跟踪。

项目大的时候,配置文件多,操作麻烦。

声明性对象配置

目录

剥削

支持目录操作

意外情况下难以调试

命令式对象管理

kubectl 命令

kubectl 是 kubernetes 集群的命令行工具,通过它能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署。kubectl 命令的语法如下:

kubectl [command] [type] [name] [flags]
  • comand:指定要对资源执行的操作,例如 create、get、delete
  • type:指定资源类型,比如 deployment、pod、service
  • name:指定资源的名称,名称大小写敏感
  • flags:指定额外的可选参数
# 查看所有pod
kubectl get pod 
# 查看某个pod
kubectl get pod pod_name
# 查看某个pod,以yaml格式展示结果
kubectl get pod pod_name -o yaml

bg0ki1wuwaj4425.png

资源类型 

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

kubectl api-resources

ml0r3ktsksv4426.png

经常使用的资源有下面这些

资源分类资源名称缩写资源作用
集群级别资源 nodes no 集群组成部分
namespaces namespaces ns  隔离 pod
pod资源 pods po 装载容器
pod资源控制器 replicationcontrollers rc 控制pod资源
  replicasets rs 控制pod资源
  deployments deploy 控制pod资源
  daemonsets ds 控制pod资源
  jobs   控制pod资源
  cronjobs cj 控制pod资源
  horizontalpodautoscalers hpa 控制pod资源
  statefulsets sts 控制pod资源
服务发现资源 services svc 统一pod对外接口
  ingress ing 统一pod对外接口
存储资源 volumeattachments   存储
  persistentvolumes pv 存储
  persistentvolumeclaims pvc 存储
配置资源 configmaps cm 配置
  secrets   配置

kubernetes 允许对资源进行多种操作,可以通过 --help 查看详细的操作命令

kubectl --help

经常使用的操作有下面这些:

命令分类命令翻译命令作用
基本命令 create 创建 创建一个资源
  edit 编辑 编辑一个资源
  get 获取 获取一个资源
  patch 更新 更新一个资源
  delete 删除 删除一个资源
  explain 解释 展示资源文档
运行和调试 run 运行 在集群中运行一个指定的镜像
  expose 暴露 暴露资源为Service
  describe 描述 显示资源内部信息
  logs 日志输出容器在 pod 中的日志 输出容器在 pod 中的日志
  attach 缠绕进入运行中的容器 进入运行中的容器
  exec 执行容器中的一个命令 执行容器中的一个命令
  cp 复制 在Pod内外复制文件
  rollout 首次展示 管理资源的发布
  scale 规模 扩(缩)容Pod的数量
  autoscale 自动调整 自动调整Pod的数量
高级命令 apply rc 通过文件对资源进行配置
  label 标签 更新资源上的标签
其他命令 cluster-info 集群信息 显示集群信息
  version 版本 显示当前Server和Client的版本
 下面以一个 namespace / pod 的创建和删除简单演示下命令的使用
# 创建一个命名空间,名字为 dev
[[email protected] ~]# kubectl create namespace dev
namespace/dev created
# 查看有哪些命名空间,namespace 可以简写为 ns
[[email protected] ~]# kubectl get ns
NAME                  STATUS   AGE
clusterpedia-system   Active   27h
dce-system            Active   6d1h
default               Active   6d1h
dev                   Active   20s
kube-node-lease       Active   6d1h
kube-public           Active   6d1h
kube-system           Active   6d1h
# 启动一个 pod,-n dev 表示在命名空间 dev 下启动,不加的话默认在 default 命名空间下
[[email protected] ~]# kubectl run nginx-pod --image=nginx:1.13 -n dev
pod/nginx-pod created
# 查看 pod,在命名空间 dev 下,不加默认是在 default 命名空间下
[[email protected] ~]# kubectl get pods -n dev
NAME        READY   STATUS              RESTARTS   AGE
nginx-pod   0/1     ContainerCreating   0          22s
# 删除 pod,要指定命名空间,不加默认是在 default 命名空间下
[[email protected] ~]# kubectl delete pod nginx-pod -n dev
pod "nginx-pod" deleted
# 删除命名空间 dev
[[email protected] ~]# kubectl delete ns dev
namespace "dev" deleted

命令式对象配置

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

创建一个 nginxpod.yaml,内容如下

apiVersion: v1
kind: Namespace  # 创建了一个命名空间
metadata:
  name: test  #  命名空间的名称叫 test
---
apiVersion: v1
kind: Pod
metadata:
  name: nginxpod
  namespace: test  # 在 test 的命名空间上
spec:
  containers:
  - name: nginx-containers
    image: nginx:1.14 # 创建了一个 nginx 镜像

执行 create 命令,创建资源

[[email protected] ~]# kubectl create -f nginxpod.yaml
namespace/test created  # 创建了一个命名空间,叫 test
pod/nginxpod created  # 创建了一个 pod,名字叫 nginxpod

执行 delete 命令,删除资源

# 删除 nginxpod.yaml 创建的对象
[[email protected] ~]# kubectl delete -f nginxpod.yaml
namespace "test" deleted
pod "nginxpod" deleted

此时发现两个资源对象被删除了

声明式对象配置

声明式对象配置跟命令式对象配置很相似,但是它只有一个命令 apply

# 首先执行一次 kubectl apply -f yaml 文件,创建了资源
[[email protected] ~]#  kubectl apply -f nginxpod.yaml
namespace/test created
pod/nginxpod created
# 再次执行一次 kubectl apply -f yaml 文件,发现说资源没有变动
[[email protected] ~]#  kubectl apply -f nginxpod.yaml
namespace/test unchanged
pod/nginxpod unchanged

kubectl 可以在 node 节点上运行吗

kubectl 的运行是需要进行配置的,它的配置文件是 $HOME/.kube,如果想要在 node 节点运行此命令,需要将 master 上的 .kube 文件复制到 node 节点上,即在 master 节点上执行下面操作

scp  -r  HOME/.kube   node1: HOME/

 

Link to comment
Share on other sites