哪里可以做网站平台,网页设计指什么,网站开发成本会计科目,gg服务器租用网站第一章 kubernetes介绍 
本章节主要介绍应用程序在服务器上部署方式演变以及kubernetes的概念、组件和工作原理。 
应用部署方式演变 
在部署应用程序的方式上#xff0c;主要经历了三个时代#xff1a; 传统部署#xff1a;互联网早期#xff0c;会直接将应用程序部署在物…第一章 kubernetes介绍 
本章节主要介绍应用程序在服务器上部署方式演变以及kubernetes的概念、组件和工作原理。 
应用部署方式演变 
在部署应用程序的方式上主要经历了三个时代 传统部署互联网早期会直接将应用程序部署在物理机上  优点简单不需要其它技术的参与 缺点不能为应用程序定义资源使用边界很难合理地分配计算资源而且程序之间容易产生影响   虚拟化部署可以在一台物理机上运行多个虚拟机每个虚拟机都是独立的一个环境  优点程序环境不会相互产生影响提供了一定程度的安全性 缺点增加了操作系统浪费了部分资源   容器化部署与虚拟化类似但是共享了操作系统  优点  可以保证每个容器拥有自己的文件系统、CPU、内存、进程空间等  运行应用程序所需要的资源都被容器包装并和底层基础架构解耦  容器化的应用程序可以跨云服务商、跨Linux操作系统发行版进行部署   容器化部署方式给带来很多的便利但是也会出现一些问题比如说 
一个容器故障停机了怎么样让另外一个容器立刻启动去替补停机的容器当并发访问量变大的时候怎么样做到横向扩展容器数量 
这些容器管理的问题统称为容器编排问题为了解决这些容器编排问题就产生了一些容器编排的软件 
SwarmDocker自己的容器编排工具MesosApache的一个资源统一管控的工具需要和Marathon结合使用KubernetesGoogle开源的的容器编排工具 kubernetes简介  
 kubernetes是一个全新的基于容器技术的分布式架构领先方案是谷歌严格保密十几年的秘密武器----Borg系统的一个开源版本于2014年9月发布第一个版本2015年7月发布第一个正式版本。 
 kubernetes的本质是一组服务器集群它可以在集群的每个节点上运行特定的程序来对节点中的容器进行管理。目的是实现资源管理的自动化主要提供了如下的主要功能 
自我修复一旦某一个容器崩溃能够在1秒中左右迅速启动新的容器弹性伸缩可以根据需要自动对集群中正在运行的容器数量进行调整服务发现服务可以通过自动发现的形式找到它所依赖的服务负载均衡如果一个服务起动了多个容器能够自动实现请求的负载均衡版本回退如果发现新发布的程序版本有问题可以立即回退到原来的版本存储编排可以根据容器自身的需求自动创建存储卷 kubernetes组件 
一个kubernetes集群主要是由控制节点(master)、**工作节点(node)**构成每个节点上都会安装不同的组件。 
master集群的控制平面负责集群的决策 ( 管理 ) ApiServer : 资源操作的唯一入口接收用户输入的命令提供认证、授权、API注册和发现等机制 Scheduler : 负责集群资源调度按照预定的调度策略将Pod调度到相应的node节点上 ControllerManager : 负责维护集群的状态比如程序部署安排、故障检测、自动扩展、滚动更新等 **Etcd **负责存储集群中各种资源对象的信息 **node集群的数据平面负责为容器提供运行环境 ( 干活 ) ** Kubelet : 负责维护容器的生命周期即通过控制docker来创建、更新、销毁容器 KubeProxy : 负责提供集群内部的服务发现和负载均衡 Docker : 负责节点上容器的各种操作 下面以部署一个nginx服务来说明kubernetes系统各个组件调用关系 首先要明确一旦kubernetes环境启动之后master和node都会将自身的信息存储到etcd数据库中  一个nginx服务的安装请求会首先被发送到master节点的apiServer组件  apiServer组件会调用scheduler组件来决定到底应该把这个服务安装到哪个node节点上 在此时它会从etcd中读取各个node节点的信息然后按照一定的算法进行选择并将结果告知apiServer  apiServer调用controller-manager去调度Node节点安装nginx服务  kubelet接收到指令后会通知docker然后由docker来启动一个nginx的pod pod是kubernetes的最小操作单元容器必须跑在pod中至此  一个nginx服务就运行了如果需要访问nginx就需要通过kube-proxy来对pod产生访问的代理  
 这样外界用户就可以访问集群中的nginx服务了 
