明白了 POD 的定义后,我们将上面创建 POD 的 YAML 文件保存成 pod.yaml,然后使用`kubectl`创建 POD:
```shell
$ kubectl create -f pod.yaml
pod "kube100-site" created
```
然后我们就可以使用我们前面比较熟悉的 kubectl 命令来查看 POD 的状态了:
```shell
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
kube100-site 2/2 Running 0 1m
```
到这里我们的 POD 就创建成功了,如果你在创建过程中有任何问题,我们同样可以使用前面的kubectl describe 进行排查。我们先删除上面创建的 POD:
```
$ kubectl delete -f pod.yaml
pod "kube100-site" deleted
```
#### 创建 Deployment
现在我们可以来创建一个真正的 Deployment。在上面的例子中,我们只是单纯的创建了一个 POD 实例,但是如果这个 POD 出现了故障的话,我们的服务也就挂掉了,所以 kubernetes 提供了一个`Deployment`的概念,可以让 kubernetes 去管理一组 POD 的副本,也就是副本集,这样就可以保证一定数量的副本一直可用的,不会因为一个 POD 挂掉导致整个服务挂掉。我们可以这样定义一个 Deployment:
```yaml
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: kube100-site
spec:
replicas: 2
```
注意这里的`apiVersion`对应的值是`extensions/v1beta1`,当然 kind 要指定为 Deployment,因为这就是我们需要的,然后我们可以指定一些 meta 信息,比如名字,或者标签之类的。最后,最重要的是`spec`配置选项,这里我们定义需要两个副本,当然还有很多可以设置的属性,比如一个 Pod 在没有任何错误变成准备的情况下必须达到的最小秒数。
我们上节课给大家讲解了 YAML 文件的使用,也手动的创建了一个简单的 Pod,这节课开始我们就来深入的学习下我们的 Pod。在Kubernetes集群中除了我们经常使用到的普通的 Pod 外,还有一种特殊的 Pod,叫做`Static Pod`,就是我们说的静态 Pod,静态 Pod 有什么特殊的地方呢?
静态 Pod 直接由特定节点上的`kubelet`进程来管理,不通过 master 节点上的`apiserver`。无法与我们常用的控制器`Deployment`或者`DaemonSet`进行关联,它由`kubelet`进程自己来监控,当`pod`崩溃时重启该`pod`,`kubelete`也无法对他们进行健康检查。静态 pod 始终绑定在某一个`kubelet`,并且始终运行在同一个节点上。
强制删除一个 pod 是从集群状态还有 etcd 里立刻删除这个 pod。 当 Pod 被强制删除时, api 服务器不会等待来自 Pod 所在节点上的 kubelet 的确认信息:pod 已经被终止。在 API 里 pod 会被立刻删除,在节点上, pods 被设置成立刻终止后,在强行杀掉前还会有一个很小的宽限期。