K8s - Kubernetes使用详解2(运行Deployment样例2:使用配置文件创建资源)

作者: hangge 发布时间: 2019-09-02 浏览: 2503 次 编辑

    我们知道 Kubernetes 支持两种创建资源的方式:命令和配置文件。在上文中我介绍了前者(点击查看),下面我接着介绍后者:通过配置文件创建资源。

二、运行 Deployment(使用配置文件)

1,基本用法

(1)首先我创建一个配置文件(nginx.yml),里面配置好所有资源的属性,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
apiVersion: extensions/v1beta1 # apiVersion 是当前配置格式的版本
kind: Deployment # kind 是要创建的资源类型,这里是 Deployment
metadata: # metadata 是该资源的元数据,name 是必需的元数据项
  name: nginx-deployment
spec: # spec 部分是该 Deployment 的规格说明
  replicas: 2 # replicas 指明副本数量,默认为 1
  template: # template 定义 Pod 的模板,这是配置文件的重要部分
    metadata: # metadata 定义 Pod 的元数据,至少要定义一个 label。label 的 key 和 value 可以任意指定。
      labels:
        app: web_server
    spec: # pec 描述 Pod 的规格,此部分定义 Pod 中每一个容器的属性,name 和 image 是必需的。
      containers:
      - name: nginx
        image: nginx:1.7.9


(2)然后通过 kubectl apply 命令进行创建即可。

        注意kubectl apply 不但能够创建 Kubernetes 资源,也能对资源进行更新,非常方便。

1
kubectl apply -f nginx.yml

原文:K8s - Kubernetes使用详解2(运行Deployment样例2:使用配置文件创建资源)


(3)部署成功后,可以通过 kubectl get 查看 nginx-deployment 的各种资源:

1
2
3
kubectl get deployment
kubectl get replicaset
kubectl get pod -o wide

原文:K8s - Kubernetes使用详解2(运行Deployment样例2:使用配置文件创建资源)


2,伸缩(Scale)

(1)伸缩是指在线增加或减少 Pod 的副本数。比如我们修改 nginx.yml 文件内容,将副本改成 3 个。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
apiVersion: extensions/v1beta1 # apiVersion 是当前配置格式的版本
kind: Deployment # kind 是要创建的资源类型,这里是 Deployment
metadata: # metadata 是该资源的元数据,name 是必需的元数据项
  name: nginx-deployment
spec: # spec 部分是该 Deployment 的规格说明
  replicas: 3 # replicas 指明副本数量,默认为 1
  template: # template 定义 Pod 的模板,这是配置文件的重要部分
    metadata: # metadata 定义 Pod 的元数据,至少要定义一个 label。label 的 key 和 value 可以任意指定。
      labels:
        app: web_server
    spec: # pec 描述 Pod 的规格,此部分定义 Pod 中每一个容器的属性,name 和 image 是必需的。
      containers:
      - name: nginx
        image: nginx:1.7.9


(2)再次执行 kubectl apply 命令,可以看到副本数变成了 3 个。

1
kubectl apply -f nginx.yml

原文:K8s - Kubernetes使用详解2(运行Deployment样例2:使用配置文件创建资源)


3,用 label 控制 pod 的位置

默认情况下,scheduler 会将 pod 调度到所有可用的 Node,不过有些情况我们希望将 Pod 部署到指定的 Node,比如:

  • 将有大量磁盘 I/O 的 Pod 部署到配置了 SSD 的 Node

  • 或者 Pod 需要 GPU,需要运行在配置了 GPU 的节点上。

Kubernetes 通过 label 来实现这个功能。label 是 key-value 对,各种资源都可以设置 label,灵活添加各种自定义属性。

(1)比如下面命令(master 节点上执行)会给 node2 节点打上一个 ssd 的标签(将其标注为配置了 SSD 的节点):

1
kubectl label node node2 disktype=ssd


(2)然后通过如下命令可以查看节点的 label。注意:除了 disktype,可以看到 Node 还有几个 Kubernetes 自己维护的 label

1
kubectl get node --show-labels

原文:K8s - Kubernetes使用详解2(运行Deployment样例2:使用配置文件创建资源)


(3)在 nginx.yml 文件中定义 nodeselector 为这个自定义标签,就可以指定 pod 在 node2 中运行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: web_server
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
      nodeSelector:
        disktype: ssd


(4)最后我们执行 kubectl apply 命令进行部署,可以看到两个副本都是运行在 node2 上。

1
kubectl apply -f nginx.yml

原文:K8s - Kubernetes使用详解2(运行Deployment样例2:使用配置文件创建资源)

(5)如果要删除 label 也很简单。执行如下命令则可删除 node2 的 disktype 标注。

注意:删除标签后 Pod 并不会重新部署,所以 pod 依旧是在 node2 上。除非删除或注释掉配置文件中的 nodeSelector 配置,然后通过 kubectl apply 重新部署。

1
kubectl label node node2 disktype-


附:删除 Deployment

    既然可以通过 yml 配置文件来运行 Deployment,当然也可以使用它来来删除对应的 Deployment。下面是一个简单的样例:

1
kubectl delete -f nginx.yml


原文链接:https://www.hangge.com/blog/cache/detail_2430.html