kubernetes概念 
Master集群控制节点每个集群需要至少一个master节点负责集群的管控 
Node工作负载节点由master分配容器到这些node工作节点上然后node节点上的docker负责容器的运行 
Podkubernetes的最小控制单元容器都是运行在pod中的一个pod中可以有1个或者多个容器 
Controller控制器通过它来实现对pod的管理比如启动pod、停止pod、伸缩pod的数量等等 
Servicepod对外服务的统一入口下面可以维护者同一类的多个pod 
Label标签用于对pod进行分类同一类pod会拥有相同的标签 
NameSpace命名空间用来隔离pod的运行环境 第二章 集群环境搭建 
本章节主要介绍如何搭建kubernetes的集群环境 
环境规划 
集群类型 
kubernetes集群大体上分为两类一主多从和多主多从。 
一主多从一台Master节点和多台Node节点搭建简单但是有单机故障风险适合用于测试环境多主多从多台Master节点和多台Node节点搭建麻烦安全性高适合用于生产环境 说明为了测试简单本次搭建的是 一主两从 类型的集群 安装方式 
kubernetes有多种部署方式目前主流的方式有kubeadm、minikube、二进制包 
minikube一个用于快速搭建单节点kubernetes的工具kubeadm一个用于快速搭建kubernetes集群的工具二进制包 从官网下载每个组件的二进制包依次去安装此方式对于理解kubernetes组件更加有效 说明现在需要安装kubernetes的集群环境但是又不想过于麻烦所以选择使用kubeadm方式 主机规划 
作用IP地址操作系统配置Master192.168.109.101Centos7.5 基础设施服务器2颗CPU 2G内存 50G硬盘Node1192.168.109.102Centos7.5 基础设施服务器2颗CPU 2G内存 50G硬盘Node2192.168.109.103Centos7.5 基础设施服务器2颗CPU 2G内存 50G硬盘 
环境搭建 
 本次环境搭建需要安装三台Centos服务器一主二从然后在每台服务器中分别安装docker18.06.3kubeadm1.17.4、kubelet1.17.4、kubectl1.17.4程序。 
