跳转至

0002-Deployment-create

创建 deployment 类型应用

通过创建 YAML 的描述文件,k8s 根据这个 YAML来创建相对应的资源对象。

  1. 创建文件 nginx-deployment.yaml ,内容如下:

查看 pod
apiVersion: v1
kind: Namespace # 配置的类型,我们使用的是 Namespace
metadata:
  name: datarc # 命令空间名称

---

apiVersion: apps/v1 #与k8s集群版本有关,使用 kubectl api-versions 即可查看当前集群支持的版本
kind: Deployment    #该配置的类型,我们使用的是 Deployment
metadata:           #译名为元数据,即 Deployment 的一些基本属性和信息
  namespace: datarc #命名空间
  name: nginx-deployment    #Deployment 的名称
  labels:       #标签,可以灵活定位一个或多个资源,其中key和value均可自定义,可以定义多组,目前不需要理解
    app: nginx  #为该Deployment设置key为app,value为nginx的标签
spec:           #这是关于该Deployment的描述,可以理解为你期待该Deployment在k8s中如何使用
  replicas: 2   # 使用该 Deployment 创建两个应用程序实例
  selector:     #标签选择器,与上面的标签共同作用,目前不需要理解
    matchLabels: #选择包含标签app:nginx的资源
      app: nginx
  template:     #这是选择或创建的Pod的模板
    metadata:   #Pod的元数据
      labels:   #Pod的标签,上面的selector即选择包含标签app:nginx的Pod
        app: nginx
    spec:       #期望Pod实现的功能(即在pod中部署)
      containers:   #生成container,与docker中的container是同一种
      - name: nginx #container的名称
        image: nginx:1.7.9  #使用镜像nginx:1.7.9创建container,该container默认80端口可访问
        ports:
          - containerPort: 80
2. 应用 YAML 文件创建 deployment
[root@k8smaster001 ~]# kubectl apply -f nginx-deployment.yaml 
namespace/datarc unchanged
deployment.apps/nginx-deployment created
3. 查看验证
[root@k8smaster001 ~]# kubectl get deployment -n datarc
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   2/2     2            2           74s

[root@k8smaster001 ~]# kubectl get replicasets -n datarc
NAME                          DESIRED   CURRENT   READY   AGE
nginx-deployment-54bbf55b54   2         2         2       2m32s

访问 deployment

[root@k8smaster001 ~]# kubectl get pod -n datarc -owide
NAME                                READY   STATUS    RESTARTS   AGE    IP              NODE           NOMINATED NODE   READINESS GATES
nginx-deployment-54bbf55b54-bmppd   1/1     Running   0          3m7s   10.244.87.210   k8sworker001   <none>           <none>
nginx-deployment-54bbf55b54-gcnrm   1/1     Running   0          3m7s   10.244.35.30    k8sworker002   <none>           <none>

pod 在 k8s-worker001 k8sworker002 节点 , pod 的 IP 为 10.244.87.210 10.244.35.30

所有集群节点的IP都为10.244.0.0/16这个大网段内的子网

[root@k8smaster002 ~]# curl 10.244.35.30
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;

删除 deployment 中的 pod

  1. 删除pod(注意: 是删除deployment中的pod
删除 pod 会立即拉起 replicas 定义的数量
[root@k8smaster002 ~]# kubectl get pod -n datarc -owide
NAME                               READY   STATUS    RESTARTS   AGE     IP              NODE           NOMINATED NODE   READINESS GATES
nginx-deployment-9d6cbcc65-9g7vd   1/1     Running   0          4m57s   10.244.35.33    k8sworker002   <none>           <none>
nginx-deployment-9d6cbcc65-dhps5   1/1     Running   0          12m     10.244.87.208   k8sworker001   <none>           <none>
[root@k8smaster002 ~]# kubectl delete pod nginx-deployment-9d6cbcc65-9g7vd -n datarc
pod "nginx-deployment-9d6cbcc65-9g7vd" deleted
# 再次查看,发现又重新启动了一个 pod,节点 和 IP 地址也变化
[root@k8smaster002 ~]# kubectl get pod -n datarc
[root@k8smaster002 ~]# kubectl get pod -n datarc -owide
NAME                               READY   STATUS    RESTARTS   AGE   IP              NODE           NOMINATED NODE   READINESS GATES
nginx-deployment-9d6cbcc65-cwsxn   1/1     Running   0          4s    10.244.35.34    k8sworker003   <none>           <none>
nginx-deployment-9d6cbcc65-dhps5   1/1     Running   0          12m   10.244.87.208   k8sworker001   <none>           <none>

pod 的 IP 不是固定的,比如把整个集群关闭再启动, pod 也会自动启动,但是 IP 地址也会变化,既然 IP 地址不是固定的,所以需要一个固定的访问 endpoint 给用户,那么这种方式就是 service.

pod 版本升级

1. 查看帮助

kubectl set image -h

2. 升级前验证 image 版本

[root@k8smaster002 ~]# kubectl describe deployment  nginx-deployment -n datarc |grep Image:
    Image:        nginx:1.7.9
3. 升级为 1.8.1 版

[root@k8smaster001 ~]# kubectl set image deployment nginx-deployment -n datarc nginx=nginx:1.8.1 --record
deployment.apps/nginx-deployment image updated
[root@k8smaster001 ~]# kubectl describe deployment nginx-deployment -n datarc |grep Image
    Image:        nginx:1.8.1

删除deployment

如果使用 kubectl delete deployment my-deployment命令删除 deployment ,那么里面的 pod 也会被自动删除

指定文件删除、再次查看发现 deployment 已被删除
[root@k8smaster001 ~]# kubectl get pod -n datarc
NAME                               READY   STATUS    RESTARTS   AGE
nginx-deployment-9d6cbcc65-2jfvd   1/1     Running   0          2s
nginx-deployment-9d6cbcc65-p65fc   1/1     Running   0          2s
[root@k8smaster001 ~]# kubectl delete -f nginx-deployment.yaml 
namespace "datarc" deleted
deployment.apps "nginx-deployment" deleted
[root@k8smaster001 ~]# kubectl get pod -n datarc
No resources found in datarc namespace.
指定 deployment 资源 和具体的 deployment 名称
[root@k8smaster001 ~]# kubectl get pod -n datarc
NAME                               READY   STATUS    RESTARTS   AGE
nginx-deployment-9d6cbcc65-kgtk4   1/1     Running   0          51m
nginx-deployment-9d6cbcc65-p98d6   1/1     Running   0          51m
[root@k8smaster001 ~]# kubectl delete deployment nginx-deployment -n datarc
deployment.apps "nginx-deployment" deleted
[root@k8smaster001 ~]# kubectl get pod -n datarc
No resources found in datarc namespace.