主机安装 
安装虚拟机过程中注意下面选项的设置 操作系统环境CPU2C 内存2G 硬盘50G  语言选择中文简体  软件选择基础设施服务器  分区选择自动分区  网络配置按照下面配置网路地址信息 网络地址192.168.109.100  每台主机都不一样  分别为100、101、102
子网掩码255.255.255.0
默认网关192.168.109.2
DNS    223.5.5.5主机名设置按照下面信息设置主机名 master节点 master
node节点   node1
node节点   node2环境初始化 
检查操作系统的版本 
# 此方式下安装kubernetes集群要求Centos版本要在7.5或之上
[rootmaster ~]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)2 主机名解析 
为了方便后面集群节点间的直接调用在这配置一下主机名解析企业中推荐使用内部DNS服务器 
# 主机名成解析 编辑三台服务器的/etc/hosts文件添加下面内容
192.168.109.100  master
192.168.109.101  node1
192.168.109.102  node23 时间同步 
kubernetes要求集群中的节点时间必须精确一致这里直接使用chronyd服务从网络同步时间。 
企业中建议配置内部的时间同步服务器 
# 启动chronyd服务
[rootmaster ~]# systemctl start chronyd
# 设置chronyd服务开机自启
[rootmaster ~]# systemctl enable chronyd
# chronyd服务启动稍等几秒钟就可以使用date命令验证时间了
[rootmaster ~]# date4 禁用iptables和firewalld服务 
kubernetes和docker在运行中会产生大量的iptables规则为了不让系统规则跟它们混淆直接关闭系统的规则 
# 1 关闭firewalld服务
[rootmaster ~]# systemctl stop firewalld
[rootmaster ~]# systemctl disable firewalld
# 2 关闭iptables服务
[rootmaster ~]# systemctl stop iptables
[rootmaster ~]# systemctl disable iptables5 禁用selinux 
selinux是linux系统下的一个安全服务如果不关闭它在安装集群中会产生各种各样的奇葩问题 
# 编辑 /etc/selinux/config 文件修改SELINUX的值为disabled
# 注意修改完毕之后需要重启linux服务
SELINUXdisabled6 禁用swap分区 
swap分区指的是虚拟内存分区它的作用是在物理内存使用完之后将磁盘空间虚拟成内存来使用 
启用swap设备会对系统的性能产生非常负面的影响因此kubernetes要求每个节点都要禁用swap设备 
但是如果因为某些原因确实不能关闭swap分区就需要在集群安装过程中通过明确的参数进行配置说明 
# 编辑分区配置文件/etc/fstab注释掉swap分区一行
# 注意修改完毕之后需要重启linux服务UUID455cc753-7a60-4c17-a424-7741728c44a1 /boot    xfs     defaults        0 0/dev/mapper/centos-home /home                      xfs     defaults        0 0
# /dev/mapper/centos-swap swap                      swap    defaults        0 07修改linux的内核参数 
# 修改linux的内核参数添加网桥过滤和地址转发功能
# 编辑/etc/sysctl.d/kubernetes.conf文件添加如下配置:
net.bridge.bridge-nf-call-ip6tables  1
net.bridge.bridge-nf-call-iptables  1
net.ipv4.ip_forward  1# 重新加载配置
[rootmaster ~]# sysctl -p# 加载网桥过滤模块
[rootmaster ~]# modprobe br_netfilter# 查看网桥过滤模块是否加载成功
[rootmaster ~]# lsmod | grep br_netfilter8配置ipvs功能 
在kubernetes中service有两种代理模型一种是基于iptables的一种是基于ipvs的 
两者比较的话ipvs的性能明显要高一些但是如果要使用它需要手动载入ipvs模块 
# 1 安装ipset和ipvsadm
[rootmaster ~]# yum install ipset ipvsadmin -y# 2 添加需要加载的模块写入脚本文件
[rootmaster ~]# cat EOF   /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF# 3 为脚本文件添加执行权限
[rootmaster ~]# chmod x /etc/sysconfig/modules/ipvs.modules# 4 执行脚本文件
[rootmaster ~]# /bin/bash /etc/sysconfig/modules/ipvs.modules# 5 查看对应的模块是否加载成功
[rootmaster ~]# lsmod | grep -e ip_vs -e nf_conntrack_ipv49 重启服务器 
上面步骤完成之后需要重新启动linux系统 
[rootmaster ~]# reboot安装docker 
# 1 切换镜像源
[rootmaster ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo# 2 查看当前镜像源中支持的docker版本
[rootmaster ~]# yum list docker-ce --showduplicates# 3 安装特定版本的docker-ce
# 必须指定--setoptobsoletes0否则yum会自动安装更高版本
[rootmaster ~]# yum install --setoptobsoletes0 docker-ce-18.06.3.ce-3.el7 -y# 4 添加一个配置文件
# Docker在默认情况下使用的Cgroup Driver为cgroupfs而kubernetes推荐使用systemd来代替cgroupfs
[rootmaster ~]# mkdir /etc/docker
[rootmaster ~]# cat EOF   /etc/docker/daemon.json
{exec-opts: [native.cgroupdriversystemd],registry-mirrors: [https://kn0t2bca.mirror.aliyuncs.com]
}
EOF# 5 启动docker
[rootmaster ~]# systemctl restart docker
[rootmaster ~]# systemctl enable docker# 6 检查docker状态和版本
[rootmaster ~]# docker version安装kubernetes组件 
# 由于kubernetes的镜像源在国外速度比较慢这里切换成国内的镜像源
# 编辑/etc/yum.repos.d/kubernetes.repo添加下面的配置 
[kubernetes]
nameKubernetes
baseurlhttp://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled1
gpgcheck0
repo_gpgcheck0
gpgkeyhttp://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpghttp://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg# 安装kubeadm、kubelet和kubectl
[rootmaster ~]# yum install --setoptobsoletes0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y# 配置kubelet的cgroup
# 编辑/etc/sysconfig/kubelet添加下面的配置
KUBELET_CGROUP_ARGS--cgroup-driversystemd
KUBE_PROXY_MODEipvs# 4 设置kubelet开机自启
[rootmaster ~]# systemctl enable kubelet准备集群镜像 
# 在安装kubernetes集群之前必须要提前准备好集群需要的镜像所需镜像可以通过下面命令查看
[rootmaster ~]# kubeadm config images list# 下载镜像
# 此镜像在kubernetes的仓库中,由于网络原因,无法连接下面提供了一种替代方案
images(kube-apiserver:v1.17.4kube-controller-manager:v1.17.4kube-scheduler:v1.17.4kube-proxy:v1.17.4pause:3.1etcd:3.4.3-0coredns:1.6.5
)for imageName in ${images[]} ; dodocker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageNamedocker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName 		k8s.gcr.io/$imageNamedocker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done集群初始化 
下面开始对集群进行初始化并将node节点加入到集群中 下面的操作只需要在master节点上执行即可 # 创建集群
[rootmaster ~]# kubeadm init \--kubernetes-versionv1.17.4 \--pod-network-cidr10.244.0.0/16 \--service-cidr10.96.0.0/12 \--apiserver-advertise-address192.168.109.100# 创建必要文件
[rootmaster ~]# mkdir -p $HOME/.kube
[rootmaster ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[rootmaster ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config下面的操作只需要在node节点上执行即可 # 将node节点加入集群
[rootmaster ~]# kubeadm join 192.168.109.100:6443 \ --token 8507uc.o0knircuri8etnw2 \--discovery-token-ca-cert-hash \sha256:acc37967fb5b0acf39d7598f8a439cc7dc88f439a3f4d0c9cae88e7901b9d3f# 查看集群状态 此时的集群状态为NotReady这是因为还没有配置网络插件
[rootmaster ~]# kubectl get nodes
NAME     STATUS     ROLES    AGE     VERSION
master   NotReady   master   6m43s   v1.17.4
node1    NotReady   none   22s     v1.17.4
node2    NotReady   none   19s     v1.17.4安装网络插件 
kubernetes支持多种网络插件比如flannel、calico、canal等等任选一种使用即可本次选择flannel 下面操作依旧只在master节点执行即可插件使用的是DaemonSet的控制器它会在每个节点上都运行 # 获取fannel的配置文件
[rootmaster ~]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml# 修改文件中quay.io仓库为quay-mirror.qiniu.com# 使用配置文件启动fannel
[rootmaster ~]# kubectl apply -f kube-flannel.yml# 稍等片刻再次查看集群节点的状态
[rootmaster ~]# kubectl get nodes
NAME     STATUS   ROLES    AGE     VERSION
master   Ready    master   15m     v1.17.4
node1    Ready    none   8m53s   v1.17.4
node2    Ready    none   8m50s   v1.17.4至此kubernetes的集群环境搭建完成 
服务部署 
接下来在kubernetes集群中部署一个nginx程序测试下集群是否在正常工作。 
# 部署nginx
[rootmaster ~]# kubectl create deployment nginx --imagenginx:1.14-alpine# 暴露端口
[rootmaster ~]# kubectl expose deployment nginx --port80 --typeNodePort# 查看服务状态
[rootmaster ~]# kubectl get pods,service
NAME                         READY   STATUS    RESTARTS   AGE
pod/nginx-86c57db685-fdc2k   1/1     Running   0          18mNAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
service/kubernetes   ClusterIP   10.96.0.1       none        443/TCP        82m
service/nginx        NodePort    10.104.121.45   none        80:30073/TCP   17m# 4 最后在电脑上访问下部署的nginx服务第三章 资源管理 
本章节主要介绍yaml语法和kubernetes的资源管理方式 
资源管理介绍 
在kubernetes中所有的内容都抽象为资源用户需要通过操作资源来管理kubernetes。  kubernetes的本质上就是一个集群系统用户可以在集群中部署各种服务所谓的部署服务其实就是在kubernetes集群中运行一个个的容器并将指定的程序跑在容器中。  kubernetes的最小管理单元是pod而不是容器所以只能将容器放在Pod中而kubernetes一般也不会直接管理Pod而是通过Pod控制器来管理Pod的。  Pod可以提供服务之后就要考虑如何访问Pod中服务kubernetes提供了Service资源实现这个功能。  当然如果Pod中程序的数据需要持久化kubernetes还提供了各种存储系统。 学习kubernetes的核心就是学习如何对集群上的Pod、Pod控制器、Service、存储等各种资源进行操作 YAML语言介绍 
 YAML是一个类似 XML、JSON 的标记性语言。它强调以数据为中心并不是以标识语言为重点。因而YAML本身的定义比较简单号称一种人性化的数据格式语言。 
heimaage15/ageaddressBeijing/address
/heimaheima:age: 15address: BeijingYAML的语法比较简单主要有下面几个 
大小写敏感使用缩进表示层级关系缩进不允许使用tab只允许空格( 低版本限制 )缩进的空格数不重要只要相同层级的元素左对齐即可#表示注释 
YAML支持以下几种数据类型 
纯量单个的、不可再分的值对象键值对的集合又称为映射mapping/ 哈希hash / 字典dictionary数组一组按次序排列的值又称为序列sequence / 列表list 
# 纯量, 就是指的一个简单的值字符串、布尔值、整数、浮点数、Null、时间、日期
# 1 布尔类型
c1: true (或者True)
# 2 整型
c2: 234
# 3 浮点型
c3: 3.14
# 4 null类型 
c4: ~  # 使用~表示null
# 5 日期类型
c5: 2018-02-17    # 日期必须使用ISO 8601格式即yyyy-MM-dd
# 6 时间类型
c6: 2018-02-17T15:02:3108:00  # 时间使用ISO 8601格式时间和日期之间使用T连接最后使用代表时区
# 7 字符串类型
c7: heima     # 简单写法直接写值 , 如果字符串中间有特殊字符必须使用双引号或者单引号包裹 
c8: line1line2     # 字符串过多的情况可以拆成多行每一行会被转化成一个空格# 对象
# 形式一(推荐):
heima:age: 15address: Beijing
# 形式二(了解):
heima: {age: 15,address: Beijing}# 数组
# 形式一(推荐):
address:- 顺义- 昌平	
# 形式二(了解):
address: [顺义,昌平]小提示  1 书写yaml切记: 后面要加一个空格  2 如果需要将多段yaml配置放在一个文件中中间要使用---分隔  3 下面是一个yaml转json的网站可以通过它验证yaml是否书写正确  https://www.json2yaml.com/convert-yaml-to-json 资源管理方式 命令式对象管理直接使用命令去操作kubernetes资源 kubectl run nginx-pod --imagenginx:1.17.1 --port80  命令式对象配置通过命令配置和配置文件去操作kubernetes资源 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资源类型 
kubernetes中所有的内容都抽象为资源可以通过下面的命令进行查看: 
kubectl api-resources经常使用的资源有下面这些 
资源分类资源名称缩写资源作用集群级别资源nodesno集群组成部分namespacesns隔离Podpod资源podspo装载容器pod资源控制器replicationcontrollersrc控制pod资源replicasetsrs控制pod资源deploymentsdeploy控制pod资源daemonsetsds控制pod资源jobs控制pod资源cronjobscj控制pod资源horizontalpodautoscalershpa控制pod资源statefulsetssts控制pod资源服务发现资源servicessvc统一pod对外接口ingressing统一pod对外接口存储资源volumeattachments存储persistentvolumespv存储persistentvolumeclaimspvc存储配置资源configmapscm配置secrets配置 
操作 
kubernetes允许对资源进行多种操作可以通过–help查看详细的操作命令 
kubectl --help经常使用的操作有下面这些 
命令分类命令翻译命令作用基本命令create创建创建一个资源edit编辑编辑一个资源get获取获取一个资源patch更新更新一个资源delete删除删除一个资源explain解释展示资源文档运行和调试run运行在集群中运行一个指定的镜像expose暴露暴露资源为Servicedescribe描述显示资源内部信息logs日志输出容器在 pod 中的日志attach缠绕进入运行中的容器exec执行执行容器中的一个命令cp复制在Pod内外复制文件rollout首次展示管理资源的发布scale规模扩(缩)容Pod的数量autoscale自动调整自动调整Pod的数量高级命令applyrc通过文件对资源进行配置label标签更新资源上的标签其他命令cluster-info集群信息显示集群信息version版本显示当前Server和Client的版本 
下面以一个namespace / pod的创建和删除简单演示下命令的使用 
# 创建一个namespace
[rootmaster ~]# kubectl create namespace dev
namespace/dev created# 获取namespace
[rootmaster ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   21h
dev               Active   21s
kube-node-lease   Active   21h
kube-public       Active   21h
kube-system       Active   21h# 在此namespace下创建并运行一个nginx的Pod
[rootmaster ~]# kubectl run pod --imagenginx -n dev
kubectl run --generatordeployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generatorrun-pod/v1 or kubectl create instead.
deployment.apps/pod created# 查看新创建的pod
[rootmaster ~]# kubectl get pod -n dev
NAME                   READY   STATUS    RESTARTS   AGE
pod-864f9875b9-pcw7x   1/1     Running   0          21s# 删除指定的pod
[rootmaster ~]# kubectl delete pod pod-864f9875b9-pcw7x
pod pod-864f9875b9-pcw7x deleted# 删除指定的namespace
[rootmaster ~]# kubectl delete ns dev
namespace dev deleted命令式对象配置 
命令式对象配置就是使用命令配合配置文件一起来操作kubernetes资源。 
1 创建一个nginxpod.yaml内容如下 
apiVersion: v1
kind: Namespace
metadata:name: dev---apiVersion: v1
kind: Pod
metadata:name: nginxpodnamespace: dev
spec:containers:- name: nginx-containersimage: nginx:1.17.12执行create命令创建资源 
[rootmaster ~]# kubectl create -f nginxpod.yaml
namespace/dev created
pod/nginxpod created此时发现创建了两个资源对象分别是namespace和pod 
3执行get命令查看资源 
[rootmaster ~]#  kubectl get -f nginxpod.yaml
NAME            STATUS   AGE
namespace/dev   Active   18sNAME            READY   STATUS    RESTARTS   AGE
pod/nginxpod    1/1     Running   0          17s这样就显示了两个资源对象的信息 
4执行delete命令删除资源 
[rootmaster ~]# kubectl delete -f nginxpod.yaml
namespace dev deleted
pod nginxpod deleted此时发现两个资源对象被删除了 
总结:命令式对象配置的方式操作资源可以简单的认为命令    yaml配置文件里面是命令需要的各种参数声明式对象配置 
声明式对象配置跟命令式对象配置很相似但是它只有一个命令apply。 
# 首先执行一次kubectl apply -f yaml文件发现创建了资源
[rootmaster ~]#  kubectl apply -f nginxpod.yaml
namespace/dev created
pod/nginxpod created# 再次执行一次kubectl apply -f yaml文件发现说资源没有变动
[rootmaster ~]#  kubectl apply -f nginxpod.yaml
namespace/dev unchanged
pod/nginxpod unchanged总结:其实声明式对象配置就是使用apply描述一个资源最终的状态在yaml中定义状态使用apply操作资源如果资源不存在就创建相当于 kubectl create如果资源已存在就更新相当于 kubectl patch扩展kubectl可以在node节点上运行吗 ?  kubectl的运行是需要进行配置的它的配置文件是$HOME/.kube如果想要在node节点运行此命令需要将master上的.kube文件复制到node节点上即在master节点上执行下面操作 
scp  -r  HOME/.kube   node1: HOME/使用推荐: 三种方式应该怎么用 ? 创建/更新资源 使用声明式对象配置 kubectl apply -f XXX.yaml 
删除资源 使用命令式对象配置 kubectl delete -f XXX.yaml 
查询资源 使用命令式对象管理 kubectl get(describe) 资源